Flutter版本玩Android客户端——状态管理
Posted xingfeng_coder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter版本玩Android客户端——状态管理相关的知识,希望对你有一定的参考价值。
在上一篇文章Flutter版本玩Android客户端(6)——登录注册模块以及文章收藏与取消中完成了登录模块,但遗留的问题是未进行状态同步,导致left drawer的状态没有变化。本文继续完善该部分,效果如下:
状态管理
对于登录状态这个值,很多widget需要用到,属于全局状态,这里使用provider进行管理。
关于状态管理的更多知识,可以参考后面的文章。
提供初始化状态
在main入口处,根据sharedpreference中的状态进行初始化,Provider包括MyApp类。
void main()
final _loginState = LoginState();
KvStores.get(KeyConst.LOGIN).then((isLogin)
if (isLogin != null && isLogin)
KvStores.get(KeyConst.USER_NAME).then((name)
_loginState.login(name);
);
else
_loginState.logout();
runApp(Provider<LoginState>.value(
child: ChangeNotifierProvider.value(
value: _loginState,
child: MyApp(),
),
));
);
获取登录状态
LeftDrawer中需要根据登录状态进行ui的切换以及跳转逻辑的控制,获取登录状态如下:
final _loginState = Provider.of<LoginState>(context);
根据是否登录来控制用户名的显示,
Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
FlutterLogo(
size: 48,
),
Padding(padding: EdgeInsets.all(8)),
Text(
_loginState.isLogin()
? _loginState.getUserName()
: '未登录',
style: TextStyle(color: Colors.white, fontSize: 12),
)
],
),
),
更新登录状态
通过
final _loginState = Provider.of<LoginState>(context);
拿到LoginState后,像设置普通对象一样,那么需要使用该对象的地方将会自动同步。是不是很神奇?
关于代码,参考Github
插件
参考
关注我的技术公众号,不定期会有技术文章推送,不敢说优质,但至少是我自己的学习心得。微信扫一扫下方二维码即可关注:
以上是关于Flutter版本玩Android客户端——状态管理的主要内容,如果未能解决你的问题,请参考以下文章
Flutter版本玩Android客户端——知识体系tab点击跳转
Flutter版本玩Android客户端——微信公众号tab点击跳转