[轉]Flutter 全局状态管理之 Provider 初探

https://juejin.im/post/5d8f324ee51d45781e0f5dca 一、什么是全局状态管理 当我们在使用 Flutter 进行应用开发时,可能需要不同的页面共享应用或者说变量的状态,当这个状态发生改变时,所有依赖这个状态的 ui 都会随之发生改变。在同一个页面中还好说,直接通过 setState 就可以达到目的,要是不同的页面呢,或者当应用变得非常复杂,页面非常多的时候,这个时候全局状态管理就显得非常重要了。 在 Flutter 中,状态管理可以有如下几种方式: 1、setState flutter 中最简单使 ui 根据状态发生改变的方式。 2、 InheritedWidget & InheritedModel InheritedWidget 和 InheritedModel 是 flutter 原生提供的状态管理解决方案。 当InheritedWidget发生变化时,它的子树中所有依赖了它的数据的Widget都会进行rebuild,这使得开发者省去了维护数据同步逻辑的麻烦。 3、Provider & Scoped Model Provider 与 Scoped Model 都属于第三方库,两者使用起来差不多,其中 Provider 是 Google I/O 2019 大会上官方推荐的状态管理方式。 4、Redux 在 Redux 状态管理中,所有的状态都储存在Store里,Flutter 中的 Widget 会根据这个 Store 去渲染视图,而状态的改变也是通过 Reduex 里面的 action 来进行的。 5、BLoC / Rx BLoC的全称是 业务逻辑组件(Business Logic Component)。就是用reactive programming方式构建应用,一个由流构成的完全异步的世界。 BLoc 可以看作是 Flutter 中的异步事件总线,当然在除了 BLoc 外,Flutter 中有专门的响应式编程库,就是RxDart,RxDart是基于ReactiveX标准API的Dart版本实现,由Dart标准库中Stream扩展而成。 ...

2019-12-10 · 1 min · 75 words · Me

[轉][Flutter]还在大量使用TextEditingController?试试这种解决方案

当用户输入大量信息时,通常会采用TextField列表来解决,这时如果需要对每个TextField进行控制或监听就需要大量的TextEditingController。 这里提供另一种思路,解决大量使用TextEditingController和信息整理困难的问题。 定义一个Map: Map _userInfo; 这个Map作用于所有需要收集用户信息的地方。 使用TextField时这样操作: ////邮箱 TextField( controller: TextEditingController(text: _userInfo['account']), onChanged: (value) { _userInfo['account'] = value; }, ), ////昵称 TextField( controller: TextEditingController(text: _userInfo['nickname']), onChanged: (value) { _userInfo['nickname'] = value; }, ), ////密码 TextField( controller: TextEditingController(text: _userInfo['password']), onChanged: (value) { _userInfo['password'] = value; }, ), 这里全程未单独定义TextEditingController,只使用TextField默认的方法进行控制,且可以获得以下好处: 1.节省大量代码,简化业务逻辑。 2.用户输入完成时即得到一个包含所有信息的Map。 3.输入的内容不会丢失,只要这个Map不被销毁,下次进入(或返回)这个页面时所有内容都在,不用要求用户再次输入,提升用户体验。 第一次发文章,如有问题,欢迎指正。 作者:xSILENCEx 链接:https://juejin.im/post/5d649bfce51d453b1d648314 来源:掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2019-10-31 · 1 min · 55 words · Me

dart null list

減少null判斷情況 https://stackoverflow.com/questions/51036758/flutter-the-method-map-was-called-on-null https://juejin.im/post/5c6d38b1f265da2dcc7feb69 https://cloud.tencent.com/developer/article/1370380 ?? => if null https://blog.csdn.net/ffa_ijj/article/details/85051156 return qres?.map((value) { LinkedHashMap result = json.decode(value["jsonitem"]); return result; })?.first ?? new LinkedHashMap(); 這個判斷方式有個問題,當查詢回來為[],不是null情況下,在.first會出錯,因為 “No element"會出錯,但.toList()會正確,故改回 if (qres == null || qres.isEmpty) return new Member(); // 待確定是否出錯 var resmap = qres.first; return new Member.fromJson(json.decode(resmap["jsonitem"]));

2019-10-24 · 1 min · 43 words · Me

dart json serialisation dson

https://github.com/drails-dart/dart-serialise https://github.com/parnham/dart-serialise https://github.com/dart-league/dson

2019-10-23 · 1 min · 3 words · Me

json to dart flutter

https://javiercbk.github.io/json_to_dart/ https://ashamp.github.io/jsonToDartModel/

2019-10-18 · 1 min · 2 words · Me