Flutter 网络请求

在Flutter 中常见的网络请求方式有三种:HttpClient、http库、dio库;

本文简单介绍 使用dio库使用。
选择dio库的原因:

dio是一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时、自定义适配器等...

1、使用dio 三方库必然需要先在pubspec中依赖它:

dio: ^3.0.1

注:格式对齐

2、创建HttpConfig 基础配置

// 网络请求配置文件
class HTTPConfig {
  static const baseURL  = "http://127.0.0.0:8000";
  static const timeout = 5000;
}

3、创建基础网络请求

import 'package:dio/dio.dart';
import 'package:list/douban/Common/custom_log.dart';
import 'package:list/douban/Common/http_config.dart';

// ignore: camel_case_types
class Http_request {
  // 创建网络请求实例对象
  static final BaseOptions baseOptions = BaseOptions(
      baseUrl: HTTPConfig.baseURL, connectTimeout: HTTPConfig.timeout);
  static final Dio dio = Dio(baseOptions);

  static Future<T> request<T>(String url,
      {String method = "get", required Map<String, dynamic> params}) async {
    // 1 请求的单独配置
    final Options options = Options(method: method);

    // 2 添加第一个拦截器
    // ignore: unused_local_variable
    Interceptor dInter = InterceptorsWrapper(
        onRequest: (RequestOptions options, RequestInterceptorHandler handler) {
      // 1.在进行任何网络请求的时候, 可以添加一个loading显示

      // 2.很多页面的访问必须要求携带Token,那么就可以在这里判断是有Token

      // 3.对参数进行一些处理,比如序列化处理等
      Logs("请求之前", StackTrace.current);
      handler.next(options);
    }, onResponse: (Response response, ResponseInterceptorHandler handler) {
      Logs("相应之前", StackTrace.current);
      handler.next(response);
    }, onError: (DioError error, ErrorInterceptorHandler handler) {
      Logs("错误之前", StackTrace.current);
      handler.next(error);
    });

    // 3 发送网络请求
    try {
      Response response =
          await dio.request<T>(url, queryParameters: params, options: options);
      return response.data;
    } on DioError catch (e) {
      return Future.error(e);
    }
  }
}

4、根据功能将网络请求进行封装处理


import 'package:list/douban/Common/custom_log.dart';
import 'package:list/douban/Common/http_request.dart';


class HomeRequest {

  Future<List> getMovieTopList(int start, int count) async{

    // 1 拼接url
    final url = "https://douban.uieee.com/v2/movie/top250?start=$start&count=$count";
    Logs("发送请求$url", StackTrace.current);
    // 2 发送请求
    final result = await Http_request.request(url, params: {"":""});

    // 转成模型
    List movies = [];
    final subjects = result["subjects"];
    Logs(subjects, StackTrace.current);
    // 这里遍历 subjects 进行json解析以及将数据 bean添加到数组并返回

    // 返回数据
    return movies;
  }
}

最基本的网络请求处理,后面会将此进行优化改进。

你可能感兴趣的:(Flutter,提升之路,flutter,开发语言)