flutter - 如何将状态从子小部件提升到另一个子小部件
问题描述
我如何将数据从子小部件提升到直接位于其上方的另一个子小部件。
import 'package:flutter/material.dart';
class Tree extends StatefulWidget {
@override
_TreeState createState() => _TreeState();
}
class _TreeState extends State<Tree> {
@override
Widget build(BuildContext context) {
return Container(
child: Column(
children: <Widget>[
bigTree(),
],
),
);
}
}
Widget bigTree() {
var fruit = data; //Undefined name 'data'.
return Container(
child: Row(
children: <Widget>[
Text(fruit),
smallTree(),
],
),
);
}
Widget smallTree() {
var data = 'apple'; //How to lift this data
return Container(
child: Text(data),
);
}
我尝试添加一个构造函数 `_TreeState({this.data}); 但它的出现为空
解决方案
你所拥有的实际上并不是小部件。它们是返回小部件的函数。如果您希望 bigTree 在 Flutter 的传统含义中“保持状态”,您需要将其变成一个类,该类可以StatefulWidget
像您的小部件一样扩展和实现创建状态Tree
。目前,作为函数,每次热重载时,小部件返回函数中的变量都会被重置,因此不存在“状态”。
这就是我要改变的方式
import 'package:flutter/material.dart';
class Tree extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
child: Column(
children: <Widget>[
BigTree(),
],
),
);
}
}
class BigTree extends StatefulWidget {
@override
_BigTreeState createState() => _BigTreeState();
}
class _BigTreeState extends State<BigTree> {
final fruit = 'apple';
@override
Widget build(BuildContext context) {
return Container(
child: Row(
children: <Widget>[
Text(fruit),
SmallTree(fruit),
],
),
);
}
}
class SmallTree extends StatelessWidget {
SmallTree(this.data);
final String data;
@override
Widget build(BuildContext context) {
return Container(
child: Text(data),
);
}
}
推荐阅读
- swift - 尝试更改个人资料照片时应用程序崩溃
- oracle - 在游标中使用 for 循环和别名检索变量
- javascript - 为什么我的 JavaScript 代码只在第二次点击时执行?
- c++ - 新建一个像 60000*60000 这样非常大的一维数组
- kubernetes - 如果文件没有更改,如何重新部署(滚动更新)kubernetes 部署
- node.js - 在 DynamoDB 上扫描表的正确方法是什么?
- c# - 不再需要第二个 T-SQL 查询
- intellij-idea - maven子模块中的Groovy Main方法在运行前不会自动编译
- datatable - 无法解析 Cucumber 4.xx 的 JacksonTableTransformer
- matlab - 一旦线条触及预定义正方形的周边,如何停止绘图?