flutter - 从另一个页面颤动改变小部件的状态
问题描述
简而言之,我的问题:我会尝试从另一个小部件更改小部件的状态。
长:
我有一个页面。
此页面显示一个彩色容器
从另一个页面,这个彩色容器应该改变它的颜色
我将不胜感激
import 'package:flutter/material.dart';
class Display extends StatefulWidget {
Display({Key? key, required this.color}) : super(key: key);
Color color;
@override
State<StatefulWidget> createState() => DisplayState();
}
class DisplayState extends State<Display> {
@override
Widget build(BuildContext context) {
return Container(
color: widget.color,
);
}
changeColor(Color color) {
setState(() {
widget.color = color;
});
}
}
解决方案
我不知道我是否正确理解了你想要什么,但如果我是对的,你可以这样做:
- 创建一个颜色类型的变量;
- 制作一个改变这个变量状态的函数(setState);
- 将此函数作为参数传递给您要更改颜色的小部件。
- 在您的其他页面中调用该函数。
您的第一个屏幕应该有一个变量来保存颜色值
Color containerColor;
改变其值的函数
void _setContainerColor(Color newColor) {
setState(() {
containerColor = newColor;
});
}
并使用容器中的变量
Container(
color: containerColor, // your variable state
child: SomeWidget(),
);
将您的函数作为参数传递给您的第二页
MyOtherWidget(_setContainerColor);
在您的 Other Widget 中,您声明一个 Function 类型的变量来接收您的函数:
const MyOtherWidget(this._setContainerColor) extends StatefulWidget {
final Function _setContainerColor;
@override
_MyOtherWidgetState createState() => _MyOtherWidgetState();
}
class _MyOtherWidgetState extends State<_MyOtherWidget> {
@override
Widget build(BuildContext context) {
return TextButton(
child: Text("Change Color"),
onPressed: () {
widget._setContainerColor(Colors.red);
},
)
}
}
不要忘记containerColor
在您的容器背景颜色中使用您的 as 值。
推荐阅读
- lerna - Lerna 仅在更改的包上运行
- json - 如何命名我的反应组件以容纳嵌套 JSON 中的元素?
- json - 使用 shell 脚本进行 Ip:port 连接测试
- r - 在R中使用grepl省略字符串中的数字
- sql - 如何获取 SQL 中每个唯一相邻值中的值?
- r - 对 data.table 进行 BY 操作而不进行聚合
- python - 我想在视图模板中对一个对象调用两次 get_queryset。我该怎么做?
- javascript - 检查日期的更好方法是在今天日期之前/之后 1 到 2 天使用时刻
- json - Google 表格 JSON 提要 - 我想要数据而不是架构
- javascript - 在 JavaScript 中实现递归回溯?