Flutter网络请求插件fx_dio的使用

Flutter网络请求插件fx_dio的使用

fx_dio 是一个基于 Dio 的 Flutter 网络请求插件。它提供了强大的配置选项和丰富的功能来处理 HTTP 请求。

安装

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

dependencies:
  fx_dio: ^1.0.0

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

基本用法

以下是一个基本的示例,展示了如何使用 fx_dio 发送 GET 请求并处理响应。

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Fx Dio Example')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 创建一个 Dio 实例
              final dio = FxDio();

              try {
                // 发送 GET 请求
                final response = await dio.get('https://jsonplaceholder.typicode.com/posts/1');

                // 处理响应数据
                print('Response Data: ${response.data}');
              } catch (e) {
                // 处理错误
                print('Error: $e');
              }
            },
            child: Text('Send Request'),
          ),
        ),
      ),
    );
  }
}

配置请求

你可以在发送请求之前对 Dio 实例进行配置,例如设置基础 URL、超时时间等。

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Fx Dio Example')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 创建一个 Dio 实例并配置
              final dio = FxDio(
                options: BaseOptions(
                  baseUrl: 'https://jsonplaceholder.typicode.com/',
                  connectTimeout: 5000,
                  receiveTimeout: 3000,
                ),
              );

              try {
                // 发送 GET 请求
                final response = await dio.get('posts/1');

                // 处理响应数据
                print('Response Data: ${response.data}');
              } catch (e) {
                // 处理错误
                print('Error: $e');
              }
            },
            child: Text('Send Request with Config'),
          ),
        ),
      ),
    );
  }
}

错误处理

你可以通过捕获异常来处理网络请求中的错误。fx_dio 会抛出 DioError 类型的异常,你可以根据不同的错误类型进行处理。

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Fx Dio Example')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 创建一个 Dio 实例
              final dio = FxDio();

              try {
                // 发送 GET 请求
                final response = await dio.get('https://jsonplaceholder.typicode.com/posts/1');

                // 处理响应数据
                print('Response Data: ${response.data}');
              } on DioError catch (e) {
                // 处理不同类型的错误
                switch (e.type) {
                  case DioErrorType.connectTimeout:
                    print('Connection timeout');
                    break;
                  case DioErrorType.receiveTimeout:
                    print('Receive timeout');
                    break;
                  case DioErrorType.response:
                    print('Server error: ${e.response?.data}');
                    break;
                  default:
                    print('Other error: $e');
                }
              } catch (e) {
                // 其他错误
                print('Unknown error: $e');
              }
            },
            child: Text('Handle Errors'),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter网络请求插件fx_dio的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网络请求插件fx_dio的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


fx_dio 是一个基于 dio 的 Flutter 网络请求插件,它简化了 dio 的使用,并提供了一些便捷的功能,如请求拦截、错误处理、缓存等。以下是如何在 Flutter 项目中使用 fx_dio 的步骤。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 fx_dio 依赖:

dependencies:
  flutter:
    sdk: flutter
  fx_dio: ^1.0.0  # 请根据实际情况使用最新版本

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

2. 初始化 fx_dio

在使用 fx_dio 之前,通常需要对其进行初始化。你可以在 main.dart 中进行初始化:

import 'package:fx_dio/fx_dio.dart';

void main() {
  // 初始化 fx_dio
  FxDio.init(
    baseUrl: 'https://jsonplaceholder.typicode.com', // 设置基础URL
    interceptors: [
      // 添加拦截器
      LogInterceptor(), // 日志拦截器
    ],
  );

  runApp(MyApp());
}

3. 发起网络请求

fx_dio 提供了多种请求方法,如 get, post, put, delete 等。以下是一个简单的 GET 请求示例:

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

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

  Future<String> fetchData() async {
    try {
      final response = await FxDio().get('/posts/1');
      return response.data.toString();
    } catch (e) {
      throw e;
    }
  }
}

4. 处理错误

fx_dio 提供了全局的错误处理机制。你可以在初始化时设置全局错误处理:

FxDio.init(
  baseUrl: 'https://jsonplaceholder.typicode.com',
  interceptors: [
    LogInterceptor(),
  ],
  onError: (error) {
    // 全局错误处理
    print('Global Error: $error');
  },
);

你也可以在具体的请求中处理错误:

Future<String> fetchData() async {
  try {
    final response = await FxDio().get('/posts/1');
    return response.data.toString();
  } on DioError catch (e) {
    // 处理 DioError
    print('Dio Error: $e');
    throw e;
  } catch (e) {
    // 处理其他错误
    print('Other Error: $e');
    throw e;
  }
}

5. 使用拦截器

fx_dio 支持自定义拦截器。你可以通过添加拦截器来实现日志记录、请求重试、认证等功能:

FxDio.init(
  baseUrl: 'https://jsonplaceholder.typicode.com',
  interceptors: [
    LogInterceptor(), // 日志拦截器
    RetryInterceptor(), // 重试拦截器
  ],
);

6. 缓存请求

fx_dio 还支持请求缓存功能。你可以通过设置缓存策略来缓存请求结果:

final response = await FxDio().get(
  '/posts/1',
  options: Options(
    extra: {
      'cache': true, // 启用缓存
      'cacheKey': 'post_1', // 缓存键
    },
  ),
);

7. 取消请求

你可以通过 CancelToken 来取消请求:

CancelToken cancelToken = CancelToken();

Future<String> fetchData() async {
  try {
    final response = await FxDio().get(
      '/posts/1',
      cancelToken: cancelToken,
    );
    return response.data.toString();
  } catch (e) {
    throw e;
  }
}

void cancelRequest() {
  cancelToken.cancel('Request cancelled');
}
回到顶部