網(wǎng)站手機(jī)端和電腦端seo零基礎(chǔ)入門到精通200講
在Flutter 中常見的網(wǎng)絡(luò)請(qǐng)求方式有三種:HttpClient、http庫(kù)、dio庫(kù);
本文簡(jiǎn)單介紹 使用dio庫(kù)使用。
選擇dio庫(kù)的原因:
dio是一個(gè)強(qiáng)大的Dart Http請(qǐng)求庫(kù),支持Restful API、FormData、攔截器、請(qǐng)求取消、Cookie管理、文件上傳/下載、超時(shí)、自定義適配器等...
1、使用dio 三方庫(kù)必然需要先在pubspec中依賴它:
dio: ^3.0.1
注:格式對(duì)齊
2、創(chuàng)建HttpConfig 基礎(chǔ)配置
// 網(wǎng)絡(luò)請(qǐng)求配置文件
class HTTPConfig {static const baseURL = "http://127.0.0.0:8000";static const timeout = 5000;
}
3、創(chuàng)建基礎(chǔ)網(wǎng)絡(luò)請(qǐng)求
import 'package:dio/dio.dart';
import 'package:list/douban/Common/custom_log.dart';
import 'package:list/douban/Common/http_config.dart';// ignore: camel_case_types
class Http_request {// 創(chuàng)建網(wǎng)絡(luò)請(qǐng)求實(shí)例對(duì)象static final BaseOptions baseOptions = BaseOptions(baseUrl: HTTPConfig.baseURL, connectTimeout: HTTPConfig.timeout);static final Dio dio = Dio(baseOptions);static Future<T> request<T>(String url,{String method = "get", required Map<String, dynamic> params}) async {// 1 請(qǐng)求的單獨(dú)配置final Options options = Options(method: method);// 2 添加第一個(gè)攔截器// ignore: unused_local_variableInterceptor dInter = InterceptorsWrapper(onRequest: (RequestOptions options, RequestInterceptorHandler handler) {// 1.在進(jìn)行任何網(wǎng)絡(luò)請(qǐng)求的時(shí)候, 可以添加一個(gè)loading顯示// 2.很多頁(yè)面的訪問必須要求攜帶Token,那么就可以在這里判斷是有Token// 3.對(duì)參數(shù)進(jìn)行一些處理,比如序列化處理等Logs("請(qǐng)求之前", StackTrace.current);handler.next(options);}, onResponse: (Response response, ResponseInterceptorHandler handler) {Logs("相應(yīng)之前", StackTrace.current);handler.next(response);}, onError: (DioError error, ErrorInterceptorHandler handler) {Logs("錯(cuò)誤之前", StackTrace.current);handler.next(error);});// 3 發(fā)送網(wǎng)絡(luò)請(qǐng)求try {Response response =await dio.request<T>(url, queryParameters: params, options: options);return response.data;} on DioError catch (e) {return Future.error(e);}}
}
4、根據(jù)功能將網(wǎng)絡(luò)請(qǐng)求進(jìn)行封裝處理
import 'package:list/douban/Common/custom_log.dart';
import 'package:list/douban/Common/http_request.dart';class HomeRequest {Future<List> getMovieTopList(int start, int count) async{// 1 拼接urlfinal url = "https://douban.uieee.com/v2/movie/top250?start=$start&count=$count";Logs("發(fā)送請(qǐng)求$url", StackTrace.current);// 2 發(fā)送請(qǐng)求final result = await Http_request.request(url, params: {"":""});// 轉(zhuǎn)成模型List movies = [];final subjects = result["subjects"];Logs(subjects, StackTrace.current);// 這里遍歷 subjects 進(jìn)行json解析以及將數(shù)據(jù) bean添加到數(shù)組并返回// 返回?cái)?shù)據(jù)return movies;}
}
最基本的網(wǎng)絡(luò)請(qǐng)求處理,后面會(huì)將此進(jìn)行優(yōu)化改進(jìn)。