【Flutter面试题】基础篇(持续更新)

1. Dart中var与dynamic的区别:
使用var来声明变量,dart会在编译阶段自动推导出类型。而dynamic不在编译期间做类型检查而是在运行期间做类型校验。

2. const和final的区别:
const 的值在编译期确定,final 的值在运⾏时确定。

3. Dart中??与??=的区别:
两者都是dart中的操作符,??表示如果为空则返回,??=表示如果为空则赋值。例如:

    String a;
    String b = a ?? "1";
    print(b);//打印结果:1
    print(a);//打印结果:null
    a ??= "2";
    print(a);//打印结果:2

4. Flutter中的GlobalKey是什么,有什么作用?
Globalkey可以主动获取以及主动改变子控件的状态。

5. Widget、Element、RenderObject三者之间的关系:
Widget不是真正渲染UI的对象,它只是Element的一个配置描述,去告知Element应该如何去渲染,Widget 和 Element 之间是 ⼀对多的关系 。RenderObject才是实际渲染的对象,Element 持有 RenderObject 和 Widget。⼤致总结三者的关系是:配置⽂件 Widget ⽣成了 Element,⽽后创建 RenderObject 关联到 Element 的内部 renderObject 对象上,最后Flutter 通过 RenderObject 数据来布局和绘制。

6. 通过BoxDecoration和ClipRRect设置圆角有什么区别?
使用BoxDecoration设置圆角不会影响其child控件,也就是如果child是图片或者也有背景色的话那么圆角效果就失效了。而ClipRRect是会影响到child的,加了圆角后,也会约束到child产生圆角效果。

7. 阐述state的生命周期:

  • initState:state创建初始化时调用,表示state将和一个BuildContext产生关联,需要注意的是此时BuildContext还没有完全加载完成,如果需要获取BuildContext及监听第一次build完成可以在下面回调中获取
widgetsBinding=WidgetsBinding.instance;
    widgetsBinding.addPostFrameCallback((callback){
      print("addPostFrameCallback be invoke");
    });
  • didChangeDependencies:在 initState() 之后调⽤,当 State 对象的依赖关系发⽣变化时,该⽅法被调⽤,初始化时也会调⽤。
  • deactivate:当state暂时在视图树种移除时被调用,页面切换时也会调用。
  • dispose:state销毁时调用,在调用此方法之前会先调用deactivate()。
  • didUpdateWidget:当widget状态发生变化时调用。


    生命周期

8. Flutter与原生通信的Channel有哪几种?
Flutter定义了三种不同类型的Channel,它们分别是:
BasicMessageChannel:用于传递字符串和半结构化的信息。
MethodChannel:用于传递方法调用(method invocation)。
EventChannel: 用于数据流(event streams)的通信。

9.介绍下 Flutter 的优缺点:
(1)优点
• 热重载(Hot Reload),利用 Android Studio 直接一个 ctrl+s 就可以保存
并重载,模拟器立马就可以看见效果,相比原生冗长的编译过程强很多;
• 一切皆为 Widget 的理念,对于 Flutter 来说,手机应用里的所有东西都是Widget,通过可组合的空间集合、丰富的动画库以及分层课扩展的架构实现了富有感染力的灵活界面设计;
• 借助可移植的 GPU 加速的渲染引擎以及高性能本地代码运行时以达到跨平台设备的高质量用户体验。 简单来说就是:最终结果就是利用 Flutter 构建应用在运行效率上会和原生应用差不多。
(2)缺点
• 不支持热更新;
• 三方库有限,需要自己造轮子;
• Dart 语言编写,增加了学习难度,并且学习了 Dart 之后无其他用处,相比
JS 和 Java 来说。

10.简述 Widget 的 StatelessWidget 和StatefulWidget 两种状态组件类。
• StatelessWidget: 一旦创建就不关心任何变化,在下次构建之前都不会改变。它们除了依赖于自身的配置信息(在父节点构建时提供)外不再依赖于任何其他信息。比如典型的 Text、Row、Column、Container 等,都是StatelessWidget。它的生命周期相当简单:初始化、通过 build()渲染。
• StatefulWidget: 在生命周期内,该类 Widget 所持有的数据可能会发生变化,这样的数据被称为 State,这些拥有动态内部数据的 Widget 被称为 StatefulWidget。比如复选框、Button 等。State 会与 Context 相关联,并且此关联是永久性的,State 对象将永远不会改变其 Context,即使可以在树结构周围移动,也仍将与该 context 相关联。当 state 与 context关联时,state 被视为已挂载。StatefulWidget 由两部分组成,在初始化时必须要在 createState()时初始化一个与之相关的 State 对象。

11.Flutter在Debug和Release下分别使用什么编译模式,有什么区别?
Debug模式下使用JIT编译模式,即Just in time(即时编译),Release下使用AOT模式,即Ahead of time(提前编译)。JIT模式因为需要边运行边编译,所以会占用运行时内存,导致卡顿现象,但是有动态编译效果对于开发者来说非常方便调试。AOT模式提前编译不会占用运行时内存,相对来说运行流畅,但是会导致编译时间增加。

12.Flutter出现异常时如何友好的提示用户?
使用ErrorWidget.builder进行全局设置自定义界面即可。

更多好文可前往掘金主页查看掘进主页

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • 1. Dart 当中的 「..」表示什么意思? Dart 当中的 「..」意思是 「级联操作符」,为了方便配置而使...
    马修斯阅读 13,712评论 0 22
  • Flutter是Google推出的一套开源跨平台UI框架,可以快速地在Android、iOS和Web平台上构建高质...
    GoldMask阅读 15,351评论 2 48
  • 邂逅FLutter 万物皆是Widget 一般缩进2个空格 文字居中 Widget Center() Materi...
    JackLeeVip阅读 3,138评论 0 4
  • Flutter是一个相对新的跨平台框架,但是它的流行度正在迅速提高。雇主也意识到单一代码库的好处,依托Flutte...
    whqfor阅读 12,684评论 1 31
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,531评论 28 53