上篇文章中,我们只看到了 dio 的使用方式,但并未跟应用关联起来,所以这一篇将 dio 网络请求与应用界面结合起来,当然这也是为以后的实战作基础准备,基础打牢,我们才能飞速前进. 1.案例说明 我们还是作去“大保健”选择服务对象这个例子,不过这次我们使用按钮和动态组件来实现.具体业务逻辑是这样的: 我们制作一个文本框,用于输入需要什么样的美女为我们服务 然后点击按钮,相当于去后端请求数据 后端返回数据后,根据你的需要美女就会走进房间 一图顶千言 2.生成动态组件 可以使用stful的快捷方式,…
上篇文章中,我们只看到了 dio 的使用方式,但并未跟应用关联起来,所以这一篇将 dio 网络请求与应用界面结合起来,当然这也是为以后的实战作基础准备,基础打牢,我们才能飞速前进. 1.案例说明 我们还是作去“大保健”选择服务对象这个例子,不过这次我们使用按钮和动态组件来实现.具体业务逻辑是这样的: 我们制作一个文本框,用于输入需要什么样的美女为我们服务 然后点击按钮,相当于去后端请求数据 后端返回数据后,根据你的需要美女就会走进房间 一图顶千言 2.生成动态组件 可以使用stful的快捷方式,…
博客地址: https://jspang.com/post/FlutterShop.html#toc-0ee 编写页面代码 创建动态组件HomePage,原来的代码是静态的我们这里就去掉就可以了. 然后使用column布局来写我们的代码 Column就是我们的列布局 TextField只有设置了controller,才能获取到文本框的值.首先我们放的是一个TextField文本框 我们在上面声明typeController.它的类型是:TextEditingController showText…
07.Dio基础_POST请求的使用 越界问题解决 容器越界的问题,越界是因为键盘弹起的问题.如果键盘不弹起是不会越界 我们加一个滚动组件就可以解决. 这是技术胖视频中出现的越界的截图效果 这是我自己电脑上开发的效果,没有出现越界的问题: 我们在这里外层套一个组件:SingleChildScrollView 把原来我们的container组件放在SingleChildScrollView里面 视频中的问题就解决了. easy-mock https://easy-mock.com/login po…
在很多时候,后端为了安全都会有一些请求头的限制,只有请求头对了,才能正确返回数据.这虽然限制了一些人恶意请求数据,但是对于我们聪明的程序员来说,就是形同虚设.这篇文章就以极客时间 为例,讲一下通过伪造请求头,来获取极客时间首页主要数据.(不保证接口和安全措施一直可用哦,赶快练习吧) 查看极客时间的数据端口 如果你是一个前端,这套流程可能已经烂熟于心,先找出掘金的一个端口,来进行分析. 首先在浏览器端打开掘金网站(我用的是chrome浏览器::https://time.geekbang.org/,…
这篇开始我们学习Dart第三方Http请求库dio,这是国人开源的一个项目,也是国内用的最广泛的Dart Http请求库. 1.dio介绍和引入 dio是一个强大的Dart Http请求库,支持Restful API. FormData.拦截器.请求取消.Cookie管理.文件上传/下载.超时和自定义适配器等. 我相信很多人都已经接触或者了解dio了,但是还是需要把它拿出来单独讲解一下,因为在Flutter编程工作中,每天都需要和它打交道,本套教程也会大量的使用dio库来进行接口的调用和数据交换…
05.Dio基础_引入和简单的Get请求 博客地址: https://jspang.com/post/FlutterShop.html#toc-4c7 第三方的http请求库叫做Dio https://github.com/flutterchina/dio pubspec.yaml 这两者的区别: dependencies是生产环境中 dev_dependencies:开发环境,上线的是时候不会被打包进去. 添加我们的Dio 这样就表示下载好了 在我们的首页去发送一个请求. home_page.…
08.Dio基础_伪造请求头获取数据 上节课代码清楚 重新编写HomePage这个动态组件 开始写请求的方法 请求数据 .但是由于我们没加请求的头 所以没有返回数据 451就是表示请求错错误 创建请求头 注意这里是Request Headers这块才是请求头 把请求头全部复制过来. 然后给这些数据 都加上单引号,做成mapper的形式. 在VScode里面按住鼠标的alt键就可以多选 把这些字母的最前面和最后面都加上光标,然后鼠标再输入单引号 这样单引号就都加上了. 把这些参数都放在了单引号里面…
在很多时候,后端为了安全都会有一些请求头的限制,只有请求头对了,才能正确返回数据.这虽然限制了一些人恶意请求数据,但是对于我们聪明的程序员来说,就是形同虚设.这篇文章就以极客时间 为例,讲一下通过伪造请求头,来获取极客时间首页主要数据.(不保证接口和安全措施一直可用哦,赶快练习吧) 查看极客时间的数据端口 如果你是一个前端,这套流程可能已经烂熟于心,先找出掘金的一个端口,来进行分析. 首先在浏览器端打开掘金网站(我用的是chrome浏览器::https://time.geekbang.org/,…
这节学习一下POST请求的使用,其实POST和Get请求都是在工作中最重要的两种请求.比如我们要传递一组表单数据过去,这时候用Get请求就是不太合适的,使用POST比较好. SingleChildScrollView Widget 在学习新内容之前,先来填一个昨天的坑,其实昨天的代码在最后演示是,是由一个异常的,异常内容如下: I/flutter ( 6889): verticalDirection: down I/flutter ( 6889): ◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢…
这篇开始我们学习Dart第三方Http请求库dio,这是国人开源的一个项目,也是国内用的最广泛的Dart Http请求库. 1.dio介绍和引入 dio是一个强大的Dart Http请求库,支持Restful API. FormData.拦截器.请求取消.Cookie管理.文件上传/下载.超时和自定义适配器等. 我相信很多人都已经接触或者了解dio了,但是还是需要把它拿出来单独讲解一下,因为在Flutter编程工作中,每天都需要和它打交道,本套教程也会大量的使用dio库来进行接口的调用和数据交换…
我们需要为我们的项目构建一个基础的页面布局,布局文件统一存放在 resources/views/layouts 文件夹中,布局涉及的文件如下: app.blade.php —— 主要布局文件,项目的所有页面都将继承于此页面: _header.blade.php —— 布局的头部区域文件,负责顶部导航栏区块: _footer.blade.php —— 布局的尾部区域文件,负责底部导航区 我们先创建主要布局文件:resources/views/layouts/app.blade.php: $ mkd…
1.项目相关截图 2.项目知识点梳理图 Dio2.0: Dio是一个强大的 Dart Http 请求库,支持 Restful API.FormData.拦截器.请求取消等操作. Swiper: Swiper 滑动插件的使用,使用 Swiper 插件图片的切换效果. 路由Fluro:Flutter 的路由机制很繁琐,如果是小型应用还勉强,但是真实开发我们都会使用企业级的路由机制,让路由清晰可用.视频中也会使用 Fluro 进行路由配置,Fluro 也是目前最好的企业级Flutter路由. 屏幕适配…
关于界面切换以及底栏的实现可参考之前写的一篇文章:Flutter实 ViewPager.bottomNavigationBar界面切换 1.新建4个基本dart文件 在pages目录下,我们新建下面四个dart文件. home_page.dart :商城首页UI页面,首页相关的UI我们都会放到这个文件里. category_page.dart: 商城分类UI页面,这个页面会有复杂的动态组件切换. cart_page.dart:商城购物车UI页面,这个页面会包括购物车的全套功能. member_p…
1.cupertino_IOS风格介绍 在Flutter里是有两种内置风格的: material风格: Material Design 是由 Google 推出的全新设计语言,这种设计语言是为手机.平板电脑.台式机和其他平台提供一致,更广泛的外观和感觉.我喜欢称它为纸墨设计.Material Design 风格是一种非常有质感的设计风格,并会提供一些默认的交互动画. cupertino风格:即 IOS 风格组件,它重现了很多经典的有 IOS 特性的交互和界面风格,让适用于 IOS 的人感觉亲切和…
Flutter | 状态管理特别篇 —— Provide:https://juejin.im/post/5c6d4b52f265da2dc675b407?tdsourcetag=s_pcqq_aiomsg 点击左侧的导航右侧的导航发生变化,这属于两个widget.这两个widget之间进行通讯.用setstate的形式,耦合性太强 状态管理有这么几种方案 这里我们用Provide,谷歌自己推出的 https://github.com/google/flutter-provide 开始写测试例子…
1.URL接口管理文件建立 第一步需要在建立一个URL的管理文件,因为课程的接口会一直进行变化,所以单独拿出来会非常方便变化接口.当然工作中的URL管理也是需要这样配置的,以为我们会不断的切换好几个服务器,组内服务器,测试服务器,内测服务器,公测上线服务器. 所以说一定要单独把这个文件配置出来,这也算是一个开发经验之谈吧. 在/lib/config文件夹下,建立一个service_url.dart文件,然后写入如下代码: #此端口针对于正版用户开放,可自行fiddle获取. const serv…
1.引入flutter_swiper插件 flutter最强大的siwiper, 多种布局方式,无限轮播,Android和IOS双端适配. 好牛X得介绍,一般敢用“最”的一般都是神级大神,看到这个介绍后我也是吃了碗贾玲代言的方便面(一桶半),压了压我激动的心情. Flutter_swiper的GitHub地址:https://github.com/best-flutter/flutter_swiper 了解flutter_swiper后,需要作的第一件事就再pubspec.yaml文件中引入这个…
1.创建项目 采用AndroidStudio构建本项目,FIle>New>New Flutter Project… 创建后的项目如下图所示: 我们着重需要注意一下几个文件夹,其他的暂时不用理会 文件夹 作用 android android平台相关代码 ios ios平台相关代码 lib flutter相关代码,我们主要编写的代码就在这个文件夹 pubspec.yaml 配置文件,一般存放一些第三方的依赖. 2.编写入口文件 flutter 中的入口文件为 main.dart,该文件位于 lib…
cart_page.dart 清空原来写的持久化的代码; 添加对应的引用,stless生成一个静态的类.建议始终静态的类,防止重复渲染 纠正个错误,上图的CartPage单词拼错了,这里改过来防止后面,运行app的时候报错 build内我们使用scaffold脚手架 创建Future方法获取购物车持久化数据 取数据需要等待时间的,所以之类使用异步async,我们的provide需要context上下文,所以方法内我们要接收一个context对象的参数 在body里面我们要调用Future的方法就…
根据json数据生成模型类 {"goodsId":"2171c20d77c340729d5d7ebc2039c08d","goodsName":"五粮液52°500ml","count":1,"price":830.0,"images":"http://images.baixingliangfan.cn/shopGoodsImg/20181229/20181…
新加provide的cart.dart页面 引入三个文件.开始写provide类.provide需要用with 进行混入 从prefs里面获取到数据,判断有没有数据,如果有数据就返转正List<Map> 判断是否有重复的记录,如果有重复记录就数量+1,如果数据不存在就加入到tempList数组中,最后把tempList数据转成字符串,进行持久化 清空购物车的方法 清空的方法比较简单,注意这里是异步的 给两个方法最后都加上通知 provide的全局依赖 在main.dart中 details_b…
当app关掉了.再进去的时候 ,购物车的内容还是存在. sqflite提供这个来操作SQLite数据库 flutter提供三种持久化的工具 今天要学的就是 shared_preferences 还有一种持久化就是:file,用流的形式去读取还是有些慢 安装shared_preferences 插件地址: https://github.com/flutter/plugins/tree/master/packages/shared_preferences 提前开好了VPN 日本节点下载还是比较快的…
一直悬浮在最下面的 Stack层叠组件.里面用Row 可以横向布局 开始 stack如果想定位就要用position去定位. 修改return返回值的这个地方 大R刷新查看效果,可以看到固定的在左下角的测试的字样.一直固定在底部 做底部的固定栏widget 新建页面:在文件夹details_page/details_bottom.dart 在布局用三个InkWell 因为都是可以点击的 加入购物车的InkWell 立即购买,复制购物车的InkWell改改就可以了. 引用这个组件 效果展示 最终代…
增加切换的效果,我们主要是修改这个地方 这样我们的评论的内容就显示出来了 最终代码 details_web.dart import 'package:flutter/material.dart'; import 'package:provide/provide.dart'; import '../../provide/details_info.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'p…
详情里面是hemlt和图片组成的,但是flutter是不支持html的所以需要其他插件 flutter webview plugin:这个不太好用 flutter_html:用这个插件 先解决之前一个bug 在加载详情页面的时候,控制台输出报错了 需要用的到异步的处理 provide/details_info.dart类的方法:getGoodsInfo html插件 https://github.com/Sub6Resources/flutter_html 视频和iframe标签目前不支持 添加…
主要实现详情和评论的tab provide定义变量 自己做一个tab然后用provide去控制 定义两个变量来判断是左侧选中了还是右侧选中了.并定义一个方法来接受参数,修改是左侧还是右侧选中的状态值 新建组件页面 details_page/details_tabbar.dart 然后定义方法_myTabbarLeft 左侧tab的点击事件,调用provide内的change方法传入是left 把_myTabbarLeft方法复制一个改成_myTabbarRight然后把参数什么的也修改为右侧的…
pages/details_page/details_expain.dart 详情页面引用组件 效果展示: 最终代码: import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; class DetailsExplain extends StatelessWidget { @override Widget build(BuildContext contex…
把详细页的图片.标题.编号和价格形成一个单独的widget去引用 详情页的顶部单独封装个插件 在pages下面新建detials_page的文件件并在里面新建页面details_top_area.dart文件 添加引用,然后声明一个静态的类 返回顶部图片的方法 商品名称方法: 商品编号方法 开始写Build 最外层是一个Provide,里面model类传递的是商品详情的类 在主页内引用子组件 首先引入我们写的组件的页面文件,然后调用我们写的组件的类就可以了. DetailsTopArea 效果展…
首页轮播点击到详细页 修改我们轮播这里的代码:SwiperDiy这个类这里的代码 return InkWell( onTap: (){ Application.router.navigateTo(context, '/detail?id=${swiperDateList[index]['goodsId']}'); }, child: Image.network("${swiperDateList[index]['image']}",fit: BoxFit.fill,), ); 展示效果…