flutter - 从子项弹出时,根小部件未重建
问题描述
我一直在开发一个颤振应用程序,用户从一个有状态的小部件开始,其中包含 SQLite 数据库中的项目的 ListView。用户可以点击列表中的项目,该项目导航到可以修改和保存项目的页面。
使用Navigator.pop(context)
时,应用程序会返回到 ListView 但不会重建。在我强制重建(热重载)之前,所做的更改不会显示
这是 Flutter 1.17 中的一个新问题。
根视图
class ItemsView extends StatefulWidget {
@override
_ItemsView State createState() => _ItemsViewState();
}
class _ItemsViewState extends State<ItemsView> {
@override
Widget build(BuildContext context) {
return FutureBuilder<List<Story>>(
future: DBProvider.db.getAllItems(),
builder: (BuildContext context, AsyncSnapshot<List<Story>> snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data[0])
}
}
)
}
}
第二视图
class ModifyView extends StatefulWidget {
@override
_ModifyView State createState() => _ItemsViewState();
}
class _ItemsViewState extends State<ItemsView> {
@override
Widget build(BuildContext context) {
return FutureBuilder<List<Story>>(
future: DBProvider.db.getAllItems(),
builder: (BuildContext context, AsyncSnapshot<List<Story>> snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data[0])
}
}
)
}
}
如何强制小部件重新加载?
解决方案
您可以使用可以重新加载页面或执行任何其他操作的Navigator's
方法then
。在下面的示例中,我使用屏幕A到屏幕B导航,当用户从B导航到A时,我们将刷新视图或执行以下任何其他操作。
从屏幕A -> B
Navigator.push(
context,
MaterialPageRoute(
settings: RouteSettings(
name: B), ///// HERE "B" IS THE CLASS NAME
builder: (context) =>
B(),
),
).then((value) {
//// THIS METHOD IS ENVOKE WHEN SCREEN COME FROM B->A, YOU CAN PERFROM CAN TASK HERE
});
在B屏幕中,我们需要创建如下构造函数
class B extends StatefulWidget {
B () ;
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return _B();
}
}
从B到A 的导航
Navigator.pop(context, 1); //// HERE WE ARE PUSHING THE ANY VALUE "1" FOR THE RETURN IN then OF CLASS "A"
推荐阅读
- javascript - { '$severity': 'error', '$dataCode': 'DataParsingError', '$message': '您发送的数据无法处理。', '$source': 'Proxy' } Sage
- scala - 使用特定于版本的 scala 编译器选项
- database - 数据库/工作流解决方案
- security - 将有效负载发送到阻止请求的服务器
- python - 为什么我在调用我的方法时有两个参数?
- local-storage - 如何从 blazor 的本地存储中获取所有项目?
- elasticsearch - 如何查看弹性搜索中定义的自定义分析器?
- apache-nifi - 从 json 数组 Nifi 中提取特定字段
- java - 使用 JComboBox 取消突出显示 JCalendar 中的日期
- c# - 使用不同的模式通过 Entity Framework Core 将多个数据库连接到 .NET 核心项目