本文主要介绍flutter中的开发技巧2

30 silder

image-20210724215501245

29chip

image-20210724215549320

28 aspect ratio

image-20210724215635974

27placehold 占位符

image-20210724215726217

26flutter localizations

image-20210724215824244

25flutter toast

image-20210724220020961

24

pubspec assist 插件

23

better comments 插件

22

future.delayed

image-20210724220319028

21 theme mode

20 trans form

image-20210724220436351

19gridview

image-20210724220556306

18 spacer

17 divide

16 url lanucher

image-20210724220706608

15 image_picker

image-20210724220732753

image-20210724221004889

14

material.io https://material.io/

https://material.io/

13

image-20210724221239881

12

image-20210724221311502

11 image preview

10 listwheel scrollview

image-20210724221348671

9

pageview

8mouseregin

image-20210724221845509

7opacity

6

image-20210724221932915

5

image-20210724222012729

4

image-20210724222213327

3

image-20210724222239142

2 image-20210724222330515

image-20210724222304026

image-20210724222321284

1 image-20210724222354152

image-20210724222445154

最佳实践是一个领域中可接受的专业标准,对于任何编程语言来说,提高代码质量、可读性、可维护性和健壮性都非常重要。

让我们探索一些设计和开发 Flutter 应用程序的最佳实践。

命名约定:

类、枚举、类型定义和扩展名应该在 UpperCamelCase.

库、包、目录和源文件名应该在 snake_case(lowercase_with_underscores).

变量、常量、参数和命名参数应该在 lowerCamelCase.

对文件使用相对导入 lib

当同时使用相对导入和绝对导入时,当从两种不同的方式导入同一个类时,可能会造成混淆。为了避免这种情况,我们应该在lib/文件夹中使用相对路径。

指定类成员的类型

当成员的值类型已知时,总是指定成员的类型。var尽可能避免使用。

避免使用as,使用is运算符

通常,as如果无法进行强制转换,则cast 运算符会抛出异常。为了避免抛出异常,可以使用is.

使用if条件代替条件表达式

很多时候我们需要根据Row和Column中的一些条件来渲染一个widget。如果条件表达式在任何情况下都返回 null,那么我们应该只使用 if 条件。

使用?? ?.操作符

更喜欢使用 ?? (如果为空)和?。(空感知)运算符而不是条件表达式中的空检查。

使用传播集合

当现有项目已经存储在另一个集合中时,展开集合语法会导致代码更简单。

使用级联运算符

如果我们想对同一个对象执行一系列操作,那么我们应该使用 Cascades(..) 运算符。

使用原始字符串

可以使用原始字符串来避免仅转义反斜杠和美元。

不要显式初始化变量 null

在 Dart 中,当未指定变量的值时,变量会自动初始化为 null,因此添加 null 是多余且不需要的。

使用表达式函数体

对于仅包含一个表达式的函数,您可以使用表达式函数。的=>(箭头)符号用于表达功能。

避免print()来电

print()debugPrint()两个用于在控制台登录。如果您使用print()并且一次输出太多,那么Android有时会丢弃一些日志行。为避免这种情况,请使用debugPrint().如果您记录的数据有太多数据,则使用dart:developer log().这允许您在日志输出中包含更多的粒度和信息。

避免对非私有的本地标识符使用前导下划线。

Dart 在标识符中使用前导下划线 () 将成员和顶级声明标记为私有。没有概念。private 使用前导下划线 () 作为局部变量、参数、局部函数或库前缀。

使用插值组合字符串

使用插值使字符串更干净、更短,而不是使用长链+来构建字符串。

当撕下可以做的时候不要创建一个 lambda

如果我们有一个函数调用一个方法,该方法的参数与传递给它的参数相同,则不需要手动将调用包装在 lambda 中。

使用异步/等待过度使用期货回调

异步代码难以阅读和调试。该async/await语法提高了可读性。

将小部件拆分为子小部件。

setState()在状态上调用时,所有后代小部件都将重建。因此,将小部件拆分为小部件,以便setState()调用实际需要更改 UI 的子树部分。

使用 ListView.builder 获取长列表

在处理无限列表或非常大的列表时,通常建议使用ListView构建器以提高性能。

默认ListView构造函数一次构建整个列表。ListView.builder创建一个惰性列表,当用户向下滚动列表时,Flutter 会按需构建小部件。

在小部件中使用 Const

当 setState 调用时小部件不会改变,我们应该将其定义为常量。它将阻止小部件重建,从而提高性能。

我希望这能给你一些见解,使你的 Flutter 代码更具可读性,同时也提高你的应用程序的性能。快乐编码!