Flutter Module
整体架构(MVVM)
网络层(Retrofit + Dio)
Retrofit
对网络接口进行统一封装,提供了GET、POST、PUT、DELETE等请求方法,并支持Header、Field、Body、Path、Query等接口请求参数配置
Dio
flutter进行http请求的框架, dio是一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时、自定义适配器等。
详细请求参数及流程 www.liujunmin.com/flutter/dio…
拦截器:添加统一请求头、请求及响应处理、token失效处理、网络日志打印等等
数据系列化与反系列化
json_annotation
提供model进行系列化过程中一些基本注解配置
json_serializable
主要是对数据进行json反系列化为对用的实体Model,或者将对应的Model系列化为对应的Json
为什么需要生成代码?
比如其他的一些序列化/反序列化的库,比如Gson、Jackson等,我们不需要生成代码,直接可以进行解析,而在Flutter中,我们却需要用生成代码的方式,为什么呢?
因为Flutter禁用了Dart中的反射机制。上面的库中由于使用了反射机制,所以在运行时可以动态地解析Json字段并赋值。
为什么Flutter要禁用反射机制呢?因为在构建阶段Flutter可以知道哪些代码被使用了,哪些代码没有被使用,在构建时可以删除掉没用使用的代码,从而减小安装包的体积。如果使用了反射,则很难去发现那些未被使用的代码
Provider
实现数据与UI绑定,提供数据变更实时通知到对应得绑定UI进行刷新;Provider是一个由社区构建的状态管理包,而不是Google推出,但Provider是Google极力推荐的状态管理方式之一,它是对InheritedWidget组件进行了封装,使其更易用,更易复用。
Provider优势
我们为什么要用Provider而不是直接使用InheritedWidget,我们看下官方介绍
- 简化的资源分配与处置
- 懒加载
- 创建新类时减少大量的模板代码
- 支持 DevTools
- 更通用的调用 InheritedWidget 的方式(参考 Provider.of/Consumer/Selector)
- 提升类的可扩展性,整体的监听架构时间复杂度以指数级增长(如 ChangeNotifier, 其复杂度为 O(N))
Provider的八种提供者
Provider、ChangeNotifierProvider、FutureProvider、StreamProvider、MultiProvider、ProxyProvider、ChangeNotifierProxyProvider、ListenableProxyProvider
Flutter Provider状态管理---八种提供者使用分析 | Jimi (liujunmin.com)
Provider的四种消费者
Provider.of、Consumer、Selector、InheritedContext
Flutter Provider状态管理---四种消费者使用分析 | Jimi (liujunmin.com)
Provider在项目中使用
主要使用ChangeNotifierProvider和Selector,来进行状态管理及UI刷新
依赖注入
降低耦合性
injectable
根据注解,自动生成类对象实例
get_it
动态服务定位器,通过注册类型,找到对应的类实例
网络图片加载及缓存
cached_network_image
具体通过ImageLoader进行封装,避免后期因为加载框架的变更,导致大量代码修改