Flutter 使用一些动画抖动更新listview项目颜色 我的项目

Flutter 使用一些动画抖动更新listview项目颜色 我的项目,flutter,Flutter,嗨, 我正在尝试为我的颤振应用程序构建一个多选菜单。最终的结果应该是类似于这个模型的东西 为了实现这一点,我构建了两个小部件:一个用于处理列表,另一个用于呈现列表对象 代码 问题 到目前为止,我可以很容易地获得所选项目并重新绘制所选项目,但为了实现这一点,我需要重建整个列表。有没有办法通过一些简单的淡出颜色动画来更改单个子项的颜色?不重建所有列表 希望我的英语能很好地解释这个问题你可以尝试用Streambuilder和bloc的方法包装你的listView,这样你就不需要重建所有列表项,你可

嗨, 我正在尝试为我的颤振应用程序构建一个多选菜单。最终的结果应该是类似于这个模型的东西

为了实现这一点,我构建了两个小部件:一个用于处理列表,另一个用于呈现列表对象

代码 问题 到目前为止,我可以很容易地获得所选项目并重新绘制所选项目,但为了实现这一点,我需要重建整个列表。有没有办法通过一些简单的淡出颜色动画来更改单个子项的颜色?不重建所有列表


希望我的英语能很好地解释这个问题

你可以尝试用Streambuilder和bloc的方法包装你的listView,这样你就不需要重建所有列表项,你可以只重建你想要的指定项谢谢,我一定会尝试的
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);
          }),
    );
  }
}