本项目借用 逛丢 网站的部分数据,仅作为 flutter 开发学习之用。 逛丢官方网址:https://guangdiu.com/

flutter windows开发环境设置

flutter 项目实战一 新建 flutter 项目

flutter 项目实战二 网络请求

flutter 项目实战三 json数据解析以及Gson格式化flutter 项目实战二 网络请求

flutter 项目实战四 列表数据展示

flutter 项目实战五 item 点击跳转,webview加载

flutter 项目实战六 drawer侧边栏

flutter 项目实战七 bottomNavigationBar

flutter 项目实战八 下拉刷新 上拉加载

flutter 项目实战九 小时风云榜

在 flutter 项目实战一 新建 flutter 项目 已经新建了一个项目,现在开始我们的项目搭建。

因为需要获取逛丢的数据,所以先测试构建网络请求数据。

flutter 提供了 网络请求的插件 dio ,使用此插件可以获取我们需要网络数据。

打开项目中的 pubspec.yaml 文件,在 dependencies 下添加插件 dio: ^2.1.0 然后点击右上角的 packages get

等待插件加载完成,如果加载失败,重新点击右上角的 packages get 获取

修改原来项目中的代码

1、添加引用

import 'package:dio/dio.dart';

2、新增数据请求方法

void _getHttpData() {String url="https://guangdiu.com/api/getlist.php?markid=5685521";Dio().get(url).then((result){setState(() {content=result.data.toString();});});
}

运行后的界面,点击右下角的加号可获取到网站的数据。

                      

flutter 使用  setState(() { content=result.data; });  更新数据,并重新build界面将设置后的新数据加载到界面上,完成界面的刷新。

放上完整的修改的类的代码:

class _MyHomePageState extends State<MyHomePage> {String content="还未发起请求";@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text(widget.title),),body: Center(child: Text('$content',),),floatingActionButton: FloatingActionButton(onPressed: _getHttpData,tooltip: 'Increment',child: Icon(Icons.add),), // This trailing comma makes auto-formatting nicer for build methods.);}void _getHttpData() {String url="https://guangdiu.com/api/getlist.php?markid=5685521";Dio().get(url).then((result){setState(() {content=result.data.toString();});});}}

至此完成了网络数据请求的测试。

但是,如果每次都是直接写完整的网络请求地址,还是比较麻烦,尤其是当服务器地址变更的时候,会特别麻烦。所以我们需要对网络请求进行初步的封装来是我们引用时更加的便捷简单。而且网络请求是一个耗时操作,这样使用总归有些不规范。

放上完整的封装代码

class HttpUtil{static HttpUtil httpUtil;String baseUrl="https://guangdiu.com/api/";Dio dio;BaseOptions options;static HttpUtil getInstance(){if(httpUtil==null){httpUtil=HttpUtil();}return httpUtil;}HttpUtil(){options=BaseOptions(baseUrl:baseUrl,connectTimeout: 10000,receiveTimeout: 3000,headers: {});dio=Dio(options);}// ignore: avoid_init_to_nullFuture<Response> get(String url,{options,callBack,data}) async {print("--------  $url  --------");Response response;try{response=await dio.get(url,);print("--------   " + response.toString());return response;}on DioError catch(e){if(CancelToken.isCancel(e)){print("取消 "+e.message);}else{print(e);}return null;}}Future<Response>  post(String url,{options,callBack,data}) async {print("*********  $url  *************");Response response;try{response=await dio.post(url,data: data,cancelToken: callBack,options: options);return response;}on DioError catch(e){if(CancelToken.isCancel(e)){print("取消 "+e.message);}else{print(e);}return null;}}}

HttpUtil 中的 get方法只需要传递一个 url 即可,无需传递其他参数。

修改 class _MyHomePageState 的代码

class _MyHomePageState extends State<MyHomePage> {String content="还未发起请求";@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text(widget.title),),body: Center(child: Text('$content',),),floatingActionButton: FloatingActionButton(onPressed: _getHttpData,tooltip: 'Increment',child: Icon(Icons.add),), // This trailing comma makes auto-formatting nicer for build methods.);}void _getHttpData() async {String url="getlist.php";FormData formData=FormData();formData.add("markid", "5685521");Response resp=await HttpUtil().post(url,data: formData).then((result){setState(() {content=result.data.toString();});});}}

因为网络请求服务是一个耗时操作 所以我们修改 使用了 async 与 await . 因为flutter是基于Dart语言的,而dart语言是单线程的,http请求又是异步的,所以此处需要添加异步处理,当遇到耗时的延迟的计算或方法(async)时,将其放到延迟运算队列中(await),防止其阻塞不需要耗时的运算,最后来执行这个耗时操作,防止用户界面出现卡顿的现象。

码云 git 下载

flutter 项目实战二 网络请求相关推荐

  1. Flutter 项目实战 Dio网络请求 四

