- 尽量使用 const 关键字
// 不推荐
IconButton(
onPressed: () {
Navigator.of(context).pushNamed("/login");
},
icon: Icon(Icons.portrait),
),
// 推荐
IconButton(
onPressed: () {
Navigator.of(context).pushNamed("/login");
},
icon: const Icon(Icons.portrait),
),
若构建的widget不会发生变化,我们就应该用const关键子修饰它。这样的好处是可以避免每次刷新的时候重新构建,进而提高性能。
- 主题(themeing)
theme: ThemeData(
fontFamily: "Lato",
primarySwatch: Colors.blue,
colorScheme: ColorScheme(
(...)
background: Colors.grey,
brightness: Brightness.light,
primary: Colors.blue,
secondary: Colors.yellow,
(...)
),
visualDensity: VisualDensity.adaptivePlatformDensity,
),
通过定义 Theme,我们可以更好地复用颜色和字体样式,这会让整个 app 看起来风格更一致,而且控制代码也比较集中,便于修改和阅读。
- 使用spead 操作符(...)展开集合
// 不推荐
var y = [4, 5, 6]
var x = [1, 2]
x.addAll(y);
// 推荐
var y = [4, 5, 6]
var x = [1, 2,...y]
有时候我们会遇到合并2个集合的操作,使用spead 操作符可以让我们的代码更简洁更优雅
- 在Build方法中,将大的widget分割成几个小点的widget
class MyWidget extends StatelessWidget {
...
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) {
return MyExpandedTile(
key: k,
);
},
);
}
...
}
class MyExpandedTile extends StatelessWidget {
...
@override
Widget build(BuildContext context) {
return const Center(
child: Text("title")
)
}
}
- 在声明成员变量的时候指定类型
// 不推荐
var item = 12;
final dog = Dog()
const timeOut = 2000
// 推荐
int item = 12;
final Dog dog = Dog()
String name = "john";
const int timeOut = 1000
成员变量的类型在声明的时候应该尽量指定其类型,避免处处使用var关键子,尽管这样很方便。不过,在函数内部声明中间变量的情况是可以尽量使用var。
- 定义函数的时候尽量使用表达式形式
// 不推荐
get width {
return right - left;
}
Widget buildToolbar() {
return const Center(
child: Text("tool")
)
}
// 推荐
get width => right - left;
Widget buildToolbar() => const Center(child: Text("tool"))
如果你的函数定义很简单,能够在一行写下的话,就尽量使用表达式形式,这样你的代码会很短很简洁!
- 使用
??=
操作符
比如
abc ?? = 5
这条语句的意思是:如果abc为null的话就赋值5,是不是比 if...else...
看上去更好?
(会不断更新的!)
以上是作者在实际编码中经常采用的一些实践,这里分享给大家希望大家喜欢。