Flutter 学习笔记

给定代码块优化代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Recipe {
int cows;
int trampolines;

Recipe(this.cows, this.trampolines);

int makeMilkshake() {
return cows + trampolines;
}
}

methodName(parameters) => statement;
// ---------------------------------
int get milkshake(cows, trampolines) => crows+trampolines

给定代码块,解决文本超出屏幕

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class MyWidget extends StatelessWidget {
final personNextToMe = 'That reminds me about the time when I was ten and our neighbor, her name was Mrs. Mable, and she said...';

@override
Widget build(BuildContext context) {
return Row(children: [
Icon(Icons.airline_seat_legroom_reduced),
Text(personNextToMe),
Icon(Icons.airline_seat_legroom_reduced),
]);
}
}
//--------------------------------
Expanded(
child: Text(
personNextToMe,
),
),

注意 使用Expandedwidget来包裹Textwidget,以告知Row忽略Textwidget的固有宽度,并且根据行中剩余的空间来为其分配宽度。在RowColumn或者Flexwidget中使用超过一个Expandend
widget时,会均匀的分配剩余空间。当有多个Expandwidget时,可以使用flex属性对优先级进行排序。假如你还使用了Textwidget的overflow属性,那就太棒了。

实现tag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Row(children: [
Chip(label: Text('I')),
Chip(label: Text('really')),
Chip(label: Text('really')),
Chip(label: Text('really')),
Chip(label: Text('really')),
Chip(label: Text('really')),
Chip(label: Text('really')),
Chip(label: Text('need')),
Chip(label: Text('a')),
Chip(label: Text('job')),
]);
}
}

只需要将Row替换为Wrap

私有化变量

1
2
3
4
5
6
7
// 全局变量
String cheese = 'cheddar';
class Pizza {
String cheese = 'cheddar';
// 私有化变量
String _cheese = 'cheddar';
}

hot reloadhot restart的区别是什么?

hot reload在立刻更新UI的同时保持程序的状态,相比之下hot restart花费更长一点的时间,因为它会在更新UI之前将程序的状态置为初始状态。两者都比完全重新启动(full
restart)要快,这需要重新编译应用程序。当有重大的更改时,你需要停止并重新运行该程序,在极少数的情况下,你可能还需要在模拟器或者真机上删除应用程序,然后重新安装。

StatelessWidgetStatefulWidget`的区别是什么?

StatelessWidget是一个不可变的类,充当UI布局中某些部分的蓝图,当某个组件在显示期间不需要改变,或者说没有状态(State),你可以使用它。 StatefulWidget也是不可变的,但是它和一个State对象关联在一起,该对象允许你每次通过调用setState()时,使用新值重建这个widget,当UI可以动态改变时使用StatefulWidget`
。假如State变得越来越复杂,或者一些状态存在于两个不同的widget中,则应该考虑更复杂的状态管理方案

WidgetsAppMaterialApp`的区别什么?

WidgetsApp提供了基础的导航能力,和widgets`库一起,它包含了很多Flutter使用的基础widget。

MaterialApp和与之相应的的material库,是在WidgetsApp和与之相应的widgets库之上构建的一层,它遵循了Material设计风格
,可以再任何平台或者设备上为应用程序提供统一的外观,material库提供了更多的Widget。

在你的项目中,并不一定要使用MaterialApp,也可以使用CupertinoApp来构建iOS风格的应用程序,这可以使iOS用户感觉更亲切,甚至你也可以自己定义一些widget。

可以嵌套使用Scaffold吗,为什么或者为什么不?

当然可以,你绝对可以嵌套使用Scaffold,这体现Flutter的美,你可以控制整个UI。Scaffold也是个widget,因此你可以把它放在任何widget可以放置的地方。通过嵌套Scaffold,你可以对抽屉(drawers)、卡片(snack bars)
、底页(bottom sheets)进行分层。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 nathanwriting@126.com

文章标题:Flutter 学习笔记

字数:876

本文作者:Nathaniel

发布时间:2022-11-20, 15:28:59

最后更新:2023-11-06, 23:32:26

原始链接:http://example.com/2022/11/20/flutter-interview/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