首页
学习
活动
专区
圈层
工具
发布

Flutter 的状态管理方案:setState、BLoC、ValueNotifier、Provider

为简单起见,此流程由三种可能的状态组成: 图上的状态可以由如下状态机表示,其中包括加载状态和认证状态: 当登录的请求正在进行中,我们会禁用登录按钮并展示进度指示器。...这里使用了 Provider 来获取 AuthService 对象,并将它用于登录。 札记 AuthService 是一个对 Firebase Authentication 的简单封装。...身份验证状态由一个祖先 widget 处理,该 widget 使用 onAuthStateChanged 来决定展示哪个页面。我在前一篇文章中介绍了这一点。...通过 StreamBuilder 来检查加载状态,并使用它来设置登录按钮。...( stream: authService.onAuthStateChanged, builder: (context, snapshot) {

6.1K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Flutter 实践 MVVM

    Model好说,普通对象嘛,顶多处理一下序列化的问题。 在Flutter中,一切UI皆Widget,那么View层也很明确了,就是Widget部分。...而在Flutter中,我们可以借助Stream&Sink来实现数据变更的通知,StreamBuilder来做View层的绑定。...StreamBuilder 上述的Stream和Sink还只是纯数据层面的,要想和UI相关的Widget关连起来,还有需要StreamBuilder的帮助。...,在stream参数给上我们ViewModel的output stream,也就是说当ViewModel中的Sink对象被add数据后,StreamBuilder会监听到这个变化,然后重新通过builder...需要注意的是,这里虽然只用了一个StreamBuilder,但是不代表一个页面只能用一个StreamBuilder,每个想要单独监听某个Stream的widget外面都是wrap一个StreamBuilder

    10.9K70

    Flutter 构建完整应用手册-联网 顶

    路线 使用http包发出网络请求 将响应转换为自定义Dart对象 用Flutter获取并显示数据 1.使用http包发出网络请求 http包提供了从互联网获取数据的最简单方法。...3.用Flutter获取并显示数据 为了获取数据并将其显示在屏幕上,我们可以使用FutureBuilder小部件! Flutter附带FutureBuilder部件,可以轻松处理异步数据源。...我们如何听取消息并显示它们? 在这个例子中,我们将使用StreamBuilder部件来侦听新消息和一个Text 部件来显示它们。...new StreamBuilder( stream: widget.channel.stream, builder: (context, snapshot) { return new Text...StreamBuilder部件将连接到Stream,并在每次接收到事件时使用给定的builder函数请求Flutter重建!

    3.5K20

    Flutter Bloc 官方文档(BlocBuilder翻译)

    什么是Bloc,为什么用Flutter Bloc 就不介绍了,直入主题。 ?...Bloc Widgets BlocBuilder BlocBuilder 是一个Flutter widget,它需要一个bloc和一个builder函数,BlocBuilder用响应 的新状态构建一个widget...,BlocBuilder和StreamBuilder十分相似,但是它有一个更简单的API来减少所需的样板代码数量,builder函数可能会被多次调用,并且应该是一个纯函数,它返回一个小部件来响应状态。...如果你想去做一些响应状态改变的事情,比如导航,显示dialog等等,你可以看一下BlocListener 如果BlocBuilder 省略参数bloc参数,BlocBuilder会自动找到用BlocProvider...如果buildWhen返回true,那么将使用state调用builder,widget将重新构建。如果buildWhen返回false,则不会调用带有状态的builder,也不会发生任何重建。

    1.5K10

    Flutter 开发实战与前景展望 - RTC Dev Meetup

    稳定性:Flutter 中大部分异常是不会引起应用崩溃 ,更多会在 Debug 上体现为红色错误堆栈,Release 上 UI 异常等等。...,通过 TextEditingController 可以快速设置值的显示,这是为什么呢?...2.3、StreamBuilder StreamBuilder 一般用于通过 Stream 异步构建页面的,如下图所示,通过点击之后,绿色方框的文字会变成 addNewxxx,因为 Stream 进行了...image 3、四棵树 Flutter 中主要有 Widget 、Element 、RenderObject 、Layer 四棵树,它们的作用是: Widget :就是我们平常写的控件,Flutter...image 这样的时候必定会代码画面堆栈问题,因为这个显示脱离了 Flutter 的渲染树,通过出现动画肯定会不一致。

    2.4K20

    Flutter BLoC 异步通信、BlocBuilder的基本使用、BlocProvider的初探

    组件的结合使用 | StreamBuilder 实现的倒计时进度圆圈 EventBus (不考虑使用) Bloc BLoC 异步通信、BlocBuilder的基本使用、BlocProvider的初探...在Flutter项目开发中,一般的项目中,会有网络请求的代码与Widget构建的UI界面写一起,随着业务的不断积累,代码量也越来越大,维护的复杂度也会随着增加。...>( create: (context) => CounterBloc(""), child: MaterialApp( ///Android应用程序中任务栏中显示应用的名称...home 首页面,是自定义的一个 Widget 页面,在这里使用 Scaffold 来构建页面主体,然后初始化了一个 计时器Timer,代码如下: import 'package:flutter/cupertino.dart...的作用一样,用来消费事件结果,就是显示数据结果,它的构建构建如下: class BlocBuilder, S> extends BlocBuilderBase<C,

    4K11

    Flutter完整开发实战详解(十一、全面深入理解Stream)

    而在 Flutter 中,整个 Stream 设计外部暴露的对象主要如下图,主要包含了 StreamController 、Sink 、Stream 、StreamSubscription 四个对象。...2、Stream 四天王 从上面我们知道,在 Flutter 中使用 Stream 主要有四个对象,那么这四个对象是如何“勾搭”在一起的?他们各自又担任什么责职呢?...image Flutter中 Stream 、StreamController 、StreamSink 和 StreamSubscription 都是 abstract 对象,他们对外抽象出接口,而内部实现对象大部分都是...二、StreamBuilder 如下代码所示, 在 Flutter 中通过 StreamBuilder 构建 Widget ,只需提供一个 Stream 实例即可,其中 AsyncSnapshot 对象为数据快照...,而这也是为什么 rxdart 可以在 StreamBuilder 中直接使用的原因。

    5.1K41

    Flutter | 事件循环,Future

    Future 对象,可以使用 then 添加回调函数 await :后面是一个 Future,表示等待改异步任务的完成,异步完成之后才会继续往下走,await 必须出现在 async 的内部 void...widiget,例如 future 在等待的时候显示加载框,完成之后显示内容等。...需要注意的是使用完成之后要进行关闭操作,否则就会泄漏资源 并且 flutter 会一直警告, 上面的这种方式只能有一个监听,如果添加多个监听则就会保存,那么如何添加多个监听呢,可以使用广播的方式,如下...(_summary); }); }); _summary = widget.afterConnected(_summary); } } 复制代码 StreamBuilder...做的小游戏 在日常开发中,StreamBuilder 还是挺实用的,这次我们用 StreamBuilder 来做一个小游戏,先看效果: 从上面的动画来看,可以将其分为三个部分,第一个部分则是底部的键盘

    4.9K10

    Flutter 移动端架构实践:Widget-Async-Bloc-Service

    原文链接:https://medium.com/coding-with-flutter/widget-async-bloc-service-a-practical-architecture-for-flutter-apps...闲言少叙,接下来我很荣幸地介绍: Widget-Async-BLoC-Service 模式 简称:WABS (这很酷,会因为它包含我的缩写 :D)。 这种架构模式有四种变体: 1....Widget-Bloc-Service [1240] 2. Widget-Service [1240] 3. Widget-Bloc [1240] 4....以下是我用Flutter和Firebase实现的身份验证流程的示例: [image] 观察到的结果: 当触发了登录事件,我们禁用了所有按钮并显示CircularProgressIndicator,我们将加载状态设置为...当Flutter重建窗口控件树时,处理嵌套的StreamBuilders会导致调试过程变得很棘手。 这些因素都会让代码有额外的开销。

    20.8K20

    Flutter你竟是这样的布局

    ---- 当学习Flutter的人问你,为什么宽度为100的某些小部件在显示的时候,宽度不为100像素时,你的默认答案是告诉他们将小部件放在Center内,对吗? 不要这样做。...如果这样做,他们会一次又一次地回来,询问为什么某些FittedBox不起作用,为什么Column溢出了,或者IntrinsicWidth应该做什么。...如果不了解此规则,就无法真正理解Flutter的布局,因此Flutter开发人员应尽早学习。 更详细地: Widget从其父级获得自己的约束。...考虑到红色Container的大小与其孩子的大小相同,它也是30×30,所以红色是不可见的,因为绿色的Container会完全覆盖红色Container。 Example 8 ?..., ] ) 由于Row不会对其子级施加任何约束,因此子Widget很有可能太大而无法容纳Row的可用宽度。 在这种情况下,就像UnconstrainedBox一样,Row会显示溢出警告。

    3.1K20
    领券