flutter 实战 之 dio小实践

我们要对dio进行封装

class HttpRequest {
  static Future request(String url,{String method = "get",Map<String,dynamic>? params})async{
      // 创建dio实例
    BaseOptions baseOptions = BaseOptions(
      baseUrl: base_url,
      connectTimeout: Duration(seconds: 1)
    );

    final dio = Dio(baseOptions);
    
    // 发送网络请求
    Options options = Options(method: method);
    try{
      final result = await  dio.request(url,queryParameters: params,options: options);
      return result;
    }on DioException catch(err){
      throw err;
    }
  }
}

 下面我们分析一下

  1. 类定义:

    • HttpRequest 是一个类,其中包含一个静态方法 request,用于发送HTTP请求。
  2. 静态方法定义:

    • request 是一个静态方法,它接受一个URL和一个可选的参数对象。该方法返回一个Future,这意味着它是一个异步函数。
    • 方法的默认参数是 method,其默认值为 "get"。
    • 方法的另一个可选参数是 params,它是一个键值对的Map,用于传递查询参数。
  3. 创建Dio实例:

    • 使用 BaseOptions 创建了一个Dio实例的配置。其中,baseUrl 是基础URL,而 connectTimeout 是连接超时时间(这里设置为1秒)。
    • 创建的Dio实例存储在 dio 变量中。
  4. 发送网络请求:

    • 使用 Options 创建了一个请求选项对象,其中指定了请求的方法(默认为GET)。
    • 使用 dio.request 方法发送HTTP请求。传递了URL、查询参数和请求选项。
    • 如果请求成功,返回结果。
  5. 异常处理:

    • 使用 try-catch 块来捕获可能出现的Dio异常。如果发生异常,则重新抛出该异常。
  6. 返回值:

    • 方法返回从HTTP请求获得的结果。

此外我们还需要定义一个Model类型来解析存储

class Piece {
  late String originName;
  late String describe;
  late int messageType;
  late String messageIconUrl;
  late String remarkName;
  late String messageText;
  late String messageDate;
  late bool messageMute;
  late bool messageUp;

  Piece.fromMap(Map<String, dynamic> json) {
    originName = json["originName"] ?? "";
    describe = json["describe"] ?? "";
    messageType = json["messageType"] ?? 0;
    messageIconUrl = json["messageIconUrl"] ?? "";
    remarkName = json["remarkName"] ?? "";
    messageText = json["messageText"] ?? "";
    messageDate = json["messageDate"] ?? "";
    messageMute = json["messageMute"] ?? false;
    messageUp = json["messageUp"] ?? false;
  }
}

我们数据的api接口如下rap2api.taobao.org/app/mock/293606/api/chat

最后我们来看看如何使用

HttpRequest.request("http://rap2api.taobao.org/app/mock/293606/api/chat/list")    //调用我们自己封装的类进行解析
        .then((res){    // 返回的是一个Future
         // print(res);
         // print(res.data);
          // print(res.data.runtimeType);   //这时候打印出来是 map 类型
       final the_list = res.data["list"];
       print(the_list);
       List<Piece> piece =[];
       for(var sub in the_list){
          piece.add(Piece.fromMap(sub));
       }
       print(piece);
       print(piece[0].originName);
    });

看看效果如下

相关推荐

  1. Flutter实战案例

    2023-12-24 09:40:02       25 阅读
  2. Flutter 教程实战笔记

    2023-12-24 09:40:02       24 阅读
  3. python实现DIY高考倒计时软件

    2023-12-24 09:40:02       32 阅读
  4. DIY高考倒计时软件python实现

    2023-12-24 09:40:02       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-24 09:40:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-24 09:40:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-24 09:40:02       82 阅读
  4. Python语言-面向对象

    2023-12-24 09:40:02       91 阅读

热门阅读

  1. 平方矩阵()

    2023-12-24 09:40:02       74 阅读
  2. hdfs.DataStreamer: Exception in createBlockOutputStream XXXXX

    2023-12-24 09:40:02       72 阅读
  3. 超声波测距系统

    2023-12-24 09:40:02       64 阅读
  4. 算法训练营Day23

    2023-12-24 09:40:02       67 阅读
  5. C语言内存管理以及堆空间栈空间区别

    2023-12-24 09:40:02       61 阅读
  6. 优化for循环(js的问题)

    2023-12-24 09:40:02       59 阅读
  7. Shell Tools of Missing Semester(二)

    2023-12-24 09:40:02       46 阅读
  8. GO语言基础笔记(一):基本语法与数据类型

    2023-12-24 09:40:02       57 阅读
  9. ubuntu常用指令

    2023-12-24 09:40:02       62 阅读