Flutter Module

428 阅读3分钟

Flutter Module

整体架构(MVVM)

1642560520(1).png

网络层(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推出,但ProviderGoogle极力推荐的状态管理方式之一,它是对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进行封装,避免后期因为加载框架的变更,导致大量代码修改