Flutter网络请求辅助插件dio_helper_api的使用

Flutter网络请求辅助插件dio_helper_api的使用

在Flutter开发中,处理网络请求是一个常见的任务。为了简化这一过程,可以使用dio库作为基础,并结合一个封装良好的辅助类来实现更高效的网络请求管理。以下是如何使用dio_helper_api插件的详细说明。

Dio Documentation

示例代码

首先,确保你已经在项目的pubspec.yaml文件中添加了dio依赖:

dependencies:
  dio: ^4.0.0

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

接下来,我们创建一个WeatherApi类来封装网络请求逻辑:

import 'package:dio/dio.dart';
import 'package:flutter/services.dart' show rootBundle;

// 定义一个Api类来封装dio实例
class Api {
  final String baseUrl;
  final String accessToken;
  final String refreshToken;
  final Function(String) onTokenRefreshed;
  final String serverCertificate;
  final int connectTimeout;
  final int receiveTimeout;
  final Map<String, dynamic> header;

  late Dio dio;

  Api({
    required this.baseUrl,
    required this.accessToken,
    required this.refreshToken,
    required this.onTokenRefreshed,
    required this.serverCertificate,
    required this.connectTimeout,
    required this.receiveTimeout,
    required this.header,
  }) {
    // 初始化Dio实例
    dio = Dio(BaseOptions(
      baseUrl: baseUrl,
      connectTimeout: Duration(seconds: connectTimeout),
      receiveTimeout: Duration(seconds: receiveTimeout),
      headers: header,
    ));
  }

  void onInit() {
    // 在这里可以添加额外的初始化逻辑
    debugPrint('Api initialized with base URL: $baseUrl');
  }
}

// 创建WeatherApi类来获取Dio实例
class WeatherApi {
  Dio dioApi() {
    // 获取环境变量中的base URL
    String baseUrl = 'https://api.openweathermap.org';

    // 设置API配置
    Api api = Api(
      baseUrl: baseUrl,
      accessToken: '', // 如果有访问令牌,可以在这里设置
      refreshToken: '', // 如果有刷新令牌,可以在这里设置
      onTokenRefreshed: (newToken) {
        debugPrint('New token: $newToken');
      },
      serverCertificate: '', // 如果需要验证服务器证书,可以在这里设置
      connectTimeout: 180, // 连接超时时间(秒)
      receiveTimeout: 180, // 接收数据超时时间(秒)
      header: {}, // 自定义请求头
    );

    // 初始化Api实例
    api.onInit();

    // 返回Dio实例
    return api.dio;
  }
}

接下来,我们创建一个WeatherService类来使用WeatherApi进行实际的网络请求:

import 'package:get/get.dart';
import 'weather_api.dart'; // 导入WeatherApi类

// 使用GetX框架管理状态
class WeatherService extends GetxService {
  final WeatherApi api;

  WeatherService({required this.api});

  // 示例方法:获取天气信息
  Future<Map<String, dynamic>> fetchWeatherData(String city) async {
    try {
      // 调用Dio实例发送GET请求
      Response response = await api.dioApi().get('/data/2.5/weather', queryParameters: {
        'q': city,
        'appid': 'your_open_weather_map_api_key', // 替换为你的OpenWeatherMap API密钥
      });

      // 检查响应状态码
      if (response.statusCode == 200) {
        return response.data; // 返回解析后的JSON数据
      } else {
        throw Exception('Failed to load weather data');
      }
    } catch (e) {
      // 捕获并打印错误信息
      debugPrint('Error fetching weather data: $e');
      rethrow;
    }
  }
}

最后,在应用程序的主入口处初始化WeatherService并调用它:

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'weather_service.dart'; // 导入WeatherService类

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return GetMaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Dio Helper Example')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 初始化WeatherService
              WeatherApi weatherApi = WeatherApi();
              WeatherService weatherService = WeatherService(api: weatherApi);

              // 调用fetchWeatherData方法
              Map<String, dynamic> weatherData = await weatherService.fetchWeatherData('London');

              // 打印返回的数据
              debugPrint('Weather Data: $weatherData');
            },
            child: Text('Fetch Weather Data'),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


dio_helper_api 是一个基于 Dio 的 Flutter 网络请求辅助插件,它简化了 Dio 的使用,提供了更简洁的 API 来进行网络请求。以下是如何使用 dio_helper_api 进行网络请求的基本步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  dio_helper_api: ^1.0.0  # 请使用最新版本

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

2. 初始化 DioHelper

在使用 dio_helper_api 之前,你需要初始化 DioHelper。通常你可以在应用的 main.dart 文件中进行初始化。

import 'package:dio_helper_api/dio_helper_api.dart';

void main() {
  DioHelper.init(
    baseUrl: 'https://jsonplaceholder.typicode.com', // 你的 API 基础 URL
    headers: {
      'Content-Type': 'application/json',
    },
  );

  runApp(MyApp());
}

3. 发起网络请求

DioHelper 提供了多种方法来发起网络请求,包括 getpostputdelete 等。

GET 请求

import 'package:dio_helper_api/dio_helper_api.dart';

Future<void> fetchData() async {
  try {
    var response = await DioHelper.get('/posts');
    print(response.data);
  } catch (e) {
    print('Error: $e');
  }
}

POST 请求

import 'package:dio_helper_api/dio_helper_api.dart';

Future<void> postData() async {
  try {
    var response = await DioHelper.post(
      '/posts',
      data: {
        'title': 'foo',
        'body': 'bar',
        'userId': 1,
      },
    );
    print(response.data);
  } catch (e) {
    print('Error: $e');
  }
}

PUT 请求

import 'package:dio_helper_api/dio_helper_api.dart';

Future<void> updateData() async {
  try {
    var response = await DioHelper.put(
      '/posts/1',
      data: {
        'title': 'foo updated',
        'body': 'bar updated',
        'userId': 1,
      },
    );
    print(response.data);
  } catch (e) {
    print('Error: $e');
  }
}

DELETE 请求

import 'package:dio_helper_api/dio_helper_api.dart';

Future<void> deleteData() async {
  try {
    var response = await DioHelper.delete('/posts/1');
    print(response.data);
  } catch (e) {
    print('Error: $e');
  }
}

4. 处理响应

DioHelper 的请求方法返回的是一个 Response 对象,你可以通过 response.data 来获取响应数据。

var response = await DioHelper.get('/posts');
print(response.data); // 打印响应数据

5. 错误处理

你可以使用 try-catch 来捕获请求过程中可能发生的错误。

try {
  var response = await DioHelper.get('/posts');
  print(response.data);
} catch (e) {
  print('Error: $e');
}

6. 自定义配置

你可以在初始化 DioHelper 时传递自定义的 Dio 配置。

DioHelper.init(
  baseUrl: 'https://jsonplaceholder.typicode.com',
  headers: {
    'Content-Type': 'application/json',
  },
  connectTimeout: 5000, // 连接超时时间
  receiveTimeout: 3000, // 接收超时时间
);

7. 拦截器

DioHelper 也支持添加拦截器,你可以在初始化时添加自定义的拦截器。

DioHelper.init(
  baseUrl: 'https://jsonplaceholder.typicode.com',
  interceptors: [
    InterceptorsWrapper(
      onRequest: (options, handler) {
        // 在请求发送之前做一些处理
        return handler.next(options);
      },
      onResponse: (response, handler) {
        // 在响应返回之前做一些处理
        return handler.next(response);
      },
      onError: (DioError e, handler) {
        // 在请求失败时做一些处理
        return handler.next(e);
      },
    ),
  ],
);
回到顶部