Flutter网络请求插件minimal_http_client的使用
Flutter网络请求插件minimal_http_client的使用
A Dart package based on Dio that provides minimal http client to handle HTTP services requests. A minimal http client library for network call
使用
要使用此包:
- 将依赖项添加到您的
pubspec.yaml
文件。
dependencies:
flutter:
sdk: flutter
minimal_http_client: ^0.0.3
如何使用 minimal_http_client
1. 在应用程序启动时初始化 DioHttpService
或者您可以将其添加到依赖注入中。
final authInterceptor = AuthInterceptor(
headerCallback: () => {
'auth_token': 'Bearer your_jwt_token',
'seassion_key': 'my_seassion_key',
},
);
await DioHttpService().init(authInterceptor: authInterceptor);
2. 在 repository
中使用
class YourRepositoryName {
YourRepositoryName({required this.httpService});
/// HttpService 是用于发起 HTTP 请求的依赖注入
final HttpService httpService;
/// 获取新闻列表的功能
Future<YourModelClass> fetchData() async {
try {
/// 新闻列表的 URL
final path = '${yourBaseURL}get/news/1';
/// 发送带有授权头的 GET 请求到指定的 URL
final _response = await httpService.handleGetRequest(path);
/// 如果响应状态码在 200 到 300 之间,则将响应数据解析为 YourModelClass 并返回它
if (_response.statusCode! >= 200 && _response.statusCode! <= 300) {
final _result = YourModelClass.fromJson(_response.data);
return _result;
}
}
/// 捕获 DioError 并抛出带有错误消息的自定义错误
on DioError catch (e) {
final _message = e.response?.data?['message'] ?? '';
throw _message;
}
/// 捕获所有其他异常并抛出自定义错误
catch (e) {
throw '$e';
}
}
}
创建与维护
完整示例代码
import 'package:flutter/material.dart';
import 'package:minimal_http_client/http_service.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// 这个小部件是你的应用的根
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'HTTP Minimal client',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
),
home: HomeScreen(httpService: DioHttpService()),
);
}
}
class HomeScreen extends StatefulWidget {
final HttpService httpService;
const HomeScreen({super.key, required this.httpService});
[@override](/user/override)
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
[@override](/user/override)
void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) async {
final authInterceptor = AuthInterceptor(
headerCallback: () => {
'auth_token': 'Bearer ${DateTime.now().minute}: ${DateTime.now().second}',
'seassion_key': 'my_seassion_key',
},
);
await DioHttpService().init(authInterceptor: authInterceptor);
});
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("HTTP Minimal client"),
),
body: Center(
child: TextButton(
onPressed: () async {
final result = await widget.httpService
.handleGetRequest('https://api.publicapis.org/entries');
debugPrint("Result: $result");
},
child: const Text("Get Info"),
),
),
);
}
}
更多关于Flutter网络请求插件minimal_http_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络请求插件minimal_http_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用Flutter网络请求插件minimal_http_client
的示例代码。这个插件提供了一个简洁的接口来进行HTTP请求。
首先,确保你已经在pubspec.yaml
文件中添加了minimal_http_client
依赖:
dependencies:
flutter:
sdk: flutter
minimal_http_client: ^0.2.0 # 请检查最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,你可以按如下方式使用minimal_http_client
来进行HTTP请求。以下是一个完整的示例,包括GET和POST请求的使用。
import 'package:flutter/material.dart';
import 'package:minimal_http_client/minimal_http_client.dart';
import 'dart:convert';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Minimal HttpClient Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String? responseData;
void fetchData() async {
final client = MinimalHttpClient();
// GET 请求示例
try {
final response = await client.get(
Uri.parse('https://jsonplaceholder.typicode.com/posts/1'),
);
if (response.statusCode == 200) {
setState(() {
responseData = response.bodyAsString;
});
} else {
setState(() {
responseData = 'Error: ${response.statusCode}';
});
}
} catch (e) {
setState(() {
responseData = 'Exception: $e';
});
}
}
void postData() async {
final client = MinimalHttpClient();
// POST 请求示例
final jsonBody = jsonEncode({
'title': 'foo',
'body': 'bar',
'userId': 1,
});
try {
final response = await client.post(
Uri.parse('https://jsonplaceholder.typicode.com/posts'),
headers: {
'Content-Type': 'application/json',
},
body: jsonBody,
);
if (response.statusCode == 201) {
setState(() {
responseData = response.bodyAsString;
});
} else {
setState(() {
responseData = 'Error: ${response.statusCode}';
});
}
} catch (e) {
setState(() {
responseData = 'Exception: $e';
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Minimal HttpClient Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: fetchData,
child: Text('Fetch Data (GET)'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: postData,
child: Text('Post Data (POST)'),
),
SizedBox(height: 20),
Text(responseData ?? 'No data'),
],
),
),
);
}
}
在这个示例中,我们创建了一个Flutter应用,其中包括两个按钮,一个用于执行GET请求,另一个用于执行POST请求。GET请求从https://jsonplaceholder.typicode.com/posts/1
获取数据,POST请求向https://jsonplaceholder.typicode.com/posts
发送JSON数据。
注意:
MinimalHttpClient
的get
和post
方法返回一个Future<Response>
,因此我们需要使用await
关键字来等待响应。- 响应的状态码可以通过
response.statusCode
获取。 - 响应的主体可以通过
response.bodyAsString
获取为字符串。
希望这个示例能帮助你理解如何使用minimal_http_client
进行网络请求。如果你有任何进一步的问题,请随时提问!