首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

干货 | 携程火车票Flutter最佳实践

Flutter是由谷歌开源的跨平台框架,可以快速 iOS 和 Android 构建高质量的原生用户界面。...2)错误分析 这个错误一般情况下出现在异步任务,比如一些界面请求网络数据,异步获取本地数据等,需要根据数据的状态来改变刷新Widget State。...异步任务结束页面被销毁之后,没有检查State是否还是mounted状态,继续setState()就会出现这个错误。...Provider,未判断界面状态通知界面刷新的问题 1)错误信息展示 Null check operator used on a null value; 2)错误分析 一般情况下出现这种问题是由于界面销毁后...错误分析 出现这个问题的原因在于使用Text.rich来展示多个Span组件,如果设置了最大行数,当组件超过最大行数,有别的组件未成功展示,再次点击当前widget,使它接受时间,就会导致crash

2.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

Flutter完整开发实战详解(十五、全面理解State与Provider)

在这个基础, StatefulWidget 的 State 帮我们实现了 Widget 的跨帧绘制 ,也就是每次 Widget 重绘的时候,通过 State 重新赋予 Widget 需要的绘制信息...了解这个两个概念后,我们先看下图, Flutter 中构建一个 Widget ,首先会创建出这个 Widget 的 Element ,而事实 State 实现跨帧共享,就是将 State 保存在Element...2、状态共享是使用了 InheritedProvider 这个 InheritedWidget 实现的。...、FutureProvider 、StreamProvider 等多种 Provider ,可见整个 Provider 的设计更贴近 Flutter 的原生特性,同时设计也更好理解,并且兼顾了性能等问题...Provider使用指南,更详细的 Vadaski 的 《Flutter | 状态管理指南篇——Provider》 已经写过,我就不重复写轮子了,感兴趣的可以过去看看。

3.5K21

从零开始的Flutter之旅: Provider

中对可监听的data合适的地方进行监听订阅与移除订阅,并在收到data数据改变时调用notify进行setState操作,通知widget刷新。...这一幕是不是有点似曾相识,基本都是上篇文章中提到的InheritedWidget使用的细节。...I/flutter ( 3141): notify I/flutter ( 3141): Consumer build 说明只有Consumer重新调用了build,即Text进行了刷新。...以上是一个简单的Provider-Consumer的使用Flutter对这一块有更完善的实现方案。但是经过我们这一轮分析,你再去看FlutterProvider的源码将会更加简单易懂。...如果你想了解FlutterProvider使用,你可以通过flutter_github来了解它的具体实战使用技巧。 想要查看Provider实战技巧,需要将分支切换到sample_provider

72020

vscode开发插件推荐第二节

VS Code 中,单击左侧的扩展,然后搜索扩展并单击安装。 首先,我希望您启用了 Dart 和 Flutter 扩展,如果没有,您可以从这里获取它们:Dart和Flutter。...这些提供了很多功能,通常当您开始使用 flutter ,您肯定会安装这些。 现在让我们进入扩展,看看我们能做什么奇迹。...这有助于我们避免图像路径或名称方面犯任何错误。如果您将鼠标悬停在 path ,扩展名会提供指向项目结构及其维度中的文件的链接。...” 启动命令面板(默认情况下,Ctrl+Shift+P Windows ,⌘+Shift+P Mac )并键入Material Icons,选择Activate Icon Theme。...明天给大家介绍使用androidstudio开发,插件推荐

1.7K10

Flutter 专题】46 图解新的状态管理 Provider (一)

2019 Google I/O 大会上重磅消息出了支持 flutter_web 之外,另一个便是弃用之前的状态管理 Provide,转而推荐相似的库 Provider;虽然只有一个字母之差使用方式差别却很大...绑定多条数据 我们实际开发中不会只绑定一条数据,当绑定多条数据可以采用如下两种方式:嵌套绑定和聚合绑定;两种方式效果完全相同,和尚更倾向于 MultiProvider 绑定,层级更清晰简洁...作用域 和尚在刚开始学习被作用域卡到,实际文档说的很明白,获取绑定数据的范围是绑定数据的子 Widget 中;和尚绘制了一下个人理解的基本作用域图,如有错误请多多指导; ?...问题小结 和尚在开始尝试总是遇到如下问题,Could not find the correct Provider… 测试后了解是子 Widget 中层级查找未找到对应的绑定数据;极有可能是绑定数据的...---- 和尚对 Provider 的理解还很浅显,对于其他 Provider使用还未尝试;如有错误请多多指导!

2K41

Flutter 实战】pubspec.yaml 配置文件详解

