在没有状态管理工具的情况下快速传递状态
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 中使用 InheritedModel
:https://www.youtube.com/watch?v=0vl35jtpsfs&list=PL6yRaaP0WPkUf-ff1OX99DVSL1cynLHxO&index=4&ab_channel=VandadNahavandipoor
我正在 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 中使用 InheritedModel
:https://www.youtube.com/watch?v=0vl35jtpsfs&list=PL6yRaaP0WPkUf-ff1OX99DVSL1cynLHxO&index=4&ab_channel=VandadNahavandipoor