在重建之间保留 StatefulWidget 状态

Preserve StatefulWidget state between rebuilds

应用程序路径的根小部件

@override
  Widget build(BuildContext context) {
    return SafeArea(
      child: MyStatefulWidget(),
    );
  }

在内部有状态小部件中,我有带焦点管理的文本字段。 FocusNode 在 dispose() 回调中处理。最后 - 如果打开键盘 - 所有屏幕都会重建,我的有状态小部件也会完全重建状态。 Dispose 调用和键盘消失,因为焦点节点被释放。

我的结论 - 所有控制器都必须从路由的根小部件提供,因为只有根小部件一直存在而无需重新创建。这是非常奇怪和不方便的——我不能拥有自我管理的小部件并且必须从外部提供所有控件?如果是这样,那么动画、文本字段和其他小部件是如何工作的?这意味着每次重建都会导致状态重建,所有动画等都将在重建时停止?..或者有办法在小部件重建之间保存状态?在娱乐之间保存状态和恢复(如 android parcelable)?

请尝试使用 AutomaticKeepAliveClientMixin mixin,这个 mixin 从旧的小部件重建。

详情访问:https://medium.com/@diegoveloper/flutter-persistent-tab-bars-a26220d322bc

我发现了我的问题:Scaffold 具有在 StatefulWidget 而不是 State 中创建的 GlobalKey。并且在每次重建时都会重新创建所有具有状态的树:)