APP开发平台 > Blog > Flutter网络请求dio封装

Flutter网络请求dio封装教程

1. 导入dio包

目前dio库的最新版本是3.0.1,同使用其他三方库一样,Flutter中使用dio库同样需要配置pubspec.yaml文件。


dependencies:

  flutter:

    sdk: flutter

  dio: ^3.0.10


2. 导入并创建实例

dio包引入成功之后就可以创建dio实例了,一个实例可以发起多个请求,APP中如果只有一个数据源的情况下就可以考虑将dio实例创建成单例模式,这样可以节省系统资源,减少不必要的开销。


//htpp.dart

import 'package:dio/dio.dart';

var dio = Dio();


3.基本配置

在开始使用实例之前需要对实例进行一些基本设置,由于每个人的项目需求不同,我这里只写一下我自己小项目的几个简单配置:


//统一配置dio

  dio.options.baseUrl = "https://www.wanandroid.com";//baseUrl

  dio.options.connectTimeout = 5000;//超时时间

  dio.options.receiveTimeout = 3000;//接收数据最长时间

  dio.options.responseType = ResponseType.json;//数据格式


也可以通过创建option的方式配置:


BaseOptions options = BaseOptions();

options.baseUrl = "https://www.wanandroid.com";

options.connectTimeout = 5000;

options.receiveTimeout = 3000;

options.responseType = ResponseType.json;

dio.options = options;


上面介绍了配置dio实例的两种方式,并对其中的baseUrl、链接超时、接收数据最长时长、接收报文的数据类型等几个简单属性做了统一配置。dio中还有一些其他的配置,可以参考dio的主页https://github.com/flutterchina/dio


4.使用示例

dio实例配置完成之后如何使用呢?通过请求玩android首页的banner图来演示一下:

基本的步骤是,第一步先请求数据,第二步把请求回来的json数据转成model,第三步把model数据渲染成轮播图:


child: FutureBuilder(

            future: dio.get("/banner/json"),

            builder: (context, snapshot) {

              if (snapshot.connectionState == ConnectionState.done) {

                Response response = snapshot.data;

                Map bannerMap = json.decode(response.toString());

                var banner = HomeBanner.fromJson(bannerMap);

                if (snapshot.hasError) {

                  Fluttertoast.showToast(msg: snapshot.error.toString());

                } else {

                  return _getSwiper(banner.data);

                  // Fluttertoast.showToast(msg: banner.data[0].title);

                }

              }

              return Center(

                child: CircularProgressIndicator(),

              );

            },

          ),

  //根据接口返回的数据生成轮播图

  Swiper _getSwiper(List<Datum> data) {

    imgs.clear();

    for (var i = 0; i < data.length; i++) {

      var image = Image.network(

        data[i].imagePath,

        fit: BoxFit.cover,

      );

      imgs.add(image);

    }

    return Swiper(

      itemWidth: double.infinity,

      itemHeight: 200,

      itemCount: imgs.length,

      itemBuilder: (BuildContext context, int index) {

        return imgs[index];

      },

      autoplay: true,

      pagination: new SwiperPagination(

        builder: SwiperPagination.dots,

      ),

      control: new SwiperControl(),

    );

  }


这个示例中涉及到了JSON转MODEL的相关知识。

APICloud-专业APP开发app定制服务商,提供一站式移动应用解决方案,满足您的各类需求,欢迎免费评估需求和获取报价。

 

立即免费在线制作一个APP,新手注册即送开发大礼包

提交app定制需求,免费获取报价和周期:

电脑请点击https://app.apicloud.com/index?uzchannel=500

手机请点击https://www.apicloud.com/m/customizedservice


An efficient app outsourcing platform that guarantees timely delivery!

Submit Requirements