flutter_dio_module
基于Dio封装的网络请求,自带sqlite缓存,可设置缓存也可以不用缓存,使用builder模式网络请求,简单易用,实现了抽象解析json,对返回数据进行二次包装,可以对包装进行处理或者拦截修改.支持切换host,支持拦截器自定义,默认自带网络日志打印.默认支持Stream模式
版本已经发布
欢迎大家关注并提出问题, pub.flutter.io
flutter_dio_module: ^1.2.5
项目目录结构
|-- lib
| |-- com
| | |-- app,data
| | | |-- Constants.dart
| | | '-- wanbean_entity.dart
| | '-- flutter
| | '-- http
| | |-- NetworkManager.dart
| | |-- RxDio.dart
| | |-- RxDioConfig.dart
| | |-- adapter
| | | |-- CallBack.dart
| | | |-- Method.dart
| | | '-- ResponseDates.dart
| | |-- bean
| | | '-- BaseBean.dart
| | |-- cacheUtils
| | | '-- CacheInterceptor.dart
| | | '-- CacheInterceptorInterface.dart
| | | '-- CacheInterfaces.dart
| | | '-- CacheSQLImpl.dart
| | |-- interceptorss
| | | '-- HttpLogInterceptor.dart
| | |-- interface
| | | '-- BaseApplication.dart
| | '-- utils
| | |-- DatabaseSql.dart
| | '-- MD5Utils.dart
lib 项目仓库总包 app,data 数据以及常量配置表 http 为插件源码仓库
联系我
项目地址可以在项目里面咨询提问题,也可以提交优化,
邮箱
xj626361950@163.com
Json解析
解析方式有别于android解析,对序列化和反序列化进行解析.
1.解析JSON and serialization 这种方式处理起来比较麻烦需要手动敲字段获取数据. 2.可以通过三方网站实现bean类的实现documentation.
使用方法
//在项目中初始化实现改接口
abstract class IJsonConvert {
M? fromJsonAsT<M>(dynamic json);
}
class jsonbase extends IJsonConvert {
@override
M? fromJsonAsT<M>(json) {
///这里JsonConvert对象为当前工作空间的
return JsonConvert().fromJsonAsT(json);
}
}
/*先将字符串转成json*/
Map<String, dynamic> json = jsonDecode(jsonData);
/*将Json转成实体类*/
NewsBean newsBean=NewsBean.fromJson(news);
/*取值*/
String sats = newsBean.result.stat;
3.比较方便一点AS导入插件FlutterJsonBeanFactory通过插件直接去生成对应bean不需要手动更改推荐此方案.
使用方法 插件导入之后,json数据放入插件点击保存就可以了.blog.csdn.net/yuzhiqiang_1993/article/details/88533166
网络请求使用方法
RxDio初始化
创建一个future来初始化项目中所需要的东西,
GlobalConfig
中可以设置请求的host,是否打印日志,是否使用缓存,设置拦截器
class Global {
static Future init() async {
return GlobalConfig.intstance
..setDebugConfig(true)
..setHost("https://wanandroid.com/")
..setUserCacheConfig(true)
..setJsonConvert(jsonConvert);//次参数为必选项,用于解析使用,JsonConvert()需要继承IJsonConvert
}
}
void main() => Global.init().then((e) => runApp(MyApp()));
设置JsonConvert()类
找到目录'package:workspac/generated/json/base/json_convert.content.dart'
继承IJsonConvert
如果找不到json_convert.content.dart
使用FlutterJsonBeanFactory插件导入一下即可
class JsonConvert extends IJsonConvert {
T? convert<T>(dynamic value) {
if (value == null) {
return null;
}
return asT<T>(value);
}
RxDio模式解析
Stream<ResponseDatas<WanbeanEntity>> test() {
var aaa = RxDio.instance;
aaa.setUrl(Constants.config);
aaa.setHost("www.baidu.com");//设置域名
aaa.setCacheMode(CacheMode.DEFAULT);
aaa.setRequestMethod(Method.Get);
aaa.setTransFrom<WanbeanEntity>((p0) {
var a = p0 as WanbeanEntity;
print("=======setTransFrom>" + a.datas.first.content);
return p0;
});
return aaa.asStreams<WanbeanEntity>();
}
///设置刷新
setState(() {
test();
});
///页面结束的时候取消请求
@override
void dispose() {
RxDio.instance.cancelAll();
super.dispose();
}
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:$_counter',
),
StreamBuilder<ResponseDatas<WanbeanEntity>>(
builder: ((context, snapshot) {
return Text(
'${snapshot.data?.data?.size}',
style: Theme.of(context).textTheme.headline4,
);
}),
stream:test(),
),
],
)
更新日志
摘录(感谢大佬)
For help getting started with Flutter, view our online documentation.
For instructions integrating Flutter modules to your existing applications, see the add-to-app documentation.
网络库dio二次封装以及简单使用 blog.csdn.net/jay100500/article/details/88386470 www.imooc.com/article/315143 www.jianshu.com/p/6398f9971a36 www.jianshu.com/p/dd0b0f3b6065
Libraries
- base_convert.g
- BaseBean
- CacheInterceptor
- CacheInterceptorInterface
- CacheInterfaces
- CacheSQLImpl
- CallBack
- cli
- Constants
- DatabaseSql
- HttpLogInterceptor
- i_json_convert
- json_convert_content
- json_field
- lib_dio
- main
- MD5Utils
- Method
- NetworkManager
- ResponseDates
- RxDio
- RxDioConfig
- RxDioConstants
- wanbean_entity
- wanbean_entity.g