作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263
邮箱 :291148484@163.com
本文地址:https://blog.csdn.net/qq_28550263/article/details/135604801
【简介】:本文总结了数十道 Flutter/Dart 中常见的问题,所有的问题提供了答案提示。
Flutter 是由 Google 开发的开源 UI 框架,用于构建能够在移动、Web 和桌面上进行本地编译的应用程序,使用单一代码库。
Dart 是用于构建 Flutter 应用程序的编程语言。它是一种强类型、面向对象的语言,支持 JIT(即时编译)和 AOT(提前编译)两种编译方式。
Flutter 提供了许多优势,包括用于快速开发周期的热重载、丰富的可自定义 UI 小部件集、高性能以及能够从单一代码库构建多平台应用的能力。
小部件树是 Flutter 应用程序的小部件的分层结构,定义了应用程序的用户界面。它表示应用的可视组件,如按钮、文本字段和容器。
在 Flutter 中,一切都是小部件,包括应用程序本身。小部件是 Flutter 应用程序的构建块,它们可以组合和嵌套以创建复杂的用户界面。甚至应用程序的布局和样式都是通过组合和配置小部件实现的。
Flutter 提供了两种类型的小部件:无状态小部件和有状态小部件。
main()
函数是 Flutter 应用程序的入口点。它负责执行应用程序并初始化 Flutter 框架。
小部件状态指的是有状态小部件维护的内部状态。它表示特定于该小部件的数据和配置,可以根据用户交互或其他因素随时间而变化。
setState()
方法用于通知 Flutter 小部件的状态已更改并需要重新构建。它触发小部件的 build()
方法,使其能够在 UI 中反映更新后的状态。
注:也可称作Flutter 组件
Flutter 小部件是 Flutter 应用程序中用户界面的构建块。它们定义了应用程序 UI 元素的结构和外观,如按钮、文本字段、图像和容器。
BuildContext 参数表示小部件的当前上下文。它提供对小部件树的访问,并用于执行诸如访问继承的小部件、导航小部件层次结构和构建新小部件等任务。
在 Flutter 中,键(keys)用于唯一标识和区分小部件。它们帮助 Flutter 在小部件树中添加、删除或重新排列小部件时进行识别。
Flutter 使用三树架构进行渲染:小部件树、元素树和渲染树。小部件树表示 UI,元素树连接小部件树和渲染树,而渲染树处理布局和绘制。
在 Flutter 中,通过组合较小、较简单的小部件或扩展基本小部件类来创建自定义小部件。
在 Dart 中,扩展方法允许您向现有类添加新功能。例如,您可以向 String 类添加一个方法,将字符串解析为整数。
JIT(即时编译)允许更快的开发周期和热重载。AOT(提前编译)导致更快的启动时间和更好的生产部署性能。
Flutter 使用 Dart,因为它易于学习,具有强大的类型系统,支持 JIT 和 AOT 编译,并具有出色的工具支持。Dart 还具有强大的标准库和良好的异步编程支持。
在 Flutter 中,可以通过扩展 CustomPainter 类并实现 paint() 和 shouldRepaint() 方法来进行自定义绘制。
在 Flutter 中,可以使用 ThemeData 类进行主题设置。您可以将 ThemeData 对象提供给 MaterialApp 小部件,以将主题应用于整个应用程序。
Dart 中的 this 关键字引用类的当前实例。在构造函数中,this 可以用于使用传递的参数初始化实例变量。
位置可选参数在方括号 [] 内定义,可以按定义顺序传递给函数。命名可选参数在花括号 {} 内定义,可以通过指定名称的方式以任意顺序传递给函数。
Dart 中的扩展允许您向现有类添加新功能。通过使用 extension 关键字后跟名称以及 on 关键字和要扩展的类的名称来定义扩展。
不能,在 Dart 中,扩展方法是静态解析的,因此不能在动态类型上调用。
在 Dart 中,可以通过在扩展声明中添加类型参数来定义泛型扩展。然后,可以在扩展的方法中使用这个类型参数。
在 Dart 中,通过添加 factory 关键字来创建工厂构造函数。这些构造函数可以返回子类型甚至 null。
Dart 有两个空感知运算符:?? 和 ??=。?? 运算符如果第一个操作数非空,则返回第一个操作数;否则,返回第二个操作数。??= 运算符仅在变量当前为 null 时才将值赋给变量。
Dart允许使用 ?. 运算符进行条件属性或方法访问。如果 ?. 前面的对象为 null,则整个表达式将计算为 null。
在 Dart 中,可以使用 get 和 set 关键字创建自定义的 getter 和 setter。它们允许在获取或设置属性时添加额外的逻辑,例如验证或转换。
Dart 中的 Future 表示在将来某个时间点可用的潜在值(或错误)。它用于异步编程。
Dart 中的 async 和 await 关键字用于简化异步编程。它们允许您以更线性的方式编写异步代码,类似于同步代码。
在 Dart 中的良好风格实践包括使用 camelCase 命名变量和函数,使用 UpperCamelCase 命名类型,并使用 lower_case_with_underscores 命名包。Dart 还建议使用 2 个空格进行缩进。
Dart 提供了 dart:convert 库中的 jsonDecode 和 jsonEncode 函数,用于解析和生成 JSON。
Dart 中的扩展运算符(…)提供了一种简洁的方式将多个元素插入到集合中。Dart 还有一个空感知扩展运算符(…?),仅在集合非空时插入元素。
Flutter 的稳定版本于2019年12月发布。
无状态小部件是不可变的,它们的状态仅创建一次。有状态小部件具有可变状态,可以随时间变化,并可以多次更新和重建。
有状态小部件的生命周期包括方法如 createState()、initState()、didChangeDependencies()、build()、didUpdateWidget()、deactivate() 和 dispose()。
Flutter 项目中的 pubspec.yml 文件用于管理项目的依赖关系和元数据。
在 Flutter 中,调试模式用于调试应用程序,而发布模式保留了一些调试功能,并用于分析应用程序的性能。
当您希望小部件的大小尽可能大,以适应其父级时,可以使用值 ‘double.infinity’。
您可以通过使用 Platform.isIOS 或 Theme.of(context).platform 检查当前平台,以在 Flutter 中创建特定于平台的小部件。
在 Flutter 中,可以使用 http 包进行 HTTP 请求。http.get() 方法可用于发起 GET 请求。
在 Flutter 中,可以通过使用十六进制颜色代码创建 Color 对象,例如 Color(0xFF000000)。
在 Flutter 中,可以通过使用 TextEditingController 并设置初始值来创建带有初始值的 TextField。
在 Flutter 中,可以通过使用 FocusScope.of(context).unfocus() 以编程方式关闭键盘。
在 Flutter 中,可以通过显式设置 ListView 的高度、在 ListView 上使用 shrinkWrap 属性,或者用 Expanded 封装 ListView 来将 ListView 添加到 Column 中。
在 Flutter 中,文本带有黄色双下划线通常表示缺少主题实例作为父级。
是的,在 Flutter 中可以使用 flutter_svg 插件将 SVG 文件用作图像。
在 Flutter 中,可以使用 Image.network() 构造函数从网络加载图像。
在 Flutter 中,通过创建 ScrollController 并将其分配给 ScrollView,然后调用控制器上的 animateTo 方法来实现编程方式的滚动。
在 Flutter 中,可以使用 WillPopScope 小部件来重写返回按钮的操作。
在 Flutter 中,‘ListView’ 小部件上的 ‘reverse’ 属性用于以相反的顺序显示列表中的项目。
在 Flutter 中,可以使用 MediaQuery.of(context).size 根据屏幕大小设置小部件的大小。
在 Flutter 项目中,更新所有插件的命令是 flutter pub upgrade。
在 Flutter 中,树抖动(Tree Shaking)是一个过程,它在构建过程中从应用中删除未使用的代码,从而使应用的大小更小。
是的,从技术上讲,Flutter 是原生的,因为它编译为原生的 ARM 和 x86 等库。然而,它提供了一个用于构建 UI 的高级框架,与传统的原生开发不同。