我一直在开发一个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])
}
}
)
}
}
如何强制窗口小部件重新加载?
答案 0 :(得分:1)
您可以使用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"