【发布时间】:2020-12-18 20:16:55
【问题描述】:
简而言之,问题是:如何重用整个小部件子树的状态?
这是我的代码目前的样子:
...
BlocBuilder<AuthBloc, AuthState>(
builder: (context, state) {
if (state is Authenticating) {
return AppLoading();
} else if (state is NotAuthenticated) {
return AppOnboarding();
} else if (state is Authenticated) {
return AppMain();
} else {
return null;
}
}
),
...
这里没什么特别的,只是一个 BlocBuilder 在底层 Bloc 的状态发生变化时重建它的子节点。
现在,以以下状态转换为例:NotAuthenticated => Authenticating => NotAuthenticated,因为输入的信息有问题。这将导致 AppOnboarding() 小部件从头开始完全重建,所有信息都丢失了。如何重用旧 AppOnboarding() 小部件的状态,使其看起来像从未重建过的小部件?
我已经尝试过的
我已经尝试过为此使用GlobalKey,我会将其传递给我的 AppOnboarding 小部件的 key 属性。这是我的代码:
_AuthenticatingState extends State<Authenticating> {
GlobalKey<AppOnboardingState> _appOnboardingKey;
@override
initState() {
super.initState();
_appOnboardingKey = GlobalKey();
}
@override
Widget build(BuildContext context) {
return BlocBuilder<...>(
builder: (context, state) {
...
if (state is NotAuthenticated) {
return AppOnboarding(key: _appOnboardingKey);
}
...
}
),
}
}
我有点惊讶这不起作用。全局键不维护条目小部件子树的状态吗?
【问题讨论】:
标签: flutter state bloc state-management statefulwidget