Flutter生命周期

2021-07-12  本文已影响0人  cj小牛

生命周期

作用

Widget的生命周期

class MyData extends InheritedWidget 相当于是iOS NSUserDefault 的数据存储。但是这个会在 children: <Widget>[
MyData(data: _counter ,child: Test1()),
],
在这个节点的时候会销毁

  import 'package:flutter/material.dart';
    void main() {
      runApp(MyApp());
  }
  class MyData extends InheritedWidget{
  int? data;
  MyData({this.data,required Widget child}) : super(child: child);
  static MyData? of(BuildContext context){
 return context.dependOnInheritedWidgetOfExactType();
}

@override
bool updateShouldNotify(MyData oldWidget) {
// TODO: implement updateShouldNotify

return oldWidget.data != data;
}


}

class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
  return MaterialApp(
  title: 'Flutter Demo',
  theme: ThemeData(
    primarySwatch: Colors.blue,
  ),
  home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}

class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);


final String title;

@override
_MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;

void _incrementCounter() {
setState(() {
  _counter++;
});
}

@override
Widget build(BuildContext context) {
  return Scaffold(
  appBar: AppBar(
    title: Text(widget.title),
  ),
  body: Center(
    child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[

        MyData(data: _counter ,child: Test1()),


      ],
    ),
  ),
  floatingActionButton: FloatingActionButton(
    onPressed: _incrementCounter,
    tooltip: 'Increment',
    child: Icon(Icons.add),
  ), // This trailing comma makes auto-formatting nicer for build methods.
);
}
}

class Test1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
  return Test2();
}
}
class Test2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Test3();
}
}

class Test3 extends StatefulWidget {
@override
_Test3State createState() => _Test3State();
}

class _Test3State extends State<Test3> {
@override
Widget build(BuildContext context) {
return Container(
  child: Text(MyData.of(context)!.data.toString()),
);
}
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
  super.didChangeDependencies();
}
}

Widget 的渲染

renderElement
** renderelement 主要创建RenderObjcet对象
** Flutter 调用mount 方法,creatRenderObjdect 方法

stateLess
** 继承CommponentElement 方法。
** CommponentElement 会调state 用build() 方法来将element 作为参数刷新数据。
statefull
** 继承CommponentElement 方法。
** 调用createState 方法 将Wiget 复制给state
** CommponentElement 会调state 用build() 方法来将element 作为参数刷新数据。

上一篇 下一篇

猜你喜欢

热点阅读