Flutter简单实践 MVVM开发架构

2019-04-0317:10:29APP与小程序开发Comments3,801 views字数 2019阅读模式

Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS 和 Android平台。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/11136.html

Flutter官网:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/11136.html

还记得18年参加上海Google开发者大会的时候,听了一天的Flutter的介绍,之后不久发布了,到现在版本,Flutter一直都在快速的进步着。年后我也终于开始了Flutter的深入学习,并很快有机会直接在项目中进行实践。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/11136.html

如果你也是刚开始学习Flutter,推荐以下资源:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/11136.html

MVVM-Flutter

项目架构当然是MVVM,依旧遵循App开发架构指南。对比以前写的MVVM-Android,发现有许多的共通之处,将依赖替换成Flutter版本之后就是熟悉的节奏。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/11136.html

项目地址:https://github.com/ditclear/mvvm_flutter文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/11136.html

Flutter简单实践 MVVM开发架构文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/11136.html

dependencies

思想:M-V-VM各层直接通过rx衔接,配合响应式的思想和rxdart的操作符进行逻辑处理,最后通过provide来更新视图。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/11136.html

Code


//remote
class GithubService{
  Observable<dynamic> login()=> get("user");
}
//repo
class GithubRepo {
  final GithubService _remote;
​
  GithubRepo();
​
  Observable login(String username, String password) {
    token = "basic " + base64Encode(('$username:$password'));
    return _remote.login();
  }
}
//viewmodel
class HomeViewModel extends ChangeNotifier {
  final GithubRepo _repo; //数据仓库
  String username = ""; //账号
  String password = ""; //密码
  bool _loading = false; // 加载中
  String _response = ""; //响应数据
  //...
  HomeViewModel();
​
  /**
   * 调用model层的方法进行登录
   * doOnData : 请求成功时,处理响应数据
   * doOnError : 请求失败时,处理错误
   * doOnListen : 开始时loading为true,通知ui更新
   * doOnDone : 结束时loading为false,通知ui更新
   */
  Observable login() => _repo
      .login(username, password)
      .doOnData((r) => response = ())
      .doOnError((e, stacktrace) {
        if (e is DioError) {
          response = ();
        }
      })
      .doOnListen(() => loading = true)
      .doOnDone(() => loading = false);
}
​
//view
class HomeWidget extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _HomeState(provideHomeViewModel());
  }
}
class _HomeState extends State<HomeWidget>{
   //...
  _HomeState() {
    (_viewModel);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appbar://...,
        body://...
       
        CupertinoButton(
            onPressed: _login,
            //...
         ),
         Container(
                //...
                child: Provide<HomeViewModel>(
                  builder: (BuildContext context, Widget child,
                          HomeViewModel value) =>
                      Text(),
                ),
              ),
        //...
        
        );
  }
  
    
  _login()=>().doOnListen(() {
      ();
    }).doOnDone(() {
      ();
    }).listen((_) {
      //success
      ("login success",context,type: );
    }, onError: (e) {
      //error
      dispatchFailure(context, e);
    });

}

最后效果:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/11136.html

Flutter简单实践 MVVM开发架构文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/11136.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/xcx/11136.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定