在Flutter中更新对象无法正常工作

问题描述

我尝试从子窗口小部件更新Flutter中的对象。我要更新的对象已作为参数传递给孩子。问题:对象不想更改。我使用有状态窗口小部件并使用setState更新状态,但是没有任何变化。也许您可以在我的代码中找到错误

我的对象

final guestbook = Guestbook({
    title: "Test"
    // ... some other parameters
})

我将Guestbook对象传递给子窗口小部件的功能

void _editGuestbook(Guestbook guestbook,BuildContext context) {
  CupertinoScaffold.showCupertinoModalBottomSheet(
      context: context,builder: (BuildContext context,ScrollController scrollController) {
        return EditGuestbook(
          guestbook: guestbook,// Here I pass the object to the child
          scrollController: scrollController,);
      }).then((value) {
      setState(() {
        guestbook = value;
      });
  });
}

在下一个窗口小部件上,我更新了数据库中的某些值,并且还想更改我的本地对象,以便用户可以看到更新成功。因此,我将带有更新值的对象作为参数传递回父视图。

final Guestbook guestbook;
......
........

// Update database
final gb = widget.guestbook;
setState(() {
  updatedGuestbook = Guestbook(
      title: "New title",// ... some other parameters
});
await GuestbooksDatabase()
    .updateGuestbook(guestbook: updatedGuestbook,key: gb.id)
    .then((_) {
  Get.back(result: updatedGuestbook); // Here I send data back to parent
});

正如您在检索新对象之后看到的那样,我使用setState更新状态:

setState(() {
  guestbook = value;
});

视图中没有任何变化。我总是看到旧状态。如果我选择刷新以直接从数据库中加载新条目,它将进行更新。有没有一种方法可以简单地更新本地对象,以便我不需要其他服务器请求?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)