• flutter面试题


    1.说说Flutter中的生命周期

    • initState():Widget 初始化当前 State
    • didChangeDependencies() 在 initState() 之后调用,当 State 对象的依赖关系发生变化时,该方法被调用,初始化时也会调用。
    • deactivate() 当 State 被暂时从视图树中移除时,会调用这个方法,同时页面切换时,也会调用。(已经消失在新版本中)
    • dispose() Widget 销毁了,在调用这个方法之前,总会先调用 deactivate()。
    • didUpdateWidge 当 widget 状态发生变化时,会调用。

    那你用过didUpdateWidge吗,(不知道要问啥)

    看网上意思是 只要在父widget中调用setState,子widget的didUpdateWidget就一定会被调用,不管父widget传递给子widget构造方法的参数有没有改变。
    
    • 1

    2.有了解过Flutter的一些状态管理框架吗? 用过哪些状态管理框架?

    Provider
    Redux
    MobX
    BLoC
    GetX

    3.谈谈Flutter中的future、async 和 await

    Dart 中可通过 async/await 或者 Future 定义异步操作
    Future对象表示异步操作的结果,我们通常通过then()来处理返回的结果
    async用于标明函数是一个异步函数,其返回值类型是Future类型
    await用来等待耗时操作的返回结果,这个操作会阻塞到后面的代码

    4.Dart异步编程中的 Stream数据流? Stream 有哪两种订阅模式? 分别是怎么调用的?

    在Dart中,Stream 和 Future 一样,都是用来处理异步编程的工具。Stream可以接收多个异步结果,而Future 只有一个。
    Stream有两种订阅模式:单订阅(single) 和多订阅(broadcast)。
    Stream 默认处于单订阅模式,通过 transform() 方法(返回另一个 Stream)进行连续调用。通过Stream.asBroadcastStream() 可以将一个单订阅模式的 Stream 转换成一个多订阅模式的
    Stream,isBroadcast 属性可以判断当前 Stream 所处的模式。

    5.Dart 是如何实现多任务并行的? Dart是单线程还是多线程的?

    Flutter的多线程主要依赖Dart的并发编程、异步和事件驱动机制。
    在Dart中,一个Isolate对象其实就是一个isolate执行环境的引用,一般来说我们都是通过当前的isolate去控制其他的isolate完成彼此之间的交互,而当我们想要创建一个新的Isolate可以使用Isolate.spawn方法获取返回的一个新的isolate对象,两个isolate之间使用SendPort相互发送消息,而isolate中也存在了一个与之对应的ReceivePort接受消息用来处理,但是我们需要注意的是,ReceivePort和SendPort在每个isolate都有一对,只有同一个isolate中的ReceivePort才能接受到当前类的SendPort发送的消息并且处理。
    是单线程

    6.Flutter中Widget,Element和RenderObiect之间的关系,

    Widget :仅用于存储渲染所需要的信息。
    RenderObject :负责管理布局、绘制等操作。
    Element是这颗巨大的控件树上的实体。
    Widget和Element是一对多的关系,Element和RenderObiect是一对一的关系。

    7.Flutter 是如何与原生Android、iOS进行通信的?

    Flutter 通过 PlatformChannel 与原生进行交互,其中 PlatformChannel 分为三种:
    BasicMessageChannel :用于传递字符串和半结构化的信息。
    MethodChannel :用于传递方法调用(methodinvocation)。
    EventChannel : 用于数据流(event streams)的通信。

    8.Flutter 中是如何分发使用手势事件的?(不知道正确答案是啥。。。。。)

    Flutter的事件分发总体也由手势触发、拦截和响应等几个部分构成。
    事件分发到Dart的入口类是GestureBinding类,此类位于gestures/binding.dart文件中,与手势识别相关的都位于gestures包中

    这里面当状态发生变化的时候,或者是调用setState的时候,有一个方法是必须调用的是哪个?

    你用flutter到现在做了几个项目了?你都做过哪方面相关的业务?
    9、flutter里面有集成持久化的一些东西吗?

    使用sqlite数据库;使用官方提供的shared_preferences插件

    10、给一个widget添加圆角?

    • ClipRRect
    var roundImage = ClipRRect(
      borderRadius: BorderRadius.circular(100),
      child: image,
    );
    
    • 1
    • 2
    • 3
    • 4
    • Container设置圆形的decoration
    var roundImage = Container(
      clipBehavior: Clip.hardEdge,
      decoration: const BoxDecoration(shape: BoxShape.circle),
      child: image,
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • CircleAvatar设置backgroundImage
    var roundImage = CircleAvatar(
      radius: 100,
      backgroundImage: NetworkImage("url"),
    );
    
    • 1
    • 2
    • 3
    • 4
    • ClipOval
    var roundImage = ClipOval(
      child: image,
    );
    
    • 1
    • 2
    • 3
    • ClipPath
    var roundImage = ClipPath.shape(
      shape: const CircleBorder(),
      child: image,
    );
    
    • 1
    • 2
    • 3
    • 4

    11、你了解flutter异步工作是怎么做的吗?

    啊啊啊就是isolate啊

    12、你是用的什么状态管理?(答的provider)它是由什么封装出来的?用的provider里面的哪个widget去刷新UI?

    InheritedWidget
    statefulwidget???

  • 相关阅读:
    深度强化学习技术概述
    用RNN & CNN进行情感分析 - PyTorch
    WPF中TextWrapping
    git小组分工写产品的增删改査,回顾ssm的使用
    线性代数让我想想:什么是秩?
    驱动定时器
    uni-app开发微信小程序的报错[渲染层错误]排查及解决
    MySQL_基本的SELECT语句
    2022学习进阶之路:高并发+性能优化+Spring boot等大型项目实战
    什么,api竟然有版本
  • 原文地址:https://blog.csdn.net/weixin_39843945/article/details/133185603