(1)late String name;(2)String name;
InheritedWidget是一种无界面的组件,它提供了自顶向下为子组件共享数据的功能。
都是用于根据异步操作的状态动态构建UI的Widget。
Provider设计目标是简化状态管理,通过继承自InheritedWidget的ChangeNotifierProvider、ValueListenableProvider等类,将状态以树状结构向下传递给子组件。强调简单易用。
Bloc基于响应式编程模式,强调将业务逻辑(BLoC)与 UI 完全解耦。通过事件流(Event)驱动状态变更(State),并利用 Stream 和 BlocProvider 实现状态的分发。虽然结构相对复杂,但非常适合大型项目和复杂的业务逻辑,因为它鼓励模块化和逻辑复用。
Redux:遵循严格的单向数据流和不可变状态原则。它包括 Actions、Reducers 和 Store,形成一个中心化的状态管理机制。Redux 提供清晰的调试工具和高度可预测的行为,适用于大型团队协作和有严格状态管理需求的应用。
ScopedModel:较早的 Flutter 状态管理库,同样基于InheritedWidget。它通过定义 Model 类来封装状态,并通过 ScopedModel 和 ScopedModelDescendant Widget 分发和访问状态。相比于 Provider,ScopedModel 的功能较为基础,且对不同类型状态的处理不够灵活。
Provider:依赖于ChangeNotifier类,状态对象通过调用notifyListeners()方法触发状态更新通知。也可以使用ValueNotifier、Stream等其他可观察对象作为状态源。
Bloc:基于Stream,状态更新通过处理事件流并在其中产生新的状态来实现。开发者编写事件处理器(event handler),将事件转换为新的状态。
Redux:状态更新通过Reducer函数完成。当 Actions 发出后,Store 调用相应的 Reducer 函数处理这些动作,并返回一个新的状态对象。新旧状态的差异会触发 UI 更新。
ScopedModel:状态更新直接修改 Model 对象的属性,然后调用notifyListeners()方法通知依赖组件。
main函数是dart的程序运行入口函数runApp函数是渲染根widget树的函数
将更新的源代码文件注入到正在运行的 Dart 虚拟机(VM)来实现热重载。在虚拟机使用新的字段和函数更新类之后, Flutter 框架会自动重新构建 widget 树,以便可以快速查看更改的效果。补充:热重载 会将代码更改转入 VM,重建 widget 树并保持应用的状态,整个过程不会重新运行 main() 或者 initState()。热重启 会将代码更改转入 VM,重启 Flutter 应用,不保留应用状态。热重载流程:扫描更新、增量编译、推送更新、代码合并、widget重建。Flutter web 目前仅支持热重启,不支持热重载。
await的出现会把await之前和之后的代码分为两部分,await并不是程序运行到这里就阻塞了,而是立刻结束当前函数的执行并返回一个Future,函数内剩余代码通过调度异步执行。async是和await搭配使用的,await只在async函数中出现。在async 函数里可以没有await或者有多个await。
Provider主要利用了InheritedWidget机制,结合Listenable监听,在数据变化时触发创建InheritedWidget,引起InheritedElement的update,从而让关联的子孙更新。在Provider中封装了InheritedWidget,持有了model,view通过provider获取到model,然后操作model。当model发生变化时,通过notify通知Provider更新view。
Selector类和Consumer类似,只是对build调用Widget方法时提供更精细的控制。支持部分状态数据更新,才会更新该组件。
Getx 是一个轻量级的状态管理库,它是一个框架级别的解决方案,旨在提高性能和开发效率。它提供了多种便利功能,例如依赖注入、路由管理、持久化存储等,使得开发过程更加高效,结构更加清晰。
预加载、队列
问题1:APP 页面偶现卡顿,上下滑动不流畅,影响体验问题2:devtools查看内存,内存占用高优化方向:降内存、降刷新
高内存定位:通过 Xcode 性能调试窗口可知,iOS 端智家 APP 的运行内存 1.36G 左右;通过 Android Studio 的 profile 窗口可知,Android 端智家 APP 的运行内存在 1.6G 左右;图片过载检测:debug模式下, Flutter Inspector,点击 Highlight Oversized Images。查看过载检测日志,很多图片存在过载,需内存优化。红色日志会打印某一张图的图片尺寸。内存检测:profile构建模式下,在devtools上查看RSS(resident set size)内存占用情况,启动起来高达480M左右,在滑动列表时,列表会白屏,内存瞬间达到712M。performance工具查看UI线程绘制时间最高达40ms。
方案:
降低页面刷新:局部 UI 刷新 导致重绘;大量逻辑计算驱动页面刷新定位:Flutter Inspector - Highlight Repaints,UI 组件周边会出现彩色边框,UI 重绘时彩色边框会动态变色。方案:
极光推送、支持iOS
使用RSA非对称加密,服务器生成公钥和私钥,客户端拿到公钥对接口参数加密,然后发起请求,服务器使用私钥对加密报文进行解密,获得原始请求报文。服务器处理请求,并将响应数据进行加密返回给客户端,客户端使用相同的公钥进行解密,获取结果。
图片释放不需要的对象
Google可能会对以下这几个方面进行检查。
② 权限隐私合理性审查:审查应用请求的权限,例如,一个手电筒应用若要求访问你的通讯录,这显然是不合理的。如果应用请求的权限超出其功能所必需的范围,可能会被拒审。
③ 代码安全审查:对应用程序进行分析,检查应用的源代码、二进制文件和资源文件,是否存在恶意代码、安全漏洞或其他安全风险,并进行标记。
④ 模拟应用操作行为:通过模拟操作应用的网络行为、API调用行为、日志筛选等一系列操作,提取关键信息进行标记后,与谷歌庞大的数据库进行检索匹配,以判断是否存在与已被标记的不合规产品高度相似的情况,从而判断是否存在违规行为并决定是否能够通过审核。