当我们使用或者制作一个APP时,数据请求验证无疑是最为关键的部分。
Flutter自身带有Http模块以用于数据请求,但是过于简单,通常不能满足我们的需求。
简介
dio是一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时、自定义适配器等…
官方Github地址
中文文档
文档比较详细,我就不重复了,下面我主要介绍基本封装
使用封装
Get请求是使用最为频繁的请求方式,我们以Get为例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| import 'package:flutter/material.dart'; import 'dart:convert'; import 'dart:async';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:dio/dio.dart';
import 'package:shared_preferences/shared_preferences.dart';
final Dio dio = new Dio();
class Request {
static Future<Map<String, dynamic>> get(String url, { Map<String, String> params }) async { print(url); Map<String, dynamic> result = new Map(); SharedPreferences prefs = await SharedPreferences.getInstance(); String token = prefs.getString('token') ?? ''; if(token == '') { Fluttertoast.showToast(msg: '请登录后使用', backgroundColor: Colors.black54, fontSize: 14.0); } else { try { Response res = await dio.get( url, queryParameters: params, options: new Options( responseType: ResponseType.plain, headers: { 'Authorization': 'Bearer ' + token } ) );
String tempRes = res.toString(); if(tempRes[0] == '[') { tempRes = '{"reslut":' + tempRes + '}'; } result = json.decode(tempRes.toString()); } catch (e) { result = null; Fluttertoast.showToast(msg: '网络请求错误,请重试', backgroundColor: Colors.black54, fontSize: 14.0); }
return result; } }
|