Flutter将AnimatedList与可弃项组合在一起会导致异常,有时

下面有一个完整的示例,说明如何尝试实现带有可禁用项目的AnimatedList,您可以向左滑动以将其删除:

  final GlobalKey<AnimatedListState> _listKey = GlobalKey();
  final _items = ['0','1','2','3','4','5','6','7','8','9','10'];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('list test'),),body: Center(
        child: AnimatedList(
          key: _listKey,initialItemCount: _items.length,itemBuilder: (context,index,animation) =>
              _buildItem(index,context,animation),);
  }

  Widget _buildItem(int index,BuildContext context,Animation animation,[passedDismissible]) {
    var dismissible;
    dismissible = passedDismissible ??
        Dismissible(
          key: Key(_items[index].toString()),background: Container(
            color: Colors.redaccent,direction: DismissDirection.endToStart,child: Center(
            child: Text('item ' + _items[index]),confirmDismiss: (_) {
            return Future.delayed(Duration(seconds: 2),() {
              return true;
            });
          },onDismissed: (_) {
            _listKey.currentState.removeItem(
              index,(context,animation) {
                return _buildItem(index,animation,dismissible);
              },duration: Duration(milliseconds: 500),);
            _items.removeAt(index);
          },);

    return SizeTransition(
      sizeFactor: animation,axis: Axis.vertical,child: SizedBox(
        height: 100,child: dismissible,);
  }

此示例将在2秒内确认删除。

为了在播放删除动画时保持红色背景,我自己进行了_buildItem调用,并传递了Dismissible小部件。如果您知道更好的解决方案,请告诉我。

现在真正的问题是,如果您从上到下快速滑动一些项目,您会发现红色消失了,有时甚至会引起异常。但是,如果您从下往上滑动,一切正常。

我还注意到,如果您已将某物品滑走,则可以在红色上滑动,然后突然出现这些物品。这样做也是导致异常的秘诀……我设法阻止了用户交互,以防止这种情况发生(在本示例中不是)。

我一直在玩这个游戏,我想知道怎样正确地使它们按应有的方式工作。

谢谢!

dhtz124 回答:Flutter将AnimatedList与可弃项组合在一起会导致异常,有时

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2968521.html

大家都在问