Flutter网络清理与优化插件clean_network的使用

发布于 1周前 作者 gougou168 来自 Flutter

Clean Network

CleanNetwork 是一个封装了 diogql 的工具,用于简化网络请求的处理。

开始使用

1. 添加依赖

pubspec.yaml 文件中添加以下依赖:

dependencies:
  clean_network: latest
2. 导入包

在你的 Dart 文件中导入 clean_network 包:

import 'package:clean_network/clean_network.dart';
3. 在依赖注入中初始化

使用 injectable 进行依赖注入,并初始化 CleanClient

import 'package:clean_network/clean_network.dart';
import 'package:injectable/injectable.dart';

@module
abstract class ThirdPartyModules {
  @lazySingleton
  CleanClient get client => CleanClient(
        options: const CleanBaseOptions(
          baseUrl: 'https://jsonplaceholder.typicode.com', // 基础URL
          headers: {
            'Content-Type': 'application/json', // 请求头
          },
        ),
      );
}
4. 创建远程数据源

创建一个抽象类和实现类来处理具体的网络请求:

import 'package:clean_network/clean_network.dart';
import 'package:example/src/features/posts/data/models/post_model.dart';
import 'package:injectable/injectable.dart';

// 定义接口
abstract class PostSource {
  CleanResponse<List<PostModel>> getPosts(); // 获取所有帖子
  CleanResponse<PostModel> getSinglePost(int id); // 获取单个帖子
}

// 实现接口
@LazySingleton(as: PostSource)
class PostSourceImpl extends BaseSource implements PostSource {
  PostSourceImpl(super.client);

  @override
  CleanResponse<List<PostModel>> getPosts() {
    return get( // 发送GET请求获取所有帖子
      '/posts',
      onSuccess: PostModel.fromJsonList, // 成功时解析响应
    );
  }

  @override
  CleanResponse<PostModel> getSinglePost(int id) {
    return get( // 发送GET请求获取单个帖子
      '/posts/$id',
      onSuccess: PostModel.fromJson, // 成功时解析响应
    );
  }
}
5. 创建仓库

创建一个仓库类来管理业务逻辑:

import 'package:example/src/core/network/base.dart';
import 'package:example/src/features/posts/data/models/post_model.dart';
import 'package:example/src/features/posts/data/source/post_source.dart';
import 'package:example/src/features/posts/domain/repository/post_repository.dart';
import 'package:injectable/injectable.dart';

@LazySingleton(as: PostRepository)
class PostRepositoryImpl extends BaseRepository implements PostRepository {
  final PostSource _postSource;

  PostRepositoryImpl(this._postSource);

  @override
  EitherResponse<List<PostModel>> getPosts() {
    return handleNetwork(_postSource.getPosts); // 处理网络请求并返回结果
  }

  @override
  EitherResponse<PostModel> getSinglePost(int id) {
    return handleNetwork(
      () => _postSource.getSinglePost(id), // 处理网络请求并返回结果
    );
  }
}

示例代码

请参考以下示例代码,了解如何使用 clean_network 插件进行网络清理与优化:

示例

请参阅 example/README.md 获取完整的示例。


更多关于Flutter网络清理与优化插件clean_network的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网络清理与优化插件clean_network的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用clean_network插件进行网络清理与优化的代码示例。clean_network插件可以帮助你管理应用的网络缓存,优化网络请求等。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加clean_network插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  clean_network: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

2. 导入插件

在你的Dart文件中导入clean_network插件:

import 'package:clean_network/clean_network.dart';

3. 初始化插件

通常,你会在应用的入口文件(如main.dart)中初始化插件:

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化 CleanNetwork
  CleanNetwork.instance.init(
    enableLogging: true, // 是否启用日志
    cacheConfig: CacheConfig(
      maxAge: const Duration(days: 7), // 缓存最大存活时间
      maxSize: 100 * 1024 * 1024, // 缓存最大大小(100MB)
    ),
  );

  runApp(MyApp());
}

4. 使用插件进行网络请求和缓存管理

你可以使用CleanNetwork实例来进行网络请求,并自动管理缓存。以下是一个简单的GET请求示例:

import 'package:flutter/material.dart';
import 'package:clean_network/clean_network.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Clean Network Example'),
        ),
        body: Center(
          child: FutureBuilder<String>(
            future: fetchData(),
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.waiting) {
                return CircularProgressIndicator();
              } else if (snapshot.hasError) {
                return Text('Error: ${snapshot.error}');
              } else {
                return Text('Data: ${snapshot.data}');
              }
            },
          ),
        ),
      ),
    );
  }

  Future<String> fetchData() async {
    try {
      // 使用 CleanNetwork 进行 GET 请求
      var response = await CleanNetwork.instance.get(
        url: 'https://jsonplaceholder.typicode.com/posts/1',
      );

      // 返回响应数据
      return response.data?.toString() ?? 'Empty response';
    } catch (e) {
      // 处理异常
      return 'Error: $e';
    }
  }
}

5. 清理缓存

你可以在应用中的任何位置调用CleanNetwork.instance.clearCache()来清理缓存:

void _clearCache() async {
  try {
    await CleanNetwork.instance.clearCache();
    print('Cache cleared successfully');
  } catch (e) {
    print('Error clearing cache: $e');
  }
}

你可以将这个清理缓存的函数绑定到一个按钮点击事件或其他触发条件上。

总结

以上代码展示了如何在Flutter项目中集成并使用clean_network插件进行网络请求、缓存管理以及清理缓存。确保你已经正确添加了依赖并初始化了插件,然后你可以根据需要进行网络请求和缓存管理。

回到顶部