    /  HTTP  |   HTTPS  / HTTP是一个客户端(用户)和 服务端(网站)之间请求和应答的标准,通常使用TCP协议.客户端发起一个HTTP请求到服务器上指定端口(默认端口为80).客户 ...

  2. flutter 项目实战四 列表数据展示

    本项目借用 逛丢 网站的部分数据,仅作为 flutter 开发学习之用. 逛丢官方网址:https://guangdiu.com/ flutter windows开发环境设置 flutter 项目实战 ...

  3. Flutter 项目实战(Dio+MVP+FutureBuilder )五

    / 没有感情万千 .只有默默无闻 / 2022年跨年了,又涨了一岁.随着时光的流逝,工作多年的我还是在坚持些代码.互联网都有所谓的大龄危机,我对此毫无畏惧.不要因为社会存在一些大龄危机的恐慌,产生了很 ...

  4. Flutter 实战开发-网络请求

    flutter中常见的网络请求有三种分别是 1,Dart 原生的网络请求 HttpClient. 2,第三方网络请求 http 3,以及 Flutter 中的 Dio. 本文主要比较细致的讲解上述网络 ...

  5. 12、Flutter - 项目实战 - 仿微信(六)聊天页面

    Flutter - 项目实战 - 仿微信(六)聊天页面 接上篇:11.Flutter - 项目实战 - 仿微信(五)通讯录 详细代码参见Demo Demo地址 -> wechat_demo 其他 ...

  6. Taro多端开发实现原理与项目实战(二)

    Taro多端开发实现原理与项目实战(二) 多端电商平台项目概述及开发准备 学习了前面的基础知识和进阶后是否跃跃欲试?我们准备了一个电商平台的项目来和大家一起实践使用 Taro 开发电商平台. 项目概述 ...

  7. iOS项目中的网络请求和上下拉刷新封装

    代码地址如下: http://www.demodashi.com/demo/11621.html 一.运行效果图 现在的项目中不可避免的要使用到网络请求,而且几乎所有软件都有上下拉刷新功能,所以我在此 ...

  8. Qt项目实战之网络电子白板-安晓辉-专题视频课程

    Qt项目实战之网络电子白板-10082人已学习 课程介绍         本课程使用Qt技术实现了网络电子白板,支持直线.矩形.椭圆.三角形.涂鸦等图形元素.本课程实现的电子白板,可以在多人之间共享, ...

  9. Flutter开发之HTTP网络请求:Http库(27)

    第三方库 http实现get,post网络请求. http库文档地址:https://pub.dev/packages/http#-installing-tab- 添加依赖库 Add this to ...

最新文章

  1. [基础|理论|实验]linux下的文件读写
  2. 数据库系统原理(第二章关系数据库 )
  3. springcloud config服务端配置(二)
  4. 计算机办公软件的使用技巧,实用的Word小技巧集锦(1)办公软件知识 -电脑资料
  5. 【Spring Boot】Spring Boot之整合RabbitMQ并实现消息的发送和接收
  6. flask从表单中的提交中获取数据(不使用第三方库)
  7. maya阿诺德渲染失败_[转载]Arnold 渲染器for maya 安装不了的解决办法
  8. 【小程序源码】uni-app云开发的网盘助手抓取网盘资源
  9. 开发者应用盈利最佳渠道-KeyMob移动广告聚合平台
  10. 计算机为啥启用不了网络发现,win7系统“网络发现”功能启用不了的解决方法...
  11. 写给自己的Java程序员学习路线图
  12. Android .9图片使用报错...报错:AAPT: error: file failed to compile.
  13. 如何快速熟练html,明日之后熟练度提升攻略 如何快速提升熟练度
  14. 外包企业邮箱服务怎么选?哪家外包企业邮箱服务好?
  15. 前端网页兼容电脑笔记本分辨率放大125%、150%的办法
  16. 多传感器融合技术(基本概念、前融合和后融合的区别)
  17. 阿里CEO张勇首次披露当年入职阿里原因:太太是淘宝粉丝
  18. NC15446 wyh的物品
  19. 有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔破。给你2个鸡蛋,设计方案找出N,并且保证在最坏情况下, 最小化鸡蛋下落的次数。
  20. html5缓存的功能,HTML 5新特性:Web应用缓存实现离线浏览

热门文章

  1. Django+vue-echarts可视化显示
  2. add p4 多个文件_p4 选择性上传file
  3. 咚咚咚!你期待的RecBole三期来了!
  4. 计算机领域核心期刊 国际,计算机国际核心期刊.doc
  5. python(pygame)开发一个超简易版消灭病毒
  6. 2022-3-30 Leetcode 1133.最大唯一数
  7. python并列条件_if函数如何多个条件并列
  8. WinForm 关于任务栏图标进程结束后图标无法自动清除的问题!
  9. Spring 事务传播属性有那么难吗?看这一篇就够了!
  10. Microsoft Sql Server Studio 2019 没有配置管理器解决办法