嗨, 我正在尝试为我的flutter应用程序构建一个多选菜单。最终结果应该是这样的模型。
为了实现这一点,我构建了两个小部件:一个用于处理列表,另一个用于呈现列表对象。
class ButtonPicker extends StatefulWidget {
@override
_ButtonPickerState createState() => _ButtonPickerState();
}
class _ButtonPickerState extends State<ButtonPicker> {
int _selectedItem = -1;
List<String> _data = [
'item',
'item',
'item',
'item'
];
void callback(int selectedIndex) {
print(selectedIndex);
setState(() {
_selectedItem = selectedIndex;
});
}
@override
Widget build(BuildContext context) {
return ListView.builder(
padding: const EdgeInsets.all(0),
physics: BouncingScrollPhysics(),
itemCount: _data.length,
itemBuilder: (BuildContext context, int i) {
return ButtonSwitch(
text: _data[i],
callback: callback,
index: i,
color: _selectedItem == i ? Colors.blue : Colors.white,
);
});
}
}
这是商品小工具
class ButtonSwitch extends StatelessWidget {
final Function(int) callback;
final String text;
final int index;
final Color color;
ButtonSwitch({
@required this.callback,
@required this.index,
this.text,
this.color,
});
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(bottom: 8),
child: FlatButton(
color: color == null ? Colors.white : color,
textColor: Colors.black,
child: Padding(
padding: EdgeInsets.fromLTRB(0, 15, 0, 15),
child: Text(
text == null ? 'Button' : text,
style: DialogButtonStyle,
),
),
shape: RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(15.0),
),
onPressed: () {
callback(index);
}),
);
}
}
到目前为止,我可以轻松地获得所选项目并重新粉刷所选项目,但是,要实现此目的,我需要重建整个列表。是否可以通过一些简单的淡出颜色动画来更改单个子项目的颜色?无需重建所有列表?
希望我的英语足以解释这个问题