文章系列
Flutter Dio源码剖析(一)--Dio介绍
Flutter Dio源码剖析(二)--HttpClient、Http、Dio比照
Flutter Dio源码剖析(三)--深度分析
Flutter Dio源码剖析(四)--封装
视频系列
Flutter Dio源码剖析(一)--Dio介绍视频教程
Flutter Dio源码剖析(二)--HttpClient、Http、Dio比照视频教程
Flutter Dio源码剖析(三)--深度分析视频教程
Flutter Dio源码剖析(四)--封装视频教程
源码仓库地址
github仓库地址
前言
在前文中咱们对Dio
进行了根本介绍,也写了一个简略的示例,明天咱们持续来讲一下Flutter
网络申请的三种申请形式的比照,以达到更好了解Dio
网络申请库的目标。
零碎自带网络申请HttpClient
步骤一:创立一个HttpClient
HttpClient httpClient = HttpClient();
步骤二:关上http连贯,设置申请头
HttpClientRequest request = await httpClient.getUrl(Uri.parse("http://localhost:8080/getUserInfo"));
步骤三:通过HttpClientRequest能够设置申请header
request.headers.add("token", "123456");
步骤四:期待连贯服务器
HttpClientResponse response = await request.close();
步骤五:读取响应内容
// 响应流数据以utf8编码格局返回String responseBody = await response.transform(utf8.decoder).join();
步骤六:申请完结,敞开httpClient
httpClient.close();
残缺示例代码
import 'dart:convert';import 'dart:io';import 'package:flutter/material.dart';class HttpClientExample extends StatelessWidget { @override Widget build(BuildContext context) { void _getUserInfo() async { try { // 1. 创立httpClient HttpClient httpClient = HttpClient(); // 2. 关上http连贯,设置申请头 HttpClientRequest request = await httpClient.getUrl(Uri.parse("http://localhost:8080/getUserInfo")); // 3. 通过HttpClientRequest能够设置申请header request.headers.add("token", "123456"); // 4. 期待连贯服务器 HttpClientResponse response = await request.close(); // 5. 读取响应内容 String responseBody = await response.transform(utf8.decoder).join(); // 6. 申请完结,敞开httpClient httpClient.close(); print(responseBody); } catch (e) { print(e); } } return Scaffold( appBar: AppBar( title: Text("DioExample"), ), body: Center( child: Column( children: [ TextButton( onPressed: _getUserInfo, child: Text("发送get申请"), ) ], ), ), ); }}
第三方网络申请库Http
步骤一:增加依赖
dependencies: http: ^0.13.3 #latest version
步骤二:导入库
import 'package:http/http.dart' as http;
步骤三:发送申请
var response = await http.post(Uri.parse("http://localhost:8080/getUserInfo"));
残缺实例代码
import 'dart:convert';import 'dart:io';import 'package:flutter/material.dart';class HttpClientExample extends StatelessWidget { @override Widget build(BuildContext context) { void _getUserInfo() async { try { // 1. 创立httpClient HttpClient httpClient = HttpClient(); // 2. 关上http连贯,设置申请头 HttpClientRequest request = await httpClient.getUrl(Uri.parse("http://localhost:8080/getUserInfo")); // 3. 通过HttpClientRequest能够设置申请header request.headers.add("token", "123456"); // 4. 期待连贯服务器 HttpClientResponse response = await request.close(); // 5. 读取响应内容 String responseBody = await response.transform(utf8.decoder).join(); // 6. 申请完结,敞开httpClient httpClient.close(); print(responseBody); } catch (e) { print(e); } } return Scaffold( appBar: AppBar( title: Text("DioExample"), ), body: Center( child: Column( children: [ TextButton( onPressed: _getUserInfo, child: Text("发送get申请"), ) ], ), ), ); }}
第三方网络申请库Dio
步骤一:增加依赖
dependencies: dio: ^4.0.0 #latest version
步骤二:导入库
import 'package:dio/dio.dart';
步骤三:发送申请
var response = await Dio().get('http://localhost:8080/getUserInfo');
残缺示例代码
import 'package:dio/dio.dart';import 'package:flutter/material.dart';class DioExample extends StatelessWidget { void _getUserInfo() async { try { var response = await Dio().get('http://localhost:8080/getUserInfo'); print(response); } catch (e) { print(e); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("DioExample"), ), body: Center( child: Column( children: [ TextButton( onPressed: _getUserInfo, child: Text("发送get申请"), ) ], ), ), ); }}
总结
原生HttpClient
发动网络申请十分的简单,很多货色还需本人手动解决。如果波及到上传、下载、断点续传 等那必定十分繁琐,不倡议应用。再来说一下Dio
和 http
两个第三方组件,他们封装的性能都差不多,反而 Dio
更弱小易用,而且从gitbub的Star来说,Dio10000 star,而http才691 star,该数据由2021年08月24日统计。