Flutter网络请求插件flutter_dio_module的使用
Flutter网络请求插件flutter_dio_module的使用
基于Dio封装的网络请求,自带sqlite缓存,可设置缓存也可以不用缓存,使用builder模式网络请求,简单易用,实现了抽象解析json,对返回数据进行二次包装,可以对包装进行处理或者拦截修改。支持切换host,支持拦截器自定义,默认自带网络日志打印。默认支持Stream模式。
版本已经发布
欢迎大家关注并提出问题,
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解析,对序列化和反序列化进行解析.
- 解析JSON and serialization 这种方式处理起来比较麻烦需要手动敲字段获取数据.
- 可以通过三方网站实现bean类的实现 documentation。
使用方法
//在项目中初始化实现改接口
abstract class IJsonConvert {
M? fromJsonAsT<M>(dynamic json);
}
class jsonbase extends IJsonConvert {
[@override](/user/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;
- 比较方便一点AS导入插件FlutterJsonBeanFactory通过插件直接去生成对应bean不需要手动更改推荐此方案。
使用方法 插件导入之后,json数据放入插件点击保存就可以了. 详细说明
网络请求使用方法
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](/user/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(),
),
],
)
更多关于Flutter网络请求插件flutter_dio_module的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络请求插件flutter_dio_module的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_dio_module
是一个基于 Dio
的网络请求插件,适用于 Flutter 应用。Dio
是 Dart 语言中一个强大的 HTTP 客户端,支持拦截器、全局配置、表单数据、文件上传等功能。
以下是如何在 Flutter 项目中使用 flutter_dio_module
进行网络请求的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 flutter_dio_module
依赖:
dependencies:
flutter:
sdk: flutter
flutter_dio_module: ^latest_version
然后运行 flutter pub get
以安装依赖。
2. 初始化 Dio 实例
在你的代码中,首先需要初始化一个 Dio
实例。你可以选择在全局范围内初始化,或者在具体的类中初始化。
import 'package:flutter_dio_module/flutter_dio_module.dart';
final dio = Dio();
你可以为 Dio
实例配置一些全局选项,比如 baseUrl、超时时间等。
dio.options.baseUrl = 'https://jsonplaceholder.typicode.com';
dio.options.connectTimeout = 5000; // 5 seconds
dio.options.receiveTimeout = 3000; // 3 seconds
3. 发起网络请求
使用 Dio
实例发起网络请求。常见的请求类型包括 GET
、POST
、PUT
、DELETE
等。
GET 请求
Future<void> fetchData() async {
try {
Response response = await dio.get('/posts/1');
print(response.data);
} catch (e) {
print(e);
}
}
POST 请求
Future<void> postData() async {
try {
Response response = await dio.post('/posts', data: {
'title': 'foo',
'body': 'bar',
'userId': 1,
});
print(response.data);
} catch (e) {
print(e);
}
}
4. 使用拦截器
Dio
提供了拦截器功能,你可以在请求发送前或响应接收前进行一些处理。
dio.interceptors.add(InterceptorsWrapper(
onRequest: (RequestOptions options, RequestInterceptorHandler handler) {
// 在请求发送前做一些处理
print('Request: ${options.uri}');
return handler.next(options);
},
onResponse: (Response response, ResponseInterceptorHandler handler) {
// 在响应接收前做一些处理
print('Response: ${response.data}');
return handler.next(response);
},
onError: (DioError e, ErrorInterceptorHandler handler) {
// 在请求出错时做一些处理
print('Error: ${e.message}');
return handler.next(e);
},
));
5. 文件上传
Dio
也支持文件上传。
Future<void> uploadFile() async {
FormData formData = FormData.fromMap({
'file': await MultipartFile.fromFile('path/to/file.txt', filename: 'upload.txt'),
});
try {
Response response = await dio.post('/upload', data: formData);
print(response.data);
} catch (e) {
print(e);
}
}