dart - setState 不改变如何将 StatefulWidget 设置为 StatefulWidget?
问题描述
StatefulWidget 到 StatefulWidget 如何在 Test2 setstate 类中更改字符串 TimeSetdata
class Test1 extends StatefulWidget {
@override
_Test1State createState() => _Test1State();
}
class _Test1State extends State<Test1> {
String TimeSetdata = "9.00 AM";
@override
Widget build(BuildContext context) {
...
Text(TimeSetdata);
}
}
class Test2 extends StatefulWidget {
@override
_Test2State createState() => _Test2State();
}
class _Test2State extends State<Test2> {
@override
Widget build(BuildContext context) {
...
onPressed: () {
setState(() {
TimeSetdata = "11.00 AM";
});
};
}
}
如何在类 Test2 中设置状态将小部件文本(TimeSetdata)中的字符串 TimeSetdata 更改为“11.00 AM”;
解决方案
允许父级将回调函数传递给子级并传递一个回调,当从子级调用时,会更新父级中的值。
这假设这Test2
是一个孩子Test1
(你没有在你的问题中说清楚)
typedef StringCallback = void Function(String);
class Test2 extends StatefulWidget {
Test2({@required this.onPressed});
final StringCallback onPressed;
@override
_Test2State createState() => _Test2State(onPressed: onPressed);
}
class _Test2State extends State<Test2> {
_Test2State({@required this.onPressed});
final StringCallback onPressed;
@override
Widget build(BuildContext context) {
...
onPressed: () => onPressed(),
}
}
class _Test1State extends State<Test1> {
String TimeSetdata = "9.00 AM";
@override
Widget build(BuildContext context) {
...
Test2(onPressed: (s) => setState(() => TimeSetdata = s),
...
Text(TimeSetdata);
}
}
推荐阅读
- c++ - 如何判断 SSL_read 是否已接收并处理来自单个消息的所有记录
- php - 仅将脚本应用于一级和二级类别 WooCommerce
- python - Python readline() 方法导致 UnicodeDecodeError
- python-3.x - 无法从 python3 中的 .env 文件访问数据
- reactjs - Prop 在 ReactJS 的子组件中为 null
- python - 如何查询比较字符串熊猫
- android - 使用 ContraintLayout 将图像定位到屏幕顶部
- ubuntu - 如何使用 Conda 在 Google Colab 中为 BiG-SCAPE 创建虚拟环境?
- python - 使用 ctypes 调用 argc/argv 函数
- c# - WPF - 制作进度条按钮并使其大小合适