2025 最新flutter面试总结

目录

1.Dart是值传递还是引用传递?

2.Flutter 是单引擎还是双引擎

3. StatelessWidget 和 StatefulWidget 在 Flutter 中有什么区别?

4.简述Dart语音特性

5. Navigator 是什么?在 Flutter 中 Routes 是什么?

6、Dart 是不是单线程模型?是如何运行的?

7. 解释 Stateful Widget Lifecycle ?

8.Dart的事件循环的运行遵循以下规则

9. Flutter 是如何实现原生性能和体验的?

10.那么在Dart中如何让你的代码异步执行呢?

11.说一下 Future 和 Future队列 ?

12. 什么是 Flutter tree shaking

13.Future和 Stream Isolate?

14. Spacer 小部件是什么?

15.在flutter里streams是什么?有几种streams?有什么场景用到它?

16. hot restart 和 hot reload 之间的区别是什么?

17.Stream 有哪两种订阅模式?分别是怎么调用的?

18. 为什么构建(build)方法在 State 上而不是在 StatefulWidget 上?

19.什么是StatelessWidget和StatefullWidget?他们之间的区别是什么?

20. 请解释InheritedWidget是什么,并说明它在状态管理中的作用。

21. Provider与其他状态管理解决方案有什么不同?

22. 简述下Bloc模式是什么,以及它的工作原理。

23. 什么是Flutter中的异步编程?有哪些常用的异步编程模式?

24. Flutter中的渲染对象模型(Render Object Model)是什么?他与Widget树有何区别?

25.待补充中... 

谢谢大家!!!

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值