首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flutter版本玩Android客户端(7)——状态管理

Flutter版本玩Android客户端(7)——状态管理

作者头像
用户1108631
发布2019-09-17 14:08:59
7750
发布2019-09-17 14:08:59
举报

在上一篇文章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

插件

  • provider

参考

  • Flutter | 状态管理指南篇——Provider
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 每天学点Android知识 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 状态管理
    • 提供初始化状态
      • 获取登录状态
        • 更新登录状态
        • 插件
        • 参考
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档