customtogglebuttons
一个自定义的 ToggleButtons 实现,相比 Flutter 内置的 ToggleButtons 提供了更多灵活性。
一个自定义的 ToggleButtons 实现,比 Flutter 内置的 ToggleButtons 具有更高的灵活性
{"sdk":"flutter"}{"sdk":"flutter"}以下为英文项目原文快照,最新内容请访问 GitHub。
A custom ToggleButtons implementation that allows more flexibility than Flutter's inbuilt ToggleButtons.
Add this dependency to your package's pubspec.yaml file:
dependencies:
...
customtogglebuttons: ^0.0.5
and install it by running the following in your command line:
flutter pub get
Now you can use this in your source file by adding the following import:
import 'package:customtogglebuttons/customtogglebuttons.dart';
The simplest example is below, it creates a 2 icon set of toggle buttons that can be selected or unselected on each click.
Create a list of boolean values to store selected/unselected state:
List<bool> _isSelected = [false, false];
In your build method:
CustomToggleButtons(
isSelected: _isSelected,
children: <Widget>[
Icon(Icons.add),
Icon(Icons.remove),
],
onPressed: (index) {
setState(() {
_isSelected[index] = !_isSelected[index];
});
},
),
NOTE: The length of the bool List you pass in isSelected has to be the same as the length of the children list.
The source code for all examples is available in the example/lib/main.dart file.
You can run the example app on your mobile device and have a look at each of the samples in action.
https://github.com/jitinder/customtogglebuttons/blob/master/screenshots/example.png?raw=trueShows the default behaviour without any additional styling properties. When the width of the buttons is longer than the available width, the next buttons automatically wrap to the next line.
https://github.com/jitinder/customtogglebuttons/blob/master/screenshots/default.gif?raw=trueShows vertically aligned toggle buttons, and a sample with Text widgets.
https://github.com/jitinder/customtogglebuttons/blob/master/screenshots/vertical.gif?raw=trueShows an example of borderless toggle buttons, and an example where the border width and color are set for selected and unselected states.
https://github.com/jitinder/customtogglebuttons/blob/master/screenshots/borderstyle.gif?raw=trueShows colors set for the selected, unselected and disabled states. Also shows an example with a specified splash color.
https://github.com/jitinder/customtogglebuttons/blob/master/screenshots/color%20styling.gif?raw=trueShows examples with spacing for horizontal and vertical alignment, and an example with elevation.
https://github.com/jitinder/customtogglebuttons/blob/master/screenshots/spaceandelev.gif?raw=true| Parameter | Type | Usage | Description | Required? |
|---|---|---|---|---|
| children | List<Widget> |
children: <Widget>[...] |
The toggle button widgets. These are typically Icon or Text widgets. Length of list must be equal to the length of isSelected list. |
Yes |
| isSelected | List<bool> |
isSelected: <bool>[...] |
The corresponding selection state of each toggle button. Length of list must be equal to the length of children list. | Yes |
| onPressed | void Function(index) |
onPressed: (){...} |
The callback that is called when a button is tapped. The index parameter of the callback is the index of the button that is tapped | No |
| constraints | BoxConstraints |
constraints: BoxConstraints(...) |
Defines the button's size. If this property is null, then BoxConstraints(minWidth: 48.0, minHeight: 48.0) is be used. | No |
| color | Color |
color: Colors.orange |
The color for descendant [Text] and [Icon] widgets if the button is enabled and not selected. Defaults to Theme.of(context).colorScheme.onSurface. | No |
| selectedColor | Color |
selectedColor: Colors.orange |
The color for descendant [Text] and [Icon] widgets if the button is selected. Defaults to Theme.of(context).colorScheme.primary. | No |
| disabledColor | Color |
disabledColor: Colors.orange |
The color for descendant [Text] and [Icon] widgets if the button is disabled. Defaults to Theme.of(context).colorScheme.onSurface.withOpacity(0.38). | No |
| fillColor | Color |
fillColor:: Colors.orange |
The fill color for selected toggle buttons. Defaults to Colors.transparent. | No |
| unselectedFillColor | Color |
unselectedFillColor: Colors.orange |
The fill color for unselected toggle buttons. Defaults to Colors.transparent. | No |
| disabledFillColor | Color |
disabledFillColor: Colors.orange |
The fill color for disabled toggle buttons. Defaults to Colors.transparent. | No |
| highlightColor | Color |
highlightColor: Colors.orange |
The highlight color for the button's InkWell. Defaults to Theme.of(context).highlightColor. |
No |
| splashColor | Color |
splashColor: Colors.orange |
The splash color for the button's InkWell. Defaults to Theme.of(context).splashColor. |
No |
| hoverColor | Color |
hoverColor: Colors.orange |
The color to use for filling the button when the button has a pointer hovering over it. Defaults to Theme.of(context).hoverColor. | No |
| renderBorder | bool |
renderBorder: false |
Whether or not to render a border around each toggle button. If false, no border will be rendered, even if other border properties are defined. Defaults to true. | No |
| borderColor | Color |
borderColor: Colors.orange |
The border color to display when the toggle button is enabled and not selected. Defaults to Colors.black12. | No |
| selectedBorderColor | Color |
selectedBorderColor: Colors.orange |
The border color to display when the toggle button is selected. Defaults to Colors.black12. | No |
| disabledBorderColor | Color |
disabledBorderColor: Colors.orange |
The border color to display when the toggle button is disabled. Defaults to Colors.black12. | No |
| borderWidth | double |
borderWidth: 2.5 |
The width of the border surrounding each toggle button. This applies to both the greater surrounding border, as well as the borders between buttons. Defaults to a width of 1.0 | No |
| borderRadius | double |
borderRadius: 2.5 |
Not implemented The radii of the border's corners. Defaults to 0.0 | No |
| spacing | double |
spacing: 5.0 |
The space between two consecutive toggle buttons. Defaults to 0.0. | No |
| runSpacing | double |
runSpacing: 5.0 |
The space between two consecutive runs of toggle buttons. Defaults to 0.0. | No |
| direction | Axis |
direction: Axis.vertical |
The direction in which the toggle buttons will be created. Can be either Axis.horizontal or Axis.vertical. Defaults to Axis.horizontal. | No |
| elevation | double |
elevation: 10.0 |
The elevation of each toggle button. Defaults to 0.0. | No |
All contributions are welcome 😄