美文网首页
flutter life

flutter life

作者: f8d1cf28626a | 来源:发表于2022-11-29 09:55 被阅读0次

flutter 生命周期

一般是的是有状态的state

    1. StatefulWidget.createStaet()
    1. initState()
    1. didChangeDependencies (可结合inheritedWidget使用数据共享 会去执行build)
    1. build (didUpdateWidget 或 setState())都会再次执行build
    1. deactivate()
    1. dispose()

didChangeDependencies (细节)可以在这里做数据的处理或保存,自定义的MineData可以放在Home(home以下层级都可以共享)

didChangeDependencies 改变依赖关系 除了初始化的时候调用了一次,什么时候会再来呢??(updateShouldNotify 返回true时会执行)


import 'package:flutter/material.dart';



class InheritedDemo extends StatefulWidget {
  const InheritedDemo({this.data,Key? key}) : super(key: key);
  final int? data;
  @override
  State<InheritedDemo> createState() => _InheritedDemoState();
}

class _InheritedDemoState extends State<InheritedDemo> {
  int data = 0;
  @override
  Widget build(BuildContext context) {
    // 重要代码部分MineData的使用
    return MineData(data: data,childWidget: const DependenciesWidget());
  }
}

class MineData extends InheritedWidget {

  int? data = 0;

  // 情深的一句
  MineData({this.data,required Widget childWidget}):super(child: childWidget);

  // 定义一个便捷方法,使用此方法的widget都会回调updateShouldNotify执行didChangeDependencies方法
  static MineData? mineOf(BuildContext context){
    context.dependOnInheritedWidgetOfExactType<MineData>();
  }

  // 回调方法 data发生改变的时候通知子组组件依赖于MineData
  @override
  bool updateShouldNotify(covariant MineData oldWidget) {
    // 新的data数据混入原来的不想等,即返回true
    return oldWidget.data != data;
  }
  
}

class DependenciesWidget extends StatefulWidget {

  const DependenciesWidget({Key? key}) : super(key: key);

  @override
  State<DependenciesWidget> createState() => _DependenciesWidgetState();
}

class _DependenciesWidgetState extends State<DependenciesWidget> {
  @override
  Widget build(BuildContext context) {
    return Container(
      // 重要代码部分mineOf的使用
      child: Text(MineData.mineOf(context)?.data.toString() ?? 'hello'),
    );
  }

  @override
  void didChangeDependencies() {
    debugPrint('didChangeDependencies');
    super.didChangeDependencies();
  }
}

相关文章

网友评论

      本文标题:flutter life

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