flutter - 在 Mobx.dart 存储中发生更改后,小部件不会重建
问题描述
我想得到一些帮助。我不明白为什么有些东西没有正确重建。我有一个 app.dart 提供所有商店,而 Scafold 的主体是一个主页,
class HomePage extends StatelessWidget {
const HomePage({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Consumer<AuthStore>(
builder: (__, AuthStore authStore, _) {
debugPrint('--- $authStore');
return SafeArea(
child: authStore.authenticated
? const AuthenticatedScreen()
: const LoginScreen(),
);
},
);
}
}
登录屏幕完成了它的工作,并正确更新了商店,我不明白为什么当验证更改为 true 时主屏幕没有更新我尝试添加一个具有相同结果的观察者,例如没有重建
class HomePageStateless extends StatelessWidget {
const HomePageStateless({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Consumer<AuthStore>(builder: (__, AuthStore authStore, _) {
debugPrint('--- $authStore');
return Observer(
builder: (_) => SafeArea(
child: authStore.authenticated
? const AuthenticatedScreen()
: const LoginScreen(),
),
);
});
}
}
当这个小部件按预期工作时我在这里缺少什么
class HomePage extends StatefulWidget {
const HomePage({
Key key,
}) : super(key: key);
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
AuthStore _authStore;
final List<ReactionDisposer> _disposers = <ReactionDisposer>[];
bool _authenticated = false;
@override
void didChangeDependencies() {
super.didChangeDependencies();
for (ReactionDisposer disposer in _disposers) {
disposer();
}
_disposers.clear();
_authStore ??= Provider.of<AuthStore>(context);
_disposers.add(
autorun(
(_) {
print('home store $_authStore');
if (_authenticated != _authStore.authenticated) {
setState(() {
_authenticated = _authStore.authenticated;
});
}
},
),
);
}
@override
void dispose() {
for (ReactionDisposer disposer in _disposers) {
disposer();
}
super.dispose();
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: _authenticated ? const AuthenticatedScreen() : const LoginScreen(),
);
}
}
而且我知道这不应该是正确的方法,但是当商店发生变化时自动运行会持续触发
解决方案
在状态和有状态小部件下方的 void 方法中使用您想要重建的内容,而不是无状态小部件。