转载于:https://www.jianshu.com/p/59fc5ed37453

前言

编写一个 App,最离不开的就是网络请求了。在Android 原生中,网络请求库一直在更新,网络请求库甚多:HttpUrlConnection、HttpClient、Volley、Okhttp、Retrofit...
Flutter 才出来没多久,普及率也不是很高,网络请求大致分为三种方式:

  • Dart 原生的网络请求 HttpClient
  • 库 http
  • Flutter中文网发布的 dio

本文分别介绍这三种网络请求方式的 GET 和 POST

一、原生方式

1.1 get 请求

先上代码:

  void getNet_1() async {var client = new HttpClient();var request = await client.getUrl(Uri.parse(url_1));var response = await request.close();if (response.statusCode == HttpStatus.ok) {_content = await response.transform(Utf8Decoder()).join();}}
  • async 和 await 表示异步

  • 需要引入的包:

import 'dart:convert';
import 'dart:io';
  • pubspec.yaml 文件不需要修改

Dart 语言出来的时间比较晚,吸收了前辈语言们的经验,Java 的原生网络请求代码可是一大截,Dart 语言的简简单单的几行,非常现代化。

1.2 post 请求

原生的网络请求虽然有 post 方法,但是对 post 请求支持不是很友好,在网上找了很久也没找到案例,最后在 stackoverflow 上找到一篇文章:
https://stackoverflow.com/questions/21491543/how-to-do-post-in-dart-command-line-httpclient
还是用其他的网络请求方式-_-||

二、库 http

2.1 get 请求

代码如下:

  void getNet_2() async {var client = http.Client();http.Response response = await client.get(url_2);_content = response.body;}
  • 代码量比原生的简洁很多,然而还可以更简洁
  void getNet_2_easy() {http.Client().get(url_2).then((http.Response response) {_content = response.body;});}
  • 导包:
import 'package:http/http.dart' as http;
  • pubspec.yaml 以前要添加依赖,现在不要了,如果需要如下:
http: '>=0.11.3+12'

2.2 post 请求

  void postNet_2() async {var params = Map<String, String>();params["username"] = "hellonews";params["password"] = "123456";var client = http.Client();var response = await client.post(url_post, body: params);_content = response.body;}

这代码量跟 Java 相比,简直不要太爽。
最开始这里我遇到一个坑,我是这么写的:

http.post(url, body: JSON.encode({'username': 'hellonews','password':'123456'}))

返回的数据死活说账号密码错误,后面发现是表单提交。。。-_-||
http 的 post 源码中有这个一个注释:

If [body] is a Map, it's encoded as form fields using [encoding]. The
content-type of the request will be set to
"application/x-www-form-urlencoded";

意思大概是:如果你 post 上来的 body 是一个 Map,它会自动转换成表单提交。
我在 dio 中使用这个 Map 却死活说账号密码错误, 最后发现 dio 表单使用另一种方式。

三、库 dio

3.1 get 请求

代码如下:

  void getNet_3() async {Dio dio = new Dio();var response = await dio.get(url_3);_content = response.data.toString();}
  • pubspec.yaml 要添加依赖:
dependencies:······dio: ^1.0.9
  • 导包:
import 'package:dio/dio.dart';

3.2 post 请求

  void postNet_3() async {FormData formData = new FormData.from({"username": "hellonews","password": 123456,});var dio = new Dio();var response = await dio.post(url_post, data: formData);_content = response.data.toString();}

对比 dio 和 http 两个库,发现他们其实使用方式差不多,http 还不要加依赖,那我为什么要用dio 呢?
从 dio 的官方 Github 上 copy 它的介绍来回答这个问题:

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

非常明了吧,dio 其实就相当于现在 Android 流行的 Okhttp + Retrofit
所以我们为了省事,还是用 dio 吧。

  • 本文 Github 地址如下:
    https://github.com/ldlywt/flutter_demo
  • 本文 post 请求的接口调试来自鸿洋大神的
    http://wanandroid.com/blog/show/2

