云平台网站叫什么,wordpress添加description和keywords方法,外包加工网外放加工活,代运营合同Flutter是Google推出的一种移动应用开发框架#xff0c;它允许开发者使用一套代码库同时开发Android和iOS应用。以下是对Flutter知识点的详细总结#xff1a;
一、Flutter概述
特点#xff1a;跨平台、高保真、高性能。 编程语言#xff1a;使用Dart语言编写。 设计理念它允许开发者使用一套代码库同时开发Android和iOS应用。以下是对Flutter知识点的详细总结
一、Flutter概述
特点跨平台、高保真、高性能。 编程语言使用Dart语言编写。 设计理念“everything is a widget”。不论是按钮、字体、颜色、布局甚至是整个应用程序都是由一个个Widget组合而成。
二、Flutter架构
框架层直接面向开发者的最顶层提供了Material和Cupertino两种视觉风格的组件库分别实现了Material和iOS设计规范。 引擎层主要由C编写负责实现Flutter的高性能渲染和底层逻辑。包括Skia图形引擎用于高效地渲染应用中的图形和动画和Dart运行时提供内存管理、垃圾回收等关键服务。 嵌入层负责将Flutter引擎嵌入到不同的平台如Android和iOS中。
三、Dart语言基础
变量类型Dart中的所有变量都是引用类型未初始化的变量的值是null。包括Object所有类的基类、dynamic运行时确定类型等。
编译模式
JITJust In Time即时编译在程序执行期间实时编译为本地机器码开发阶段采用此模式避免每次改动都进行编译节省开发时间。AOTAhead Of Time静态编译程序运行前编译成本地机器码发布时采用此模式生成高效的ARM代码以保证应用性能。垃圾回收采用多生代无锁垃圾回收器专门为UI框架中常见的大量Widgets对象创建和销毁进行优化。
四、Widget基础
概念Widget是Flutter中用于描述用户界面和交互的模块。一个Widget可以定义结构元素如按钮或菜单和样式元素如字体或颜色模式。
类型
StatelessWidget无状态Widget一旦构建后不能改变当属性改变时会重新构建。StatefulWidget可以在生命周期内改变状态的Widget实现一个StatefulWidget至少需要两个类一个StatefulWidget类和一个State类。
常用Widget
Flutter 提供了丰富的内置 widgets开发者可以利用这些 widgets 来快速构建用户界面。以下是一些常用的 Flutter widgets
1. 布局类 Widgets
Container用于包含和装饰其他 widgets可以设置边距、填充、背景颜色、边界等。Row 和 Column用于水平Row或垂直Column排列子 widgets。Stack允许子 widgets 堆叠在一起并可以使用 Positioned 控制子 widget 的位置。Flex 和 Expanded用于在 Row 或 Column 中分配剩余空间给子 widgets。ListView创建一个可滚动的列表支持动态加载更多内容。GridView创建一个二维的网格布局类似于表格。
2. 文本与输入
Text显示一段文本可以自定义字体大小、颜色、样式等。TextField 和 TextFormField用于接收用户输入的文本框TextFormField 还提供了表单验证功能。RichText用于显示带有格式化的文本比如不同部分有不同的样式。
3. 按钮
ElevatedButton带阴影效果的按钮通常有颜色填充。TextButton无填充颜色的按钮通常用于次要操作。OutlinedButton具有边框但无填充颜色的按钮。IconButton用于显示图标按钮。FloatingActionButton浮动在屏幕上的圆形按钮常用于强调主要动作。
4. 图片与图标
Image用于显示图片资源支持本地图片和网络图片。Icon显示 Material Design 图标。
5. 卡片与对话框
Card提供一种将相关内容分组的方式带有圆角和阴影效果。Dialog用于显示模态对话框如 AlertDialog 和 SimpleDialog。BottomSheet从屏幕底部滑出的面板适用于菜单或选项选择。
6. 表单
Form用于创建表单结合 TextFormField 实现输入验证。Checkbox 和 Radio用于多选和单选。
7. 进度指示器
CircularProgressIndicator 和 LinearProgressIndicator用于显示加载状态分别是环形和线性进度条。
8. 交互式 Widgets
GestureDetector添加手势识别到任何 widget 上如点击、长按、拖拽等。Dismissible实现可以被滑动移除的 widget如删除列表项。Draggable 和 DraggableTarget用于创建可拖拽的元素和目标区域。
9. 动画
AnimatedOpacity、AnimatedContainer 等用于创建简单的动画效果。AnimationController 和 Tween用于更复杂的动画控制。
10. 导航与路由
Navigator管理页面之间的导航。PageRouteBuilder 和 MaterialPageRoute用于创建自定义和默认的页面切换动画。
11. InheritedWidget
特性
高效传递数据支持跨级访问性能优化只有当 InheritedWidget 的状态改变时依赖它的子 widget 才会重新构建而不是整个 widget 树。提供了依赖监听机制当数据变化时可以通知依赖该数据的子Widget进行更新。
常见使用场景
管理全局或共享数据如用户身份认证状态、设置数据等。依赖注入向Widget子树提供依赖项如服务或存储库。配置数据将配置数据如本地化或主题样式传播到所有相关Widget。Flutter 的 Theme 就是基于 InheritedWidget 实现的。
注意事项
不要滥用 InheritedWidget因为它们可以使数据流变得不清晰。确保 updateShouldNotify 的实现是正确的以避免不必要的 widget 重建。考虑使用更高级的状态管理解决方案如 Provider、Riverpod 或 Bloc这些方案可以提供更好的可维护性和扩展性。
除以上介绍之外Flutter 还提供了丰富的widgets每个 widget 都有自己的特性和用途。Flutter 的文档中还提供了详细的 API 参考帮助开发者了解如何正确地使用这些 widgets。
状态管理
Provider一种简单易用的状态管理方案。RiverpodProvider 的增强版本提供了更好的依赖注入支持。Google推荐使用 – 类型Riverpod提供了多种类型的Provider如Provider、StateProvider、StateNotifierProvider等。 – 监听在需要读取Provider状态的组件中使用ConsumerWidget或Consumer来监听Provider的变化。Bloc业务逻辑组件模式适合处理复杂的状态流。Redux基于 Flux 架构适用于大型应用。
性能优化
UI渲染优化
扁平化 widget 树减少不必要的重叠元素确保界面简洁明了以减少构建和布局的时间。使用 ListView.builder 和 GridView.builder当列表项数量较多时使用 builder 方法按需创建子 widgets而不是一次性创建所有子 widgets。合理缓存利用Flutter的缓存机制避免重复创建和加载资源。例如使用CachedNetworkImage来缓存网络图片。使用IndexedStack当有多个子组件需要同时显示时可以考虑使用IndexedStack它只会绘制当前显示的子组件而不是所有子组件从而减少了不必要的绘制。使用Offstage来隐藏组件如果有一些不经常显示或只在特定条件下显示的组件可以考虑使用Offstage来将它们从渲染树中移除以减少布局和绘制开销。
Widget 优化
shouldRebuild使用shouldRebuild方法来确定一个小部件是否需要重建以减少不必要的重建次数。使用const使用const关键字来创建不需要根据父组件重新构建的小部件。使用StatelessWidget无状态小部件的构建速度比有状态小部件快因为它们不需要维护任何可变状态。避免在build方法中执行耗时操作如需要重新计算数据或创建新的对象可以在initState中进行以避免不必要的重建。
其他优化
图片优化优化资源文件大小使用 FadeInImage(渐显效果) 或 CachedNetworkImage(缓存)动画优化AnimatedBuilder、TickerMode。代码拆分使用代码拆分来减小应用的大小并提高性能。
五、Flutter程序结构
一个基本的Flutter程序通常包括以下部分
main函数应用的入口点。MyApp类StatelessWidget返回一个包含应用主题、路由和主页的MaterialApp Widget。主页类可为StatelessWidget或StatefulWidget包含应用主体部分。其他Widget类自定义的Widget可被主页类或其他Widget类使用。
六、Flutter其他知识点
屏幕适配可以采用flutter_screen_util插件进行屏幕适配通过传入设计尺寸在调用时使用screen_util转换后的宽和高进行长度和高度的赋值。原生集成Flutter提供了与原生平台深度集成的能力。开发者可以使用特定的平台通道与原生代码交互访问设备特有的功能。热重载Flutter引入了热重载功能允许开发者在应用运行时动态更改代码并立即看到结果极大地提高了开发效率。