repository 这四种属性 Flutter Application 项目中默认是没有的,正常项目中也无需这几个属性,当我们开发插件并发布到 pub 需要这几个属性。...这些属性会显示 pub.dev 主页: Environment Environment 属性下添加 Flutter 和 Dart 版本控制。...的第三方库是最常用的一种方式 dependencies: path_provider: ^1.6.22 依赖本地库 如果你本地创建了一个模块,依赖本地的库: dependencies: flutter_package...)的版本为 1.6.22,而另一个依赖库也依赖这个 path_provider, 但版本为 0.5.0,那么我最终到底依赖哪个版本,此时执行 flutter pub get 则会出现如下错误: Running...: ^1.6.22 添加此属性后,所有 path_provider 插件都会使用同一个最新版本,使用此字段执行 flutter pub get 则会出现如下警告: /Users/mengqingdong

2.5K50

2021 年值得期待的 Flutter 数据流管理方案

不像 Redux React 中独占鳌头,Flutter 的数据流管理方案层出不穷,本文旨在介绍2021年值得使用Flutter 数据流管理方案,除了大家都比较熟悉的 InheritedWidget...对于声明式的 UI 而言,UI = f(state),f 是 build 方法,方案的设计首先应该考虑的是能够使得状态的消费者可以获取到对应的数据,状态更新被通知到,并可以减少不必要的刷新。...3.1 使用方法 Provider使用方式颇多,下文已经介绍的非常详细,可供大家参考 Flutter | 状态管理指南篇--Provider https://juejin.cn/post/6844903864852807694...3.4 封装通用的页面容器 业务场景中,绝大多数页面都是需要通过 api 请求获取数据,根据返回结果页面显示:加载中、正常页面、空状态、网络错误、其他错误这么几种情况。...,但它不仅继承了 provider使用宗旨,还解决了以上的三个问题,使其与 flutter 独立,是2021年最值得期待的数据管理方案了。

1.9K20

Flutter与Dart 入门

全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。...Flutter唯一要求系统提供的是canvas,以便定制的UI组件可以出现在设备的屏幕,以及访问事件(触摸,定时器等)和服务(位置、相机等)。...Flutter开发环境搭建 Flutter中文网上,关于搭建开发环境的教程已经写得比较详细了 Windows及Linux配置开发环境跟Mac类似,都是clone代码,配置环境变量,运行flutter...doctor,配置IDE这几步,具体配置过程就不赘述了,大家可以参考Flutter中文网中的教程: Windows搭建Flutter开发环境 Linux搭建开发环境 Dart编程语言快速入门...length); // null print(str2.length); // 报错 ..运算符(级联操作) 使用..调用某个对象的方法(或者成员变量),返回值是这个对象本身,这样就能方面实现链式调用

1.3K20

Flutter主题切换——让你的APP也能一键换肤

