JTBT科技-二面
1、Flutter中var、dynamic、object区别。
**var**:编译器推断类型,一旦赋值,类型就固定下来,不能再赋值为其他类型。
**dynamic**:动态类型,变量可以赋值为任何类型,没有类型检查,可能导致运行时错误。
**Object**:所有 Dart 类的基类,变量可以赋值为任何类型,但在使用时需要进行类型转换。
2、向StatefulWidget的Page页面传值,基于context,不基于构造函数和其他路由方式,会在StatefulWidget生命周期的那个函数里面收到值,为什么?
initState
用途:用于初始化状态。通常在这里进行一次性的初始化工作。
限制:在 initState 中不能直接访问 BuildContext,因为此时 Widget 树还没有完全构建完成。
didChangeDependencies
用途:在依赖的 InheritedWidget 发生变化时调用。可以在这里访问 BuildContext 并获取传递的值。
优势:可以安全地访问 BuildContext,因为此时 Widget 树已经构建完成。
3、StatefulWidget的生命周期。
StatefulWidget 的生命周期包括以下几个主要阶段和方法:
-
创建阶段:
createState(): 创建并返回一个State对象。
-
初始化阶段:
initState(): 在State对象被插入到树中时调用。通常用于一次性的初始化工作。
-
构建阶段:
build(): 构建Widget树。每次需要更新 UI 时都会调用。
-
更新阶段:
didChangeDependencies(): 在依赖的对象改变时调用。didUpdateWidget(): 在Widget重新构建时调用。
-
销毁阶段:
deactivate(): 在State对象从树中移除时调用。dispose(): 在State对象永久性移除时调用。用于清理资源。
4、Mixin、extend、Implement区别,都使用先后顺序如何?
mixin 是一种在多个类之间共享代码的方式。它允许你将一组方法添加到多个类中,而不需要使用继承。mixin 通常用于代码复用。
extend 用于类的继承。它允许一个类继承另一个类,并获得其所有的属性和方法。子类可以重写父类的方法,并添加新的属性和方法。
implement 用于实现接口。它要求类实现接口中定义的所有方法。接口可以是一个抽象类或一个普通类。
extends -> mixins(with) -> implements