美文网首页
widget介绍

widget介绍

作者: 肉肉要次肉 | 来源:发表于2023-04-16 11:13 被阅读0次

    一、定义:Flutter里的UI控件

    在Flutter中几乎所有的对象都是一个 widget。Flutter 中是通过 Widget 嵌套 Widget 的方式来构建UI和进行实践处理的,Flutter 中万物皆为Widget。

    二、类型:有状态 & 无状态

    我们通常会通过继承StatelessWidget或StatefulWidget来间接继承widget类来实现。

    StatelessWidget和StatefulWidget都是直接继承自Widget类,而这两个类也正是 Flutter 中非常重要的两个抽象类。

    class MyApp extends StatelessWidget {}

    class MyApp extends StatefulWidget{}

    有状态:


    class MyApp extends StatefulWidget{

    const MyApp({super.key});//创建构造函数,必写

      @override   //必写

      State  createState() =>_State();

      //有状态的widget,必须创建状态

    }

    我们只要在声明变量与方法时,在前面加上“_”即可作为 private 方法使用(代表着其他页面无法调用到)

    //调用_State()

    class _State  extends State {

    //这里做初始化到销毁的处理

      @override

      void initState() {}

    //build UI必须实现

    @override

    Widgetbuild(BuildContext context) {}

    }

    无状态:


    class HomeRecommendPanelextends StatelessWidget {

    const HomeRecommendPanel({super.key});

    //build UI必须实现

    @override

    Widgetbuild(BuildContext context) {}

    }

    三、生命周期

    StatelessWidget 只有createElement,build两个生命周期方法。

    StatefullWidget 的生命周期按照时期不同,分为三组:

    1. 初始化时期:createState、initState


    - createState: 当创建一个新的StatefullWidget时,会立即调用,该方法必须被覆盖。

    - initState:    创建widget调用的除构造方法外的第一个方法。类似Android的onCreate与iOS的viewDidLoad

        通常做一些初始化工作。

    2. 更新时期:didChangeDependencies、build、didUpdateWidget


    -didChangeDependencies():当依赖的State对象改变时会调用:

     a:在第一次构建widget时,在initState()之后立即调用此方法; 

     b:如果StatefulWidget依赖于InhertedWidget,那么当当前State所依赖的InhertedWidget的变量改变时调用。/// 拓展:InhertedWidget可高效率的将数据在Widget树中向下传递,共享。

    -build():这是一个必须要实现的方法,这里实现要呈现的页面内容

     a:在didChangeDependencies()之后立即调用;

    b:另外当调用setState后也会再次调用该方法刷新UI。

    -didUpdateWidget(WidgetLifecycle oldWidget): 当父组件需要重绘的时候调用,是一个不常用的生命周期方法。/// if(oldWidget.xxx != widget.xxx)...

    build 构建该Widget 表示的UI元素。此方法在不同情况下被调用:

    1.调用initState之后

    2.调用didUpdateWidget之后

    3.调用setState之后

    4.当State对象的依赖更改(didChangeDependencies)之后

    5.当State对象从树中一个位置移除后(调用deactivate)又重新插入到树的其它位置时调用

    3. 销毁期:deactivete、dispose


    - deactivete(): 不常用的生命周期方法。在组件被移除时调用,且是在dispose之前调用。

    - dispose(): 组件被销毁时调用,一般用于执行资源的释放工作(监听器卸载、channel的销毁等)。


    打开页面:依次调用initState --> didChangeDependencies --> build方法。

    销毁页面:依次调用deactivete --> dispose方法。

    相关文章

      网友评论

          本文标题:widget介绍

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