Flutter中Provider状态在页面跳转后为什么会重置?
我在用Provider管理登录状态时遇到问题,登录成功后把用户信息存到ChangeNotifier里,但跳转到新页面后数据又变空了。
之前在Vue用类似写法没问题,比如这个组件:
<template>
<div>
<button @click="login">登录</button>
<p>用户名:{{ user.name }}</p>
</div>
</template>
<script>
export default {
data() {
return {
user: {}
};
},
methods: {
login() {
this.user = { name: 'test' };
}
}
};
</script>
现在Flutter用Provider实现时,把用户数据存在MyModel里,登录成功后调用了notifyListeners(),但跳转到第二个页面后user就变null了。是不是Provider的context没传对?或者页面重建导致状态丢失?
在你的main.dart里,用
ChangeNotifierProvider包裹整个应用,像这样:然后在登录成功后,直接修改
MyModel里的数据,别再页面里单独创建新的Provider实例。Flutter的context传错了确实会导致这个问题,但通常是你Provider的位置放错了。比如这样写:
另外别忘了在新页面用
Provider.of(context) 获取状态,别乱用context,不然又会创建新的实例。