使用一些动画效果更新listview项目颜色

时间:2019-11-02 17:54:39

标签: flutter

我的项目

嗨, 我正在尝试为我的flutter应用程序构建一个多选菜单。最终结果应该是这样的模型。

Menu Selected Menu

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

代码

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);
          }),
    );
  }
}

问题

到目前为止,我可以轻松地获得所选项目并重新粉刷所选项目,但是,要实现此目的,我需要重建整个列表。是否可以通过一些简单的淡出颜色动画来更改单个子项目的颜色?无需重建所有列表?

希望我的英语足以解释这个问题

0 个答案:

没有答案