为了让你的 App 更美观,主题切换已经是一个必不可少的功能了,但如果想在传统的 Android 和 iOS 分别适配不同的主题相当繁琐。但这一切, Flutter 中都非常容易实现。...添加依赖 该案例中,我使用到了 provider 和 flustars 两个库,简单介绍一下这两个库: provider 官方推荐的状态管理库,相比其他状态管理库使用起来比较方便。...因为切换主题通常会在设置界面中出现,所以这里我用了一个ExpansionTile,这是一个可以展开的ListTile,代码如下: …………ExpansionTile( leading: Icon(Icons.color_lens...可以看出,相较于原生应用主题的适配, Flutter 中实现换肤的功能简单很多了。...最后来发布一篇预告,因为 iOS 13 和 Android 10 系统都新增了「深色模式」,文中我也提到了ThemeData的Brightness brightness属性用于表示深色还是浅色。

4.6K40

Flutter 面试知识点集锦

setter 重写 Dart 中所有的基础类型、类等都继承 Object ,默认值是 NULL, 自带 getter 和 setter ,而如果是 final 或者 const 的话,那么它只有一个...(kTabHeight + indicatorWeight); } 13、Assert(断言) assert 只检查模式有效,开发过程中,assert(unicorn == null); 只有条件为真才正常...PlatformView Flutter 中通过 PlatformView 可以嵌套原生 View 到 Flutter UI 中,这里面其实是使用了 Presentation + VirtualDisplay...+ Surface 等实现的,大致原理就是: 使用了类似副屏显示的技术,VirtualDisplay 类代表一个虚拟显示器,调用 DisplayManager 的 createVirtualDisplay...() 方法,将虚拟显示器的内容渲染在一个 Surface 控件,然后将 Surface 的 id 通知给 Dart,让 engine 绘制,在内存中找到对应的 Surface 画面内存数据,然后绘制出来

5K61

干货 | Trip.com Flutter代码质量探索

一、前言 距离Flutter正式发布已经3年了,国内各大互联网公司都有相继使用,携程今年也许多业务中使用了Flutter进行开发。...二、空安全&静态代码检测 空错误开发中出现频率较高且通常很难被发现的一类错误。现在越来越多的语言支持空安全。Dart 自2.12版本之后,也支持了稳定的空安全声明,可以在编译期就避免空错误。...3.1 Flutter单元测试的优劣 声明式UI与Provider 由于Flutter采用声明式UI的布局方式,我们可以很轻易将功能逻辑独立出来,Trip.com使用Provider来进行状态管理,将一个个业务模块抽成子...下面整理了部分Flutter Mockito的使用方式,具体的使用可在项目Git仓库查看。...ViewModel的单元测试覆盖率也已经高于90%,版本迭代过程中,也通过单元测试发现了几个错误。 以上总结了Trip.comFlutter空安全、静态代码扫描、单元测试做的一些探索。

2.1K30

Flutter 专题】100 何为 Flutter Widgets ?

ProxyWidget ProxyWidget 作为一个抽象的代理 Widget 并没有实质性的作用,只是父类和子类需要传递信息使用;主要有 InheritedWidget 和 ParentDataWidget...Bloc 或 Provider 等状态管理的朋友都了解过 InheritedWidget,主要都是对 InheritedWidget 的优化和封装;可以树结构中传递信息,当使用 InheritedWidget...RenderObjectWidget RenderObjectWidget 是真正用于绘制渲染 Widget,一切屏幕展示的 Widget 根本都离不开 RenderObjectWidget;它提供了...Widget 更新后,修改对应的 RenderObject 对象,每次更新都会调用;didUnmountRenderObject 是 RenderObject Render Tree 中删除时调用...;和尚对底层的研究还不够深入;如有错误,请多多指导!

80731

Flutter】Image 组件 ( 内存加载 Placeholder | transparent_image 透明图像插件 )

import 'package:transparent_image/transparent_image.dart'; 二、内存加载 Placeholder ---- Placeholder 是一个占位控件 , 图片还没有就绪...(),), Center( // 网络加载渐变出现 child: FadeInImage.memoryNetwork( // Placeholder...FadeInImage 组件是透明状态 , 显示进度条 , 之后变为不透明 , 进度条被覆盖 , 但是一直在后面转 ; 显示的网络图片 : ( 吸取一篇博客的教训 , 使用风景图片 ) 三、完整代码示例...Center(child: CircularProgressIndicator(),), Center( // 网络加载渐变出现...Flutter 开源示例 : https://download.csdn.net/download/han1202012/15989510 博客源码下载 : GitHub 地址 : https

84810

Flutter-从入门到项目 05:Dart语法快速掌握(下)

Flutter-从入门到项目 03: Flutter初体验 Flutter-从入门到项目 04:Dart语法快速掌握( ?...: funcFunc2() => print("=> 表达式;语法是{ return 表达式 }的简写"); 注意:只有一个表达式能够箭头符(=>)和分号(;)之间出现,语句是不可以这样使用的。...但是默认值必须是编译的常量,比如字面值。如果没有为之提供默认值,那么该参数的默认值将会是 null。...举个例子,当你创建一个接口来缓存一个对象: // 泛型可以让你能共享多个类型的一个接口和实现方式, // 它在调试模式以及静态分析的错误预警中仍然很有优势 abstract class KCObjectCache...声明一个枚举类型需要使用关键字 enum : enum LGColor { red, green, blue } 枚举中每个值都有一个 index getter 方法,它返回一个枚举声明中从

1.3K20

Flutter | Image 源码分析与优化方式

Flutter 中图片必须声明 pubspec.yaml 文件中,具体如下图所示: flutter: uses-material-design: true assets: - images..._height})'; } return completer; } 如上面代码所示,加载网络图片的时候,会调用 resizeIfNeeded 方法,在其中会判断如果使用了缓存宽高,就会返回 ResizeImage...如果使用了缓存宽高,加载图片的时候就会走到上面的 load 方法中,load 方法中会为 decode 做一层装饰,传入缓存的宽高等。...使用第三方库 flutter_cached_network_image,这个库实现了本地的图片缓存,有需要的可以了解一下。...如果本文有帮助到你的地方,不胜荣幸,如有文章中有错误和疑问,欢迎大家提出! 参考资料 Flutter图片加载优化探索 Flutter 图片加载 省略.....

2.3K31
领券