Flutter网络请求方式总结相关推荐

  1. 6748如何设置edma为事件触发方式_全面分析前端的网络请求方式

    作者|ConardLi 编辑|覃云 来源|code 秘密花园公众号 一.前端进行网络请求的关注点 大多数情况下,在前端发起一个网络请求我们只需关注下面几点: 传入基本参数(url,请求方式) 请求参数 ...

  2. Flutter 网络请求框架dio使用详解

    前言 dio是一款Flutter 网络请求框架,在GitHub上目前有超过5.9k个star.由国人(Flutter中文网)开发,所以中文文档非常完善. 这里copy了dio官方的文档,便于自己开发时 ...

  3. android 请求方式有哪些,Android中的几种网络请求方式详解

    Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面整理四种常用网络请求方式. java.net包中的HttpURLConnection类 Get方式: // Get方式请求 ...

  4. 超简单-用协程简化你的网络请求吧,兼容你的老项目和旧的网络请求方式

    前言 在Kotlin协程(后简称协程)出来之后,颠覆了我们很多工具类的封装方式,大大简化了我们很多api的调用,并且使异步操作逻辑更清晰了 其中一个很标志性的地方就属网络请求了,以前的网络请求方式声明 ...

  5. ajax jq 图片上传请求头_全面分析前端的网络请求方式:Ajax ,jQuery ,axios,fetch

    链接:https://juejin.im/post/5c9ac607f265da6103588b31 一.前端进行网络请求的关注点 大多数情况下,在前端发起一个网络请求我们只需关注下面几点: 传入基本 ...

  6. 全面分析前端的网络请求方式

    一.前端进行网络请求的关注点 大多数情况下,在前端发起一个网络请求我们只需关注下面几点: 传入基本参数(url,请求方式) 请求参数.请求参数类型 设置请求头 获取响应的方式 获取响应头.响应状态.响 ...

  7. flutter网络请求dio的get、post、上传文件、下载文件总结

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 flutter中网络请求dio使用分析 视频教程在这里 Flutter 从入门实践到开发一个APP之UI基础 ...

  8. Flutter网络请求库DIO入门文档(1),android开发网

    }); response = await dio.post("http/test/upload", data: formData); //上传多个文件 formData = For ...

  9. Flutter网络请求库DIO入门文档,实战案例

    var request = await httpClient.getUrl(Uri.parse(url)); var response = await request.close(); if (res ...

最新文章

  1. Resin介绍及其使用配置
  2. 用递归的方法求s = k! + n! / m!的值
  3. 25个Java机器学习工具库--转载
  4. [OS复习]进程管理3
  5. date时区 es logstash_es-日志存储-Logstash 介绍
  6. 四层负载均衡和七层负载均衡的区别
  7. 面试准备-Shell脚本
  8. 详解在ASP.NET中用LINQ实现数据处理
  9. 第一天:认识python
  10. 非常有名的免费开源图库相册软件
  11. python定义一个字符串后怎么修改_python基础--字符串操作详解
  12. python 邮件中生成图表_60秒一口Python:147个demo,助你从新手小白步步进阶编程高手...
  13. sublime text3 保存文件时候名字后缀.dump问题解决
  14. 易驾佳智能机器人教练_我市首个“机器人教练”上岗 驾校开启人工智能教学新模式...
  15. 【细节实现题】LeetCode 8. String to Integer (atoi)
  16. STM32F103 驱动DS18B20
  17. 高分三号卫星(GF-3)简介
  18. 基于 SpringBoot 和 webSocket 的匿名聊天室
  19. EMM系列1:EMM和ECM状态
  20. 分段函数的期望和方差_导数排列组合期望方差.doc

热门文章

  1. Android 集成友盟推送方案(1)
  2. android开机logo和动画修改
  3. python实现梯度下降算法
  4. 深入浅出 Java Concurrency (10): 锁机制 part 5 闭锁 (CountDownLatch)
  5. 【GitLab】GitLab数据自动删除、自动备份
  6. subfinder子域名发现工具
  7. tensorflow模型ckpt如何查看输入输出节点,以及转uff模型
  8. office 365 PPT 如何关闭设计理念?
  9. CTF隐写(stegsolve)
  10. 怎样区分细菌性和病毒性感冒