如果添加到动画列表,Flutter 查找已停用小部件的祖先是不安全的
Posted
技术标签:
【中文标题】如果添加到动画列表,Flutter 查找已停用小部件的祖先是不安全的【英文标题】:Flutter Looking up a deactivated widget's ancestor is unsafe if adding to animated list 【发布时间】:2021-10-18 01:26:32 【问题描述】:我在我的应用程序中使用AnimatedList
。问题是在尝试插入项目时出现此错误:
查找已停用小部件的祖先是不安全的。
这是我的清单:
child: AnimatedList(
padding: EdgeInsets.zero,
shrinkWrap: true,
key: listKey,
initialItemCount: month.memories.length,
itemBuilder: (context, index, animation)
return slideIt(
context,
month.memories[index],
index,
animation,
month,
);
,
),
现在列表在View 1
中,用户pushes
到View 2
,他在View 2
上添加数据我在dispose
内调用Callback Function
,所以如果视图我会收到通知被弹出。逻辑如下:
CupertinoScaffold.showCupertinoModalBottomSheet(
duration: Duration(
milliseconds: 350,
),
expand: true,
context: context,
builder: (context) => AddMemoryPage(
memoryWasAdded: (addedMemory)
if (addedMemory != null)
_addMemory(context, addedMemory);
,
),
);
而addMemory
看起来像这样:
_addMemory(BuildContext context, Memory memoryToAdd)
month.memories.add(memoryToAdd);
AnimatedList.of(context).insertItem(
month.memories.length - 1,
duration: Duration(
milliseconds: 500,
),
);
我在这里做错了什么?我也用listKey.currentState
尝试过,但这也失败了,因为。 currentState
为空。怎么走?
如果您需要更多信息,请告诉我!
【问题讨论】:
【参考方案1】:我通过删除 callback
解决了这个问题,并在弹出第二个屏幕 (pop(context, data
) 时简单地传递了一个值,然后我可以像这样检索它:
onTapped: ()
CupertinoScaffold.showCupertinoModalBottomSheet(
duration: Duration(
milliseconds: 350,
),
expand: true,
context: context,
builder: (context) => AddMemoryPage(),
).then(
(memory)
if (memory is Memory)
_addMemory(context, memory);
,
);
,
【讨论】:
以上是关于如果添加到动画列表,Flutter 查找已停用小部件的祖先是不安全的的主要内容,如果未能解决你的问题,请参考以下文章
Flutter & Navigator & ImagePicker : 为啥我可以进入下一页?查找已停用小部件的祖先是不安全的