我们在本章回中介绍的SegmentedButton
组件是一种分段式按钮,它把多个按钮连接成一组显示,组内再对不同的按钮进行分段显示。这种按钮类型我们以前介绍的单选按钮和多选按钮,它会把多个按钮进行统一分组管理。SegmentedButton
是Material3引入的新组件,我们将在本章回中详细介绍它的使用方法。
在Flutter中,SegmentedButton组件不能单独使用,它还需要配合ButtonSegment组件一起使用,类似NavigationBar和NavigationDestination配合使用
一样。接下来我们分别介绍这两种组件。
和其它组件一样,SegmentedButton
组件提供了相关的属性来控制自己,下面是常用的属性:
上面介绍的这些属性中,前两个属性是必选属性,其它属性都是可选属性。
和其它组件一样,ButtonSegment
组件提供了相关的属性来控制自己,下面是常用的属性:
上面介绍的这些属性中,第一个属性是必选属性,其它属性都是可选属性。当value属性的值与SegmentedButton中selected属性的值相等时,表示当前的按钮被选中了。
该组件主要用来给SegmentedButton的segments
属性赋值,稍后我们将通过示例代码来演示。
Set<int> selectedSet = {2};
enum Numbers {one,two,three,four}
Set<Numbers> multiSelectedSet = {Numbers.two,Numbers.three};
SegmentedButton(
segments: const [
ButtonSegment( label: Text("one"), icon: Icon(Icons.add), value: 1,),
ButtonSegment( label: Text("tow"), icon: Icon(Icons.favorite), value: 2,),
ButtonSegment( label: Text("three"), icon: Icon(Icons.do_not_disturb), value: 3,),
],
selected: selectedSet,
onSelectionChanged: (Set<int>newSelection){
debugPrint("changed $newSelection");
setState(() {
selectedSet = newSelection;
});
},
),
SegmentedButton(
segments: const [
ButtonSegment( label: Text("one"), icon: Icon(Icons.add), value: Numbers.one,),
ButtonSegment( label: Text("tow"), icon: Icon(Icons.favorite), value: Numbers.two,),
ButtonSegment( label: Text("three"), icon: Icon(Icons.do_not_disturb), value: Numbers.three,),
ButtonSegment( label: Text("three"), icon: Icon(Icons.do_not_disturb), value: Numbers.four,),
],
multiSelectionEnabled: true,
selected: multiSelectedSet,
///点击时切换按钮,如果是已经选择的就变成未选择
onSelectionChanged: (Set<Numbers> newSelected) {
debugPrint("changed $newSelected");
setState(() {
multiSelectedSet = newSelected;
});
},
)
上面的示例代码中演示了前面小节中介绍的各种属性,还有一些细节需要注意:
Set
类型;上面的示例代码中演示了两个SegmentedButton
,一个可以进行单选操作,另外一个可以进行多选操作,下面是示例程序的运行效果图,请大家参考。
效果图中按钮上面的文字就是label属性的值,未选择的按钮图标是icon属性的值,按钮被选择后会改变颜色,可以通过style属性控制,同时按钮的图标显示一个对号,该对号覆盖了按钮原料的图标。
最后,我们对本章回的内容进行全面的总结:
看官们,与"SegmentedButton组件"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!