美文网首页
2021-Flutter

2021-Flutter

作者: 世玉茹花 | 来源:发表于2021-05-25 13:47 被阅读0次

    1、flutter与原生通信,platform channel原理?

    (1)BasicMessageChannel:用于传递字符串和半结构化的信息
    (2)MethodChannel:用于传递方法调用,通常用于调用native中某个方法。
    (3)EeventChannel:用于数据流的通信。有监听功能,比如电量发生变化之后直接推送给flutter端。
    每个channel都有三个重要变量:
    name:stirng类型,代表channel名字,也是唯一标志符
    messager:BinaryMessager类型,代表消息信使,是消息发送与接收的工具。
    codec:MessagerCodec类型或者MethodCodec类型,代表消息编解码器。
    

    2、future 和 stream数据流

    都是用来处理异步编程的工具,区别在于,stream可以接收多个异步结果,future只能接收一个异步结果,
    Stream 的创建可以使用 Stream.fromFuture,也可以使用 StreamController 来创建和控制。还有一个注意点是:普通的 Stream 只可以有一个订阅者,如果想要多订阅的话,要使用 asBroadcastStream()。
    

    3、flutter 中多个异步请求都完成后执行某个操作?

    利用Future.wait:
    demo1(){
        return true;
    }
    demo2(){
        return true;
    }
    demo3(){
        return false;
    }
    
    //调用 //dynamic 类型自己定
    change() async{
        await Future.wait<dynamic>([demo1,demo2,demo3]).then((e){
          
          print(e);//[true,true,false]
        }).catchError((e){
    
        });
    }
    
    类似,await for
    Stream<String> stream = new Stream<String>.fromIterable(['不开心', '面试', '没', '过']);
    
    main() async{
    
        await for(String s in stream){
    
        print(s);
    
      }
    
    }
    

    4、flutter 理念架构:

    flutter 自下而上框架分为:Embedder,Engine,Framework。
    1.Embedder是操作系统适配层,实现了渲染 Surface设置,线程设置,以及平台插件等平台相关特性的适配
    
    2.Engine层负责图形绘制、文字排版和提供Dart运行时,Engine层具有独立虚拟机,正是由于它的存在,Flutter程序才能运行在不同的平台上,实现跨平台运行;是Skia 2D的绘图引擎库,提供了非常友好的API,在图形转换、文字渲染、位图渲染提供友好高效的表现。SKia还是跨平台的。
    
    3.Framework层则是使用Dart编写的一套基础视图库,包含了动画、图形绘制和手势识别等功能,是使用频率最高的一层。
    它实现了一套基础库,包含安卓、ios风格的UI界面,下面是通用widget,之后是一些动画绘制,渲染,手势等。
    

    5、StatefulWidget生命周期

    initState()
    didChangeDependencies():State对象依赖关系发生变化的时候也会调用
    deactivate():当State在那时从视图树中移除回调用,页面切换也会调用该方法
    dispose():widget销毁时调用
    didUpdateWidget:Widget状态发生变化的时候会调用
    

    6、简述Widgets、RenderObjects 和 Elements的关系

    1.Widget:仅用于存储渲染所需要的信息
    2.RenderObject:负责管理布局,绘制等
    3.Elements:巨大控件树上的实体
    
    例如:一个UI视图树中,可能包含多个TextWidget,放在内部视图树的视觉,这些TextWidget都被填充到独立的Element中,Element会持有renderObject和widget的实例。。widget只是一个配置,RenderObject负责管理布局、绘制等操作。
    
    第一次创建widget的时候,会相应创建一个element,然后将该元素插入树中。如果之后widget发生变化,则将旧的widget进行比较,并且相应的更新element,重要的是element不会被重建,只是更新而已。
    

    7、什么是状态管理?状态管理框架?

    应用由组件搭建而成,组件最重要的就是状态,状态是一个组件的UI数据模型,是组件渲染时的数据依据。
    flutter状态分为全局状态,局部状态。
    常用状态管理有ScopedModel,Bloc,Redux,Provider
    

    8、flutter热重载

    flutter的热重载是基于JIT编译模式的代码增量同步。由于JIT属于动态编译,能够将dart代码编译成生成中间代码,让Dart VM在运行时解释执行,因此可以通过动态更新中间代码实现增量同步。
    

    相关文章

      网友评论

          本文标题:2021-Flutter

          本文链接:https://www.haomeiwen.com/subject/rgyqsltx.html