Flutter网络请求清理与简化插件clean_framework_http的使用
Flutter网络请求清理与简化插件clean_framework_http的使用
Clean Framework Dio
Flutter实现的Clean架构,灵感来源于Uncle Bob的指导。
前往文档了解更多。
使用示例
以下是一个完整的示例,展示了如何使用clean_framework_http
插件进行网络请求。
示例代码
import 'package:clean_framework_http_example/app/clean_framework_http_example_app.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
// 获取SharedPreferences实例
final prefs = await SharedPreferences.getInstance();
// 设置基础URL
await prefs.setString('BASE_URL', 'https://pokeapi.co/api/v2');
// 运行应用
runApp(const CleanFrameworkHttpExampleApp());
}
完整示例代码
import 'package:flutter/material.dart';
import 'package:clean_framework/clean_framework.dart';
import 'package:clean_framework_http/clean_framework_http.dart';
import 'package:shared_preferences/shared_preferences.dart';
// 定义一个服务类,用于处理HTTP请求
class PokeApiService extends Service {
final _dio = DioClient();
Future<Map<String, dynamic>> getPokemonList(int limit) async {
// 构建请求URL
final url = 'pokemon?limit=$limit';
// 发起GET请求
final response = await _dio.get(url);
// 返回解析后的数据
return response.data;
}
}
// 定义一个提供者类,用于管理服务
class PokeApiProvider extends Provider {
final _service = PokeApiService();
Future<Map<String, dynamic>> fetchPokemonList(int limit) async {
return _service.getPokemonList(limit);
}
}
// 定义一个页面类,用于展示数据
class PokemonPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Pokémon List')),
body: FutureBuilder<Map<String, dynamic>>(
future: Provider.of<PokeApiProvider>(context).fetchPokemonList(10),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}'));
} else {
final pokemonList = snapshot.data!['results'];
return ListView.builder(
itemCount: pokemonList.length,
itemBuilder: (context, index) {
final pokemon = pokemonList[index];
return ListTile(
title: Text(pokemon['name']),
);
},
);
}
},
),
);
}
}
// 主函数
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化SharedPreferences
final prefs = await SharedPreferences.getInstance();
// 设置基础URL
await prefs.setString('BASE_URL', 'https://pokeapi.co/api/v2');
// 运行应用
runApp(MaterialApp(
home: PokemonPage(),
));
}
更多关于Flutter网络请求清理与简化插件clean_framework_http的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络请求清理与简化插件clean_framework_http的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
clean_framework_http
是一个用于 Flutter 应用中进行网络请求的插件,旨在简化和清理网络请求的代码。它基于 Dart 的 http
包,但提供了更高级的抽象和更简洁的 API,使得处理网络请求更加方便和可维护。
安装
首先,你需要在 pubspec.yaml
文件中添加依赖:
dependencies:
clean_framework_http: ^1.0.0
然后运行 flutter pub get
来安装依赖。
使用步骤
-
创建请求类
首先,创建一个继承自
Request
的类来定义你的网络请求。你可以在这里指定请求的 URL、方法、头、参数等。import 'package:clean_framework_http/clean_framework_http.dart'; class GetUserRequest extends Request { final int userId; GetUserRequest(this.userId); @override String get path => '/users/$userId'; @override HttpMethod get method => HttpMethod.get; }
-
创建响应类
接下来,创建一个继承自
Response
的类来处理响应数据。import 'package:clean_framework_http/clean_framework_http.dart'; class UserResponse extends Response { final int id; final String name; UserResponse.fromJson(Map<String, dynamic> json) : id = json['id'], name = json['name']; Map<String, dynamic> toJson() => { 'id': id, 'name': name, }; }
-
创建 API 客户端
创建一个继承自
ApiClient
的类来处理具体的网络请求。你可以在这里定义如何将请求和响应进行映射。import 'package:clean_framework_http/clean_framework_http.dart'; class UserApiClient extends ApiClient { UserApiClient({required String baseUrl}) : super(baseUrl: baseUrl); Future<UserResponse> getUser(int userId) async { final request = GetUserRequest(userId); final response = await execute(request); return UserResponse.fromJson(response.body); } }
-
使用 API 客户端
在你的应用中使用
UserApiClient
来进行网络请求。void fetchUser() async { final apiClient = UserApiClient(baseUrl: 'https://jsonplaceholder.typicode.com'); final user = await apiClient.getUser(1); print('User ID: ${user.id}'); print('User Name: ${user.name}'); }