mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
This CL is a warmup for using a more sophisticated gesture disambiguation. 1) Use gesturetap instead of click. We should probably remove click events because folks should use gesturetap to integrate with the gesture system. 2) Handle the case where you swipe the drawer during an animation. Previously we had an assert which triggered in some multitouch scenarios. We'll eventually move this over to gestureswipe. 3) Remove an extra container for ink splashes. There's no need to group all the ink splashes in a container. They can all just be children of the Material component itself. This structure is left over from when Material was a base class. R=eseidel@chromium.org Review URL: https://codereview.chromium.org/1013713005
85 lines
1.9 KiB
Dart
85 lines
1.9 KiB
Dart
// Copyright 2015 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import '../fn.dart';
|
|
import 'button_base.dart';
|
|
|
|
typedef void ValueChanged(value);
|
|
|
|
class Checkbox extends ButtonBase {
|
|
static final Style _style = new Style('''
|
|
transform: translateX(0);
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
-webkit-user-select: none;
|
|
cursor: pointer;
|
|
width: 30px;
|
|
height: 30px;'''
|
|
);
|
|
|
|
static final Style _containerStyle = new Style('''
|
|
border: solid 2px;
|
|
border-color: rgba(90, 90, 90, 0.25);
|
|
width: 10px;
|
|
height: 10px;'''
|
|
);
|
|
|
|
static final Style _containerHighlightStyle = new Style('''
|
|
border: solid 2px;
|
|
border-color: rgba(90, 90, 90, 0.25);
|
|
width: 10px;
|
|
height: 10px;
|
|
border-radius: 10px;
|
|
background-color: orange;
|
|
border-color: orange;'''
|
|
);
|
|
|
|
static final Style _uncheckedStyle = new Style('''
|
|
top: 0px;
|
|
left: 0px;'''
|
|
);
|
|
|
|
static final Style _checkedStyle = new Style('''
|
|
top: 0px;
|
|
left: 0px;
|
|
transform: translate(2px, -15px) rotate(45deg);
|
|
width: 10px;
|
|
height: 20px;
|
|
border-style: solid;
|
|
border-top: none;
|
|
border-left: none;
|
|
border-right-width: 2px;
|
|
border-bottom-width: 2px;
|
|
border-color: #0f9d58;'''
|
|
);
|
|
|
|
bool checked;
|
|
ValueChanged onChanged;
|
|
|
|
Checkbox({ Object key, this.onChanged, this.checked }) : super(key: key) {
|
|
events.listen('gesturetap', _handleClick);
|
|
}
|
|
|
|
void _handleClick(sky.Event e) {
|
|
onChanged(!checked);
|
|
}
|
|
|
|
Node build() {
|
|
return new Container(
|
|
style: _style,
|
|
children: [
|
|
new Container(
|
|
style: highlight ? _containerHighlightStyle : _containerStyle,
|
|
children: [
|
|
new Container(
|
|
style: checked ? _checkedStyle : _uncheckedStyle
|
|
)
|
|
]
|
|
)
|
|
]
|
|
);
|
|
}
|
|
}
|