专栏首页阿策小和尚【Flutter 专题】14 基本的 http 网络请求学习下~

【Flutter 专题】14 基本的 http 网络请求学习下~

和尚搭建了几个基本的小页面,现在需要添加其中的业务逻辑,这就必不可少的用到网络请求;Flutter 中提供了 dart.io 方式进行网络请求,不管是从请求方式还是实例都讲解的很清楚,使用方式也很简单。但是和尚在看大神们写的案例中很多直接用到了 Dart 中常用的原生 http 请求,和尚也尝试了一下。

集成应用

1. 添加依赖,在 pubspec.yaml 中添加 http 依赖 http: ^0.11.3+17,之后 package get 同步;

2. 在具体的 dart 文件中引入 http;import 'package:http/http.dart' as http; 这种写法很有意思,在 import 时直接定义为 as http,之后在文件中可以用 http 来操作,当然定义为其他名称也是可以的;

3. http 请求操作,日常应用最多的为 post/get 请求,post 请求中需要传参 urlbody(键值对),通过 then 方式接收返回内容;get 请求中主要传入 url 参数,同时也可以传入请求头标题等 Accept,同样通过 then 方法接收返回内容;和尚测试 read 请求方式与 get 方式基本一致,只是对返回内容操作不同,get 的返回的全部内容包括状态值和数据内容,而 read 返回的内容直接为数据内容,和尚以为 read 方式更适合请求文件内容方式。

POST 请求
var url = "https://example.com/api/login?";
http.post(url, body: {'password':'e10adc3949ba59abbe56e057f20f883e', 'mobile':'13333333333'})
    .then((response) {
        print("post方式->status: ${response.statusCode}");
        print("post方式->body: ${response.body}");
    }
);
GET 请求
http.get('https://example/getUserBaseInfo?sid=cs&user=13333333333')
    .then((onValue) {
        print("get方式->status: ${onValue.statusCode}");
        print("get方式->body: ${onValue.body}");
    }
);
READ 请求
http.read('https://example/getUserBaseInfo?sid=cs&user=13333333333'),headers: {"Accept": "application/json"})
    .then((onValue) {
        print("read方式->$onValue");
});

异步处理

涉及到网络请求,就必不可少的需要异步处理,Flutter 提供了便利的异步操作方法 async + await;将耗时的不需要长时运算的方法先执行,之后在执行 await 中耗时操作;和尚建议在使用 asyncawait 方式时,要成对出现,await 执行在 async 方法内。

login() async {
    await http.post(url, body: {'password':'e10adc3949ba59abbe56e057f20f883e', 'mobile':'13333333333'})
    .then((response) {
        print("post方式->status: ${response.statusCode}");
        print("post方式->body: ${response.body}");
        }
    );
}
// 调用登录方法
login();

测试源码

login() async {
  await http.post('https://example.com/api/login?', body: {
    'password': 'e10adc3949ba59abbe56e057f20f883e',
    'mobile': _phonecontroller.text
  }).then((response) {
    if (response.statusCode == 200) {
      router.navigateTo(context, '/home/${response.body}');
    } else {
      showDialog<Null>(
        context: context,
        barrierDismissible: false,
        child: new AlertDialog(
          title: new Text(
            '温馨提示',
            style: new TextStyle(
              color: Colors.black54,
              fontSize: 18.0,
            ),
          ),
          content: new Text('您输入的用户名密码不存在!'),
          actions: <Widget>[
            new FlatButton(
                onPressed: () {
                  Navigator.pop(context);
                },
                child: new Text('确定')),
          ],
        ),
      );
    }
  });
}

onTap() {
    login();
}

和尚刚接触 Flutter 时间不长,还有很多不清楚和不理解的地方,如果又不对的地方还希望多多指出。以下是和尚公众号,欢迎闲来吐槽~

本文分享自微信公众号 - 阿策小和尚(gh_8297e718c166)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【Unity游戏开发】不接SDK也能在游戏内拉起加QQ群操作?

      一般在游戏进行对外测试的时候都会有一个玩家QQ群,方便玩家反馈问题、交流游戏心得等。那么为了增加玩家加QQ群的欲望,可能会在游戏里面设计一个小功能,点击一下...

    马三小伙儿
  • 流量渠道追踪全解析

    其实这个就是UTM,UTM的全称是Urchin Tracking Module/Urchin Tracking Manager,通过向网址中添加广告系列参数,可...

    GA小站
  • 防患高通效仿华为,苹果10亿美元收购英特尔手机基带业务!打造5G备胎,加强自主可控

    有人说这是苹果自研基带之心不死,也能当作苹果为5G种下备胎计划,或者会是苹果加强关键供应链自主可控的重要一步。

    量子位
  • 《传奇世界》基于cocos2d开源手游

    基于cocos2d游戏引擎开发lua脚本编写的经典游戏《传奇世界》手游版,支持android、ios、windows等不同平台,职业设定(战士、法师、道士), ...

    程序源代码
  • promise版本的golang

    之前我们分析了swift版本的PromiseKit,最近也在琢磨能否移植到咱大golang上来,找了好久也没有相对应的粒子。于是经过一次失败的尝试之后这周末花了...

    大话swift
  • web前端面试中10个关于css高频面试题,你都会吗?

    BFC(Block Formatting Context),块级格式化上下文,是一个独立的渲染区域,让处于 BFC 内部的元素与外部的元素相互隔离,使内外元素的...

    coder_koala
  • Flutter | 求求你们了,切换 Widget 的时候加上动画吧

    那如何在 Flutter 当中切换 Widget 的时候加上特效?完成这样的效果?

    Flutter笔记
  • 苹果外包爆料:你手机里的Siri,听到了嘿嘿嘿的声音

    据《卫报》得到的苹果外包公司员工爆料,这些包含Siri被误唤醒时的内容,都将被一一记录分析。

    量子位
  • golang实践之Excel操作

    工作中我们经常会用到Excel表格,甚至很多软件都有导出Excel的功能,今天就根据自己的需要使用go来帮忙生成Excel。其实这个需要在几个月以前就有了,只是...

    大话swift
  • [数据分析]小白也可以用数据分析选购心仪的手机

    9月13日发布的iPhone Xs算是手机界的大新闻了,新款iPhone的价格也再度刷新了手机定价的记录。看完发布会,相信很多人的心情是这样的

    叫我龙总

扫码关注云+社区

领取腾讯云代金券