Flutter学习-网络请求

本文详细介绍了在Flutter中使用HttpClient、http库、dio库进行网络请求的方法,并演示了如何解析和处理JSON数据,包括本地JSON配置、数据读取与Model对象转换。

前言:项目中展示的大部分数据都是来自服务器,我们需要向服务器请求数据,并且对他们进行解析展示。
向服务器发出请求就需要用到网络请求相关的知识。

1. 网络请求的方式

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

1.1 HttpClient的示例

HttpClient是dart自带的请求类,在io包中,实现了基本的网络请求相关的操作。

网络调用通常遵循如下步骤:

  1. 创建 client.
  2. 构造 Uri.
  3. 发起请求, 等待请求,同时您也可以配置请求headers、 body。
  4. 关闭请求, 等待响应.
  5. 解码响应的内容.

网络请求案例:

void requestNetwotk() async {
   
   
    //1. 创建HttpClient的请求实例
    final httpClient = HttpClient();

    //2.构建请求的URI
    // https://httpbin.org/get
    // http://123.207.32.32:8000/api/v1/recommend
    // https://httpbin.org/post
    final uri = Uri.parse("https://httpbin.org/get");

    //3.构建请求 返回值类型是 Future<HttpClientRequest> 是一个未来的对象,使用await之后可以使用HttpClientRequest类型来接收
    HttpClientRequest request = await httpClient.getUrl(uri);//get请求
    //final request = await httpClient.postUrl(uri);//post请求

    //4.发送请求 
    HttpClientResponse response = await request.close();

    //判断请求结果
    if (response.statusCode == HttpStatus.ok) {
   
   
      //打印成功结果
      print(await response.transform(utf8.decoder).join());
    } else {
   
   
      print(response.statusCode);
    }
  }
  //关闭HttpClient
    httpClient.close();
  • 代码分析:
    • 新建HttpClient对象,通过 getUrl方法获取 HttpClientRequest
    • 通过HttpClientRequest.close(),发起Http请求, 获取 HttpClientResponse
    • 判断请求结果根据code码,response.statusCode来判断
    • HttpClientResponse是一个Stream对象,通过Utf8Decoder解码,然后join操作符转换成String对象,可以打印出HttpClientResponse 的字符串。
    • 关闭HttpClient
      在这里插入图片描述

HttpClient虽然可以发送正常的网络请求,但是会暴露过多的细节:

  • 比如需要主动关闭request请求,拿到数据后也需要手动的进行字符串解码
  • 在开发中,我们一般很多直接面向HttpClient进行网络请求并不是直接使用HttpClient,而是使用一些库来完成

注意:HttpClient其中还有很多知识,如果大家需要深入了解HttpClient,建议大家多看文档,多找资料学习

1.2 Http库

httpDart 官方提供的另一个网络请求类,相比于 HttpClient,易用性提升了不少。

但是,没有默认集成到Dart的SDK中,所以我们需要先在pubspec中依赖它:

大家如果需要找第三方库:https://pub.dev,直接在这个网站搜索:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • dev_dependencies: 表示是开发阶段导入,打包app是不会把这下面的依赖打包进去的

  • 导入并使用

void requestNeteorkThridHttp() async {
   
   
    /
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值