Flutter网络请求清理与简化插件clean_framework_http的使用

Flutter网络请求清理与简化插件clean_framework_http的使用

Clean Framework

Clean Framework Dio

Coverage

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

1 回复

更多关于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 来安装依赖。

使用步骤

  1. 创建请求类

    首先,创建一个继承自 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;
    }
    
  2. 创建响应类

    接下来,创建一个继承自 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,
      };
    }
    
  3. 创建 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);
      }
    }
    
  4. 使用 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}');
    }
回到顶部