Flutter Dio 网络接口与请求数据

Flutter Dio 网络接口与请求数据

想了想,感觉没什么好说的,像什么get,post,delete,download啥的,基本插件的使用文档都有,没什么好说的,但是我们实际项目写的时候,可不能那样写,容易引起别人笑话,所以说最基本的配置文件还需要我们自己动手去书写。我也不挨个的发了感觉没意思,就大致的把网络接口的数据模型发给大家,大家直接复制下来就能用,当然用的时候也要改一下一些参数,例如我们请求数据的时候,头信息是很多的,像我们工作时的接口的头信息也是不少的,总不能一个content_type就完事了吧,那也太简单了,如果真是这样,那公司服务器还不得给别人整瘫痪了。好了,话不多说,下面进入我们正题。

大家也知道,我们利用网络接口去获取数据的时候,有url吧,就是我们常说的ip,然后根据端口号和api的不同去访问不同的接口。这样为了我们在工作中的方便性,我们就简历一个.dart文件,把我们的参数都写好,就算是以后修改接口的时候,我们只需要在配置文件里修改就好了。

一般我们都会建立一个config文件夹,下面添加一个文件吧,我们随便命名就叫做base_interface吧,(我习惯把api接口放在一个文件下,然后ip和网路请求放在一起就好了,当然这跟个人的习惯相关,你也可以在里面放一个ip就是我们常说的url,然后把api做成一个map就好了)。在里面的定义就差不多如下:

String login_interface = 'xxxxxxxxx';  //登录接口
String exit_interface = 'xxxxxxxxx';  //注销接口
String xx_interface = 'xxxxxxxxxxxx';  //xx接口

当然还有什么接口还可以接着下面写,爱咋写咋写!当然有人会说能优化,什么const了static了const static了你随便,差不了多少的(当然也是有差距的,最后我们可以在加上这些修饰符,听说加上可以增加运行速度,反正我基本没在意过)。

好了上面的api接口我们说完了,下面就说我们的网络请求接口了,一般我们大部分使用的是post,也有get但是少,大部分还是使用post的,这我就一起给大家写了,我们用的时候也一起复制了,毕竟多谢总不会错,至于方法吗?我们大可以不用,丢哪里就行了!

我就简单说了,什么文件夹你随意了,我们在简历一个base_api.dart的文件,下面就放我们上面说的网络请求的方法。我就写了一个最基本的请求,看代码:

String ip = "你的ip/url地址(端口号也加上,省的我们麻烦在定义)";

class BaseApiRequest{
  Future<Map> getRequest({String interface,bool ifNeed,Map<String,dynamic> param})async{
    try{
      Response response;
      Dio dio = new Dio();
      if(ifNeed){ //我们这里就只展示一个需要token参数了其余的可以自己加
        String token = "";  //token的来源,可以根据你们的需要去实现,例如可以从本地存储中取出,也可以从网络接口中获取
        dio.options.headers = {'token':token};  //这里的头信息不止一个token,到时候按照map的规范自行添加就好
      }else{
        dio.options.headers = {};  //里面的头信息需要自己添加,至少加一个content_type吧,其实加不加都一样,加了好看,不加看着难受
      }
      print("请求地址--> "+ ip + interface);
      print("参数--> ${param}");
      response =await dio.get(ip + interface,queryParameters: param);

      if(response.statusCode == 200){  //成功
        print("TMD,终于成功了哦, response.data = ${response.data}");
        return response.data;
      }else{
        throw Exception("绝对是接口的问题!!!!!!");
      }
    }catch(e){
//      return print(e);  //为什么不行呢 因为我们是map类型,日了狗了,早知道就不加泛型map了
      return {'异常异常!!!!出错误了哦':e.toString()};
    }
  }

  Future<Map> postRequest({String interface,bool ifNeed,Map<String,dynamic> param})async{
    try{
      Response response;
      Dio dio = new Dio();
      if(ifNeed){ //我们这里就只展示一个需要token参数了其余的可以自己加
        String token = "";  //token的来源,可以根据你们的需要去实现,例如可以从本地存储中取出,也可以从网络接口中获取
        dio.options.headers = {'token':token};  //这里的头信息不止一个token,到时候按照map的规范自行添加就好
      }else{
        dio.options.headers = {};  //里面的头信息需要自己添加,至少加一个content_type吧,其实加不加都一样,加了好看,不加看着难受
      }

      print("请求地址--> "+ ip + interface);
      print("参数--> ${param}");
      response =await dio.post(ip + interface,queryParameters: param);

      if(response.statusCode == 200){  //成功
        print("TMD,终于成功了哦, response.data = ${response.data}");
        return response.data;
      }else{
        throw Exception("绝对是接口的问题!!!!!!");
      }
    }catch(e){
//      return print(e);  //为什么不行呢 因为我们是map类型,日了狗了,早知道就不加泛型map了
      return {'异常异常!!!!出错误了哦':e.toString()};
    }
  }
}

说一下里面的ifNeed,这个参数是判断我们的头信息需要什么样的参数,头信息的参数多了去了,例如content_type,token,accept, authorization,等等等等,你要是想知道更多的参数简单,打开浏览器F12看看就行,步骤我就不说了,做前端的肯定知道,做后端的了解一下就行。所以就判断我们的请求头信息需要什么样的参数,有就在dio.options.headers = {};有就加上,是固定的就写死,你要是不嫌麻烦,你可以每个请求都写一遍!

好了我们的基础工具做完了,什么ip了interface了,还有我们的请求方法都写好了,然后我们要怎么使用呢!请继续看。

我就举个例子,登录的例子:

// 登录
  Future<Map>login({String mobile,String password}) async {

    //加密*//*解密  我就不管了,到时候不懂得,直接去问你的经理或者懂得就行了!!!
    return await postRequest(interface: login_interface,param: {'mobile':mobile,'password':md5Str},ifNeed: false);
  }
}

这里我们post的参数就是mobile和password参数,简单啊 然后就有了,有了什么了,总不是有了孩子吧,有了数据了。怎么看呢好了,在函数里面继续加!

    Map result = await api.login(mobile: this._mobile,password: this._password);  //因为我们请求得到的数据就是map类型
    print('登录结果 ${result}');

好了,到时候就看见了参数了,别忘了这方法得调用才能跑啊!!!!!

到这里就说完了,这就是我们的网络接口和请求数据。看不懂的也没事!直接复制下来就能用,到时候按照自己的项目添加ifNeed参数就行!当然了,我这写的已经够细了,你再看不懂,那就没办法了,自己去学学基础知识吧!!!!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值