Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 更新颤振中的对象不起作用_Flutter_Dart_Flutter State - Fatal编程技术网

Flutter 更新颤振中的对象不起作用

Flutter 更新颤振中的对象不起作用,flutter,dart,flutter-state,Flutter,Dart,Flutter State,我尝试从一个子小部件更新颤振中的一个对象。我要更新的对象已作为param传递给子对象。问题是:对象不想更改。我在一个有状态的小部件上工作,并使用setState更新状态,但没有任何变化。也许你能在我的代码中找到一个错误 我的对象 final guestbook = Guestbook({ title: "Test" // ... some other parameters }) void _editGuestbook(Guestbook guestbook,

我尝试从一个子小部件更新颤振中的一个对象。我要更新的对象已作为param传递给子对象。问题是:对象不想更改。我在一个有状态的小部件上工作,并使用
setState
更新状态,但没有任何变化。也许你能在我的代码中找到一个错误

我的对象

final guestbook = Guestbook({
    title: "Test"
    // ... some other parameters
})
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({
    title: "Test"
    // ... some other parameters
})
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;
});

Bot视图中没有任何更改。我总是看到旧的状态。如果我拉刷新直接从数据库加载新条目,它会更新。有没有办法简单地更新本地对象,这样我就不需要额外的服务器请求?

无法更改最终字段。作为方法参数,您发送的是对象的副本,而不是真实对象。因此,它不会对类变量产生任何影响。您可以做的是,将回调函数从父窗口传递给子窗口小部件,在父窗口小部件中设置留言簿,然后在父窗口小部件中的留言簿发生更改时再次构建子窗口小部件。