如果添加到动画列表,Flutter 查找停用的小部件的祖先是不安全的
Flutter Looking up a deactivated widget's ancestor is unsafe if adding to animated list
我正在我的应用程序中使用 AnimatedList
。问题是当尝试插入一个项目时我得到这个错误:
Looking up a deactivated widget's ancestor is unsafe.
这是我的清单:
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
我正在调用 Callback Function
在 dispose
里面,所以如果弹出视图,我会收到通知。这是其逻辑:
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
为空。到这里怎么走?
如果您需要更多信息,请告诉我!
我通过删除 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);
}
},
);
},
我正在我的应用程序中使用 AnimatedList
。问题是当尝试插入一个项目时我得到这个错误:
Looking up a deactivated widget's ancestor is unsafe.
这是我的清单:
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
我正在调用 Callback Function
在 dispose
里面,所以如果弹出视图,我会收到通知。这是其逻辑:
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
为空。到这里怎么走?
如果您需要更多信息,请告诉我!
我通过删除 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);
}
},
);
},