在没有状态管理工具的情况下快速传递状态

passing state in flutter with no state management tools

我正在 Udemy 上学习 flutter 课程:使用 Dart 完成 Flutter 应用程序开发训练营 我在提供程序包章节中。作为状态管理的介绍,我们有以下示例代码来说明在不使用状态管理工具的情况下在 classes 和小部件之间传递状态是多么费力。代码如下:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  final String data = 'this is the test data';
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: MyText(),
          ),
          body: Level1(data),
        ),
      );
  }
}

class Level1 extends StatelessWidget {
  final String data;
  Level1(this.data);

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Level2(data),
    );
  }
}

class Level2 extends StatelessWidget {
  final String data;
  Level2(this.data);

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        MyTextField(),
        Level3(data),
      ],
    );
  }
}

class Level3 extends StatelessWidget {
  final String datta;

  Level3(this.datta);

  @override
  Widget build(BuildContext context) {
    return Container(
        child: Text('data')
    );
  }
}

导师想表达的观点是:

”没有状态管理工具,如果我们想使用MyAppclass中提到的第一个变量data同样在 Level3 class 中,我们需要钻取所有其他 classes :Level1 Level2"

我不确定她为什么不在 MyApp class 中立即调用 Level3 构造函数?为什么在这里钻取 classes 甚至是一个选项?我知道这不是编码的最佳选择,我同意,但我们可以直接调用 Level3 构造函数!我们不能吗?有人可以提供更多解释吗?

嗯,这是在 Flutter 中教授状态管理的一种糟糕方式!

Flutter 的 built-in 状态管理已经很棒了。您需要的是查看 InheritedModel,它允许您沿小部件链一直继承状态,甚至选择您想要继承的状态的一个方面。

这里有一段视频解释了如何在 Flutter 中使用 InheritedModelhttps://www.youtube.com/watch?v=0vl35jtpsfs&list=PL6yRaaP0WPkUf-ff1OX99DVSL1cynLHxO&index=4&ab_channel=VandadNahavandipoor