flutter life

2022-11-29  本文已影响0人  f8d1cf28626a

flutter 生命周期

一般是的是有状态的state

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();
  }
}
上一篇 下一篇

猜你喜欢

热点阅读