首页 > 解决方案 > 从子项弹出时,根小部件未重建

问题描述

我一直在开发一个颤振应用程序,用户从一个有状态的小部件开始,其中包含 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])
          }
        }
      )
    }
  } 

如何强制小部件重新加载?

标签: flutterstatemobile-developmentsqflite

解决方案


您可以使用可以重新加载页面或执行任何其他操作的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();
  }
}

从BA 的导航

Navigator.pop(context, 1); //// HERE WE ARE PUSHING THE ANY VALUE "1" FOR THE RETURN IN then OF CLASS "A"

推荐阅读