Flutter网络与通信如何实现
在Flutter中实现网络通信有哪些常用的方法?我想知道如何通过HTTP请求获取数据、处理JSON响应,以及最佳实践是什么?比如用http包还是Dio库更好?另外WebSocket在Flutter中该怎么使用?还有网络状态监听和错误处理有什么需要注意的地方?求有经验的开发者分享具体代码示例和性能优化建议。
2 回复
Flutter中网络通信主要通过http或dio库实现。使用http发送GET/POST请求,处理JSON数据。dio功能更强大,支持拦截器、文件上传等。异步操作使用async/await或Future处理响应。
更多关于Flutter网络与通信如何实现的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
Flutter 网络通信主要通过 http 或 dio 库实现。以下是核心实现方法:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
http: ^1.1.0 # 或 dio: ^5.0.0
2. 基础HTTP请求(使用 http 包)
import 'package:http/http.dart' as http;
// GET 请求
Future<void> fetchData() async {
final response = await http.get(Uri.parse('https://api.example.com/data'));
if (response.statusCode == 200) {
print('返回数据: ${response.body}');
} else {
throw Exception('请求失败');
}
}
// POST 请求
Future<void> postData() async {
final response = await http.post(
Uri.parse('https://api.example.com/post'),
body: {'key': 'value'},
);
print('状态码: ${response.statusCode}');
}
3. 高级功能(推荐使用 dio)
Dio 支持拦截器、超时设置等:
import 'package:dio/dio.dart';
final dio = Dio(BaseOptions(
baseUrl: 'https://api.example.com',
connectTimeout: Duration(seconds: 5),
));
// 带错误处理的请求
Future<void> fetchUser() async {
try {
final response = await dio.get('/user/1');
print('用户数据: ${response.data}');
} on DioException catch (e) {
print('错误: ${e.message}');
}
}
// 添加拦截器
dio.interceptors.add(InterceptorsWrapper(
onRequest: (options, handler) {
options.headers['Authorization'] = 'Bearer token';
return handler.next(options);
},
));
4. 响应数据处理
解析 JSON 数据:
// 定义数据模型
class User {
final int id;
final String name;
User({required this.id, required this.name});
factory User.fromJson(Map<String, dynamic> json) {
return User(
id: json['id'],
name: json['name'],
);
}
}
// 使用
User user = User.fromJson(response.data);
5. 状态管理建议
- 使用
FutureBuilder或StreamBuilder处理异步状态 - 复杂应用可搭配 Provider/Bloc 等状态管理库
关键注意事项:
- 在
android/app/src/main/AndroidManifest.xml中添加网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
- 处理 HTTPS 证书验证(如需自签名证书需额外配置)
- 主线程禁止同步网络请求
推荐优先使用 Dio,它提供了更完善的错误处理、文件上传/下载和请求取消等功能。

