目录
3. StatelessWidget 和 StatefulWidget 在 Flutter 中有什么区别?
7. 解释 Stateful Widget Lifecycle ?
15.在flutter里streams是什么?有几种streams?有什么场景用到它?
16. hot restart 和 hot reload 之间的区别是什么?
18. 为什么构建(build)方法在 State 上而不是在 StatefulWidget 上?
19.什么是StatelessWidget和StatefullWidget?他们之间的区别是什么?
20. 请解释InheritedWidget是什么,并说明它在状态管理中的作用。
23. 什么是Flutter中的异步编程?有哪些常用的异步编程模式?
24. Flutter中的渲染对象模型(Render Object Model)是什么?他与Widget树有何区别?
1.Dart是值传递还是引用传递?
dart是值传递。
每次调用函数,传递过去的都是对象的内存地址,而不是这个对象的赋值。
2.Flutter 是单引擎还是双引擎
关于使用多个
FlutterEngine
还是单个FlutterEngine
,这实际上取决于你的具体需求和应用场景。1.用单个FlutterEngine来管理多个入口可能是有利的。这种方式可以减少Flutter引擎的创建和销毁次数,从而提高性能并减少资源消耗。尤其是在Flutter页面之间的切换较为频繁时,使用单个FlutterEngine可以避免每次切换时都重新创建Flutter引擎,从而提高应用的响应速度和用户体验。不过,这也可能带来一些复杂性,比如在处理不同页面的生命周期和状态管理时可能需要更多的工作。
2.使用多个FlutterEngine:另一方面,如果你的应用需要在不同的原生页面或视图中嵌入多个独立的Flutter视图,并且这些视图之间需要相互隔离或者具有不同的生命周期,那么使用多个FlutterEngine可能更为合适。这样可以确保每个Flutter视图都有其自己的引擎实例,从而避免潜在的状态冲突和生命周期问题。然而,这也可能带来更高的资源消耗和性能开销。
3. StatelessWidget 和 StatefulWidget 在 Flutter 中有什么区别?
在 Flutter 中,StatelessWidget 和 StatefulWidget 是两种基本的 Widget 类型,它们的主要区别在于状态管理和如何处理 UI 更新。以下是它们的详细比较:
StatelessWidget
定义:
StatelessWidget 是一种不可变的 Widget,其状态在创建后不会改变。它们只依赖于构造函数中的参数来构建 UI。
特点:
不维护任何内部状态。
适合用于显示静态内容或简单的 UI 结构。
在需要更新 UI 时,必须重新创建该 Widget 的实例。
使用示例:
class MyStatelessWidget extends StatelessWidget {
final String title;
MyStatelessWidget({required this.title});
@override
Widget build(BuildContext context) {
return Text(title);
}
}
StatefulWidget
定义:
StatefulWidget 是一种可变的 Widget,可以在其生命周期内维护状态。它可以响应用户输入或其他事件并更新 UI。
特点:
具有一个可变的状态(通过 State 类管理)。
当状态发生变化时,通过调用 setState() 方法来通知 Flutter 更新 UI。
适合用于需要动态更新的内容,如表单、动画等。
使用示例:
class MyStatefulWidget extends StatefulWidget {
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Column(
children: [
Text('Counter: $_counter'),
ElevatedButton(
onPressed: _incrementCounter,
child: Text('Increment'),
),
],
);
}
}
状态管理:
StatelessWidget 不维护任何状态,适合静态内容。
StatefulWidget 可以维护内部状态,适合动态内容。
更新机制:
StatelessWidget 需要重新创建实例来更新 UI。
StatefulWidget 通过 setState() 方法来更新 UI。
根据应用的需求,开发者可以选择使用 StatelessWidget 或 StatefulWidget 来构建相应的界面。
4.简述Dart语音特性
在Dart中,一切都是对象,所有的对象都是继承自Object
Dart是强类型语言,但可以用var或 dynamic来声明一个变量,Dart会自动推断其数据类型,dynamic类似c#没有赋初值的变量都会有默认值null
Dart支持顶层方法,如main方法,可以在方法内部创建方法
Dart支持顶层变量,也支持类变量或对象变量
Dart没有public protected private等关键字,如果某个变量以下划线(_)开头,代表这个变量在库中是私有的
5. Navigator 是什么?在 Flutter 中 Routes 是什么?
在 Flutter 中,Navigator 和 Routes 是用于管理应用导航和页面切换的核心组件。以下是它们的详细解释:
Navigator
定义:Navigator 是一个 Widget,用于在 Flutter 应用中管理页面的堆栈。它可以通过推送(push)新页面和弹出(pop)当前页面来实现页面的切换。
功能:
页面堆栈管理:Navigator 维护一个页面堆栈,用户可以在不同页面之间导航。
动画效果:Navigator 提供了默认的页面切换动画,可以通过自定义的路由实现更复杂的动画效果。
使用示例:
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondPage()),
);
Routes
定义:Routes 是指应用中的不同页面或屏幕。每个页面都可以通过一个唯一的字符串标识。
类型:
命名路由:Flutter 支持命名路由,可以通过一个字符串直接引用一个路由,而不是创建一个新的 MaterialPageRoute 实例。
默认路由:可以在 MaterialApp 的 routes 参数中定义应用的所有路由。
使用示例:
MaterialApp(
initialRoute: '/',
routes: {
'/': (context) => HomePage(),
'/second': (context) => SecondPage(),
},
);
// 导航到命名路由
Navigator.pushNamed(context, '/second');
Navigator
是用于管理页面堆栈和导航的 Widget,而Routes
是用于定义应用中不同页面的结构。通过结合使用Navigator
和Routes
,Flutter 开发者可以轻松地实现复杂的导航逻辑和用户体验。
6、Dart 是不是单线程模型?是如何运行的?
引用《Flutter中文网》里的话
Dart 在单线程中是以消息循环机制来运行的,其中包含两个任务队列,一个是“微任务队列” microtask queue 另一个是“事件队列” event queue。
7. 解释 Stateful Widget Lifecycle ?
生命周期包含以下简化步骤
createState() // 创建状态
mounted == true // 是否安装
initState() // 初始化状态
didChangeDependencies() // 是否更改了依赖项
build() // 构建
didUpdateWidget() // 是否更新小部件
setState() // 设置状态
deactivate() // 无效的
dispose() // 释放
mounted == false