热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flutter开发之网络请求

项目中展示的大部分数据都是来自服务器,我们需要向服务器请求数据,并且对他们进行解析展示。 一. 网络请求的方式 在Flutter中常见的网络请求方式有三种:

项目中展示的大部分数据都是来自服务器,我们需要向服务器请求数据,并且对他们进行解析展示。

一. 网络请求的方式

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

1、HttpClient

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

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

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

代码示例:

void requestNetwork() async {// 1.创建HttpClient对象final httpClient = HttpClient();// 2.构建请求的urivar urlStr = 'https://r.inews.qq.com/getQQNewsUnreadList';final uri = Uri.parse(urlStr);// 3.构建请求final request = await httpClient.getUrl(uri);// 4.发送请求,必须final response = await request.close();if (response.statusCode == HttpStatus.ok) {print(await response.transform(utf8.decoder).join());} else {print(response.statusCode);}
}

返回的结果:
在这里插入图片描述
HttpClient虽然可以发送正常的网络请求,但是会暴露过多的细节:

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

2、http库

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

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

http:

导入http会报错:

import 'package:http/http.dart' as http;

在这里插入图片描述
找不到?
参考:解决方法


void httpNetwork() async {// 1.创建Clientfinal client = http.Client();var urlStr = 'https://r.inews.qq.com/getQQNewsUnreadList';// 2.构建urifinal url = Uri.parse(urlStr);// 3.发送请求final response = await client.get(url);// 4.获取结果if (response.statusCode == HttpStatus.ok) {print(response.body);} else {print(response.statusCode);}
}

打印结果:
在这里插入图片描述

3、dio第三方库

官方提供的HttpClient和http都可以正常的发送网络请求,但是对于现代的应用程序开发来说,我们通常要求的东西会更多:比如拦截器、取消请求、文件上传/下载、超时设置等等;
这个时候,我们可以使用一个在Flutter中非常流行的三方库:dio。

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

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

dio:^3.0.1

在这里插入图片描述
导入dio:

import 'package:dio/dio.dart';

void dioNetwork() async {// 1.创建Dio请求对象final dio = Dio();// 2.发送网络请求var urlStr = 'https://r.inews.qq.com/getQQNewsUnreadList';final response = await dio.get(urlStr);// 3.打印请求结果if (response.statusCode == HttpStatus.ok) {print(response.data);} else {print("请求失败:${response.statusCode}");}
}

4、dio库的简单封装

创建一个文件命名为:http_request.dart

import'package:dio/dio.dart';
class HTTPConfig {static const baseURL = "https://r.inews.qq.com/"; //域名static const timeout = 10000; //超时时间
}class HttpRequest {static final BaseOptions options &#61; BaseOptions(baseUrl: HTTPConfig.baseURL, connectTimeout: HTTPConfig.timeout);static final Dio dio &#61; Dio(options);static Future<T> request<T>(String path,{String method &#61; &#39;get&#39;, Map<String, dynamic> params, Interceptor inter}) async {// 1.请求的单独配置final options &#61; Options(method: method);// 2.发送网络请求try {Response response &#61; await dio.request<T>(path, queryParameters: params, options: options);print(response.data);return response.data;} on DioError catch(e) {return Future.error(e);}}
}

代码使用&#xff1a;

import &#39;http_request.dart&#39;;//引用HttpRequest.request("getQQNewsUnreadList").then((value){print(&#39;返回结果 &#xff1a;$value&#39;);});

打印结果&#xff1a;
在这里插入图片描述


推荐阅读
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
author-avatar
无欲似水_803
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有