文章系列

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发动网络申请十分的简单,很多货色还需本人手动解决。如果波及到上传下载断点续传 等那必定十分繁琐,不倡议应用。再来说一下Diohttp 两个第三方组件,他们封装的性能都差不多,反而 Dio 更弱小易用,而且从gitbub的Star来说,Dio10000 star,而http才691 star,该数据由2021年08月24日统计。