https://blog.csdn.net/u011272795/article/details/83010974 https://segmentfault.com/a/1190000014219340…
什么是Future? Future表示在接下来的某个时间的值或错误,借助Future我们可以在Flutter实现异步操作.它类似于ES6中的Promise,提供then和catchError的链式调用. Future是dart:async包中的一个类,使用它时需要导入dart:async包,Future有两种状态: pending - 执行中: completed - 执行结束,分两种情况要么成功要么失败: Future的常见用法? 使用future.then获取future的值与捕获futur…
注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 展示异步任务状态 当有一个Future(异步)任务需要展示给用户时,可以使用FutureBuilder控件来完成,比如向服务器发送数据成功时显示成功提示: var _future = Future.delayed(Duration(seconds: 3), () { return '老孟,一个有态度的程序员'; }); FutureBuilder( fut…
github地址:https://github.com/GainLoss/flutter-app 一.基础 flutter是谷歌公司开发的开源免费的UI框架,用dart语言实现的,可以实现跨平台,一套代码可以在Android Ios Windows Max Linux系统运行:使用120fps,基于GPU渲染: 1.Widget 在flutter中一切都是Widget(和react里面一切都是组件好像),文字 图片 甚至路由都是Widget; flutter的底层架构(在flutter官网上有)…
15.首页_商品推荐模块编写 商品推荐,我们做成可以横向滚动的 分析: 上面是标题,下面是ListView,里面是一个Column, column分三层,第一是图片,第二是价格,第三是市场价格 小细节就是上面有个间距 解决一个之前留下的坑.超过屏幕出现黄色的警示黄条 解决方法加加一个SingleChildScrollView,让它单独滚动 最终效果: stlessW快捷键生成商品推荐的代码 因为是列表,所以接收List参数recommentList..然后传递给构造函数,这样我们就接收了一个li…
18.首页_火爆专区后台接口调试 楼层结束之后有个火爆专区.到地图有个上拉加载的效果 lib/config/service_url.dart 首先找到我们的接口配置文件,增加接口的配置 lib/service/service_method.dart 复制原来的放进行修改 最终定义完的方法: home_page.dart测试接口 我们在initState方法里面调用接口返回数据,并print打印出我们的数据 放在这里调用一下: 运行 查看测试效果 提取接口的方法 这两个方法几乎是一样的 ,所以我们…
42.详细页_UI主页面架构搭建 详细分成六大部分拆分开 body里面用FutureBuilder异步加载. FutureBuilder里面的furure属性这里用一个方法,必须返回的也是future 把我们的方法修改为返回的类型为Future.我们直接返回的是一个字符串.因为我们里面使用了provide,所以其实这里我们随便返回个字符串就没那么重要 了. 我们在页面上默认放上一个Text的widget显示传过来的id 运行页面: 点击左上角的返回可以返回到上一页 最终代码: import 'p…
详细分成六大部分拆分开 body里面用FutureBuilder异步加载. FutureBuilder里面的furure属性这里用一个方法,必须返回的也是future 把我们的方法修改为返回的类型为Future.我们直接返回的是一个字符串.因为我们里面使用了provide,所以其实这里我们随便返回个字符串就没那么重要 了. 我们在页面上默认放上一个Text的widget显示传过来的id 运行页面: 点击左上角的返回可以返回到上一页 最终代码: import 'package:flutter/ma…
一,概述 RefreshIndicator是Flutter基于Material设计语言内置的控件,集合了下拉手势.加载指示器和刷新操作一体,可玩性比FutureBuilder差了一大截,不过大家也用过Material设计语言的其他控件,视觉效果也不赖的. 要实现拉刷新列表的功能仅仅依靠RefreshIndicator还不行,我们还需要ScrollController对ListView的移动偏移量进行监控. 二,两个重要的组件 RefreshIndicator 构造函数 /** * 下拉刷新组件…
很多博客,论坛都支持markdown语法,flutter也有支持markdown语法的插件flutter_markdown 安装依赖 dependencies: flutter: sdk: flutter flutter_markdown: ^0.3.4 保存后,编辑器自动下载依赖,或者执行 flutter pub get 创建markdown文件,放开pubspec.yaml 静态文件路径 assets: - assets/markdown.md 加载本地markdown.md文件. main…
老孟导读:Flutter 中获取文件路径,我们都知道使用 path_provider,但对其目录对含义不是很清楚,此文介绍 Android.iOS 系统的文件目录,不同场景下建议使用的目录. 不同的平台对应的文件系统是不同的,比如文件路径,因此 Flutter 中获取文件路径需要原生支持,原生端通过 MethodChannel 传递文件路径到 Flutter,如果没有特殊的需求,推荐大家使用 Google 官方维护的插件 path_provider. pub 地址:https://pub.flu…
Flutter-使用网络请求的页面搭建流程.State生命周期.一些组件的应用 使用网络请求的页面搭建流程 ​ 在开发APP时,我们常常会遇到如下场景:进入一个页面后,要先进行网络调用,然后使用调用返回的数据进行页面渲染. ​ 这种页面搭建流程大致为:调用网络请求,获得json格式的数据-解析获得的数据为Dart类 - 将Dart数据传回UI.在返回数据前,可以在页面先放置一个加载动画:获得数据后,使用数据进行进行页面重绘. 网络请求 ​ Flutter的网络请求常常使用的库有http ,dio…
用setState改变状态 class CpwsList extends StatefulWidget { _CpwsListState createState() => _CpwsListState(); } class _CpwsListState extends State<CpwsList> { ; List<Map> hotList = []; GlobalKey<RefreshFooterState> _footerKey = new GlobalKe…
Flutter的FutureBuilder列表示例 import 'package:flutter/material.dart'; import '../service/service_method.dart'; class CartPage extends StatelessWidget { @override Widget build(BuildContext context) { ', 'isDebug':'aa'}; return Scaffold( body: FutureBuilde…
import 'package:flutter/material.dart';import 'dart:convert';import 'package:http/http.dart' as http;import 'dart:ui';import 'dart:async'; void main()=>runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context…
https://github.com/flutter/flutter/issues/18828 https://blog.csdn.net/u011272795/article/details/83010974  <<<<<<<=============== https://medium.com/saugo360/flutter-my-futurebuilder-keeps-firing-6e774830bc2 Flutter: My FutureBuilder…
有状态widget:StatefulWidget和无状态widget:StatelessWidget 前者不需要实现Widget build(BuildContext context). 具体的选择取决于widget是否需要管理一些状态 在Dart语言中使用下划线前缀标识符,会强制其变成私有的. Icons.favorite Icons类里面有很多默认图标 isOdd 是否奇数 2.isOdd -> false 1.isOdd -> true pushSaved “”开头的自动转成私有(方法和…
10.首页_FlutterSwiper轮播效果制作 博客地址: https://jspang.com/post/FlutterShop.html#toc-5c2 flutter_swiper https://github.com/best-flutter/flutter_swiper pubspec.yaml内配置插件的引用.配置好以后进行保存.最好开启***工具 防止下载很慢的情况 这里还是和视频里面用一个版本的吧 1.1.4因为我在本机设置为1.1.6的时候,保存了文件没有自动去下载包文件.…
11.首页_屏幕适配方案讲解 国人写的屏幕适配插件: https://github.com/OpenFlutter/flutter_screenutil 最新版本是0.5.1 在pubspec.yaml文件内配置包: 引入这个包: import 'package:flutter_screenutil/flutter_screenutil.dart'; 初始化我们的设计尺寸:这里为什么尺寸是750*1334呢,因为技术胖的老板当时用的是iphone6 为了老板审图方便,就用的这个尺寸.所以我们这里…
12.首页_GridView类别导航制作 首页导航区的制作 外面用一个gridview来写.里面单独提出来 新建导航组件 还是在home_page.dart里面写代码 新建一个静态的组件: 快捷键写组件的时候选择哪个stlessW的,这样把构造函数也帮你初始化好了. 定义一个内部的方法 ,返回的是一个column,内部方法名开头用下划线开头. 定义方法 _gridViewItemUI接收两个参数一个是上下文对象,一个item相当于我们每一个导航项 我们导航项点一下肯定要有页面的变化,或者是路由的…
13.首页_广告Banner组件制作 主要是做这个小广告条. 其实就是读取一个图片做一个widget放到这里 使用stlessW快速生成 定义一个变量存放图片的url地址: 这样我们的广告条就写完了 这个组件我们需要准备下数据 预览效果 最终代码 import 'package:flutter/material.dart'; import '../service/service_method.dart'; import 'package:flutter_swiper/flutter_swiper…
14.首页_url_launcher一键拨打店长电话 首页拨打电话的功能. 接收连个值,一个是店长的头像,一个是电话号码, 然后开始写我们的build方法.点击图片的时候要有一个拨打电话的动作.我们要接收一个单击的事件.这里就可以用我们InkWell()来完成 这样我们的店长模块基本就写完了. 准备下数据,看下UI的效果 从json数据中获取图片和电话.调用我们的店长电话widget展示出来 展示效果 拨打电话模块 需要用到一个插件 插件的地址: https://github.com/flutt…
16.补充_保持页面状态 修正一个地方: 设置了item的高度为380 横向列表为380.最终build的高度也增加了50为430. 增加了上面的高度以后,下面那个横线划掉的价格可以显示出来了. 但是还是有超出的问题. 保持首页页面状态 每次点击底部的tab标签.再点击首页,首页的数据就会重新加载. 这里就用到了混入,在页面上进行混入:with AutomaticKeepAliveClientMixin 混入之后必须主要三点: 第一,添加混入 第二:重写wantKeepAlive方法,返回为tr…
17.首页_楼层组件的编写技巧 博客地址: https://jspang.com/post/FlutterShop.html#toc-b50 楼层的效果: 标题 stlessW快速生成: 接收一个String类型的参数 标题的各个边上有内边距我们先设置一下 这样我们的标题组件就写完了 楼层商品内容 然后再学些每个楼层的商品.接收一个List数组 里面的每个子项拆分成item,这里我们先写个内部方法,接收一个Map类型的goods的商品子项 这样我们的子组件就写完了 商品我们分成两行,我们先写第一…
19.首页_火爆专区界面布局编写 看一下图片的效果 一个标题栏,下面是多行两列.里面可以用column布局,外面用Warp流式布局 有得小伙伴说这里可以用网格布局,网格布局的话还是有一定的效率问题.这里就用我们的流布局,还是很顺畅的 填一下上节课的坑,设置可选参数 这里用花括号括起来就是个可先的参数了. 修改成可选参数后呢,我们在调用方法的时候就报错了. 我们只要修改为key/value的形式就可以了 上拉刷新有几种方式 火爆专区主要的代码,这是之前的,现在要删掉了 //火爆专区 定义为动态的类…
20.首页_火爆专区上拉加载效果 上拉加载的插件比较都.没有一个一枝独秀的 可以自定义酷炫的header和footer 一直在更新 推荐使用这个插件: https://github.com/xuelongqy/flutter_easyrefresh 添加依赖 首先添加引用我们的插件: pubspec.yaml.用最新的版本 页面上添加引用 import 'package:flutter_easyrefresh/easy_refresh.dart'; 上拉加载我们是要做到我们的主方法里面的.只有做…
43.详细页_补充首页跳转到详细页 首页轮播点击到详细页 修改我们轮播这里的代码:SwiperDiy这个类这里的代码 return InkWell( onTap: (){ Application.router.navigateTo(context, '/detail?id=${swiperDateList[index]['goodsId']}'); }, child: Image.network("${swiperDateList[index]['image']}",fit: BoxF…
44.详细页_首屏自定义Widget编写 把详细页的图片.标题.编号和价格形成一个单独的widget去引用 详情页的顶部单独封装个插件 在pages下面新建detials_page的文件件并在里面新建页面details_top_area.dart文件 添加引用,然后声明一个静态的类 返回顶部图片的方法 商品名称方法: 商品编号方法 开始写Build 最外层是一个Provide,里面model类传递的是商品详情的类 在主页内引用子组件 首先引入我们写的组件的页面文件,然后调用我们写的组件的类就可以…
45.详细页_说明区域UI编写 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(Bui…
46.详细页_自定义TabBar Widget 主要实现详情和评论的tab provide定义变量 自己做一个tab然后用provide去控制 定义两个变量来判断是左侧选中了还是右侧选中了.并定义一个方法来接受参数,修改是左侧还是右侧选中的状态值 新建组件页面 details_page/details_tabbar.dart 然后定义方法_myTabbarLeft 左侧tab的点击事件,调用provide内的change方法传入是left 把_myTabbarLeft方法复制一个改成_myTab…