flutter - 将参数传递给 initState Flutter/Dart?
问题描述
我是 Flutter 的新手,所以我不确定这是否可能......
我正在尝试基于 MaterialDesignIcon RaisedButton 自定义一个 statefulWidget。
我想简单地在 raiseButton 的实例化上传入两个参数。
因此,当我创建 RaisedButton 时,我可以执行以下操作.....
RaisedButton(backgroundColor: Colors.grey, text: 'Press me')
请在下面查看我正在尝试工作的代码。
class CustomRaisedButton extends StatefulWidget {
@override
CustomRaisedButtonState createState() => CustomRaisedButtonState();
}
void buttonPressed() {
print('A FUNCTION WOULD GO HERE');
}
class CustomRaisedButtonState extends State<CustomRaisedButton> {
var _backgroundColor = Colors.transparent;
var _text = String;
var _hoverColor = Colors.transparent;
@override
void initState(backgroundColor, text) { < ---- // Can I put the parameters required here?
super.initState();
this._backgroundColor = backgroundColor;
this._text = text;
if (_backgroundColor != Colors.grey) {
_textColor = Colors.white;
}
if (_backgroundColor == Colors.grey) {
_hoverColor = Colors.black54;
}
if (_backgroundColor == Colors.red) {
_hoverColor = Colors.deepOrangeAccent;
}
if (_backgroundColor == Colors.lightGreen) {
_hoverColor = Colors.green;
}
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return RaisedButton(
onPressed: buttonPressed,
color: _backgroundColor,
textColor: Colors.black,
disabledColor: Colors.black38,
disabledTextColor: _textColor,
disabledElevation: 4,
elevation: 4,
hoverColor: _hoverColor,
padding: const EdgeInsets.all(8.0),
child: Text('$_text', style: CustomTextStyle.display1(context))
);
}
}
这似乎是一个愚蠢的问题,因为我知道无论如何您都可以在自定义小部件实例化的参数中访问这些属性。但我想根据背景颜色更改按钮的不同属性。提前致谢。
解决方案
您可以使用以下方式访问有状态小部件中的小部件属性widget.
:
class ExampleWidget extends StatefulWidget {
final String data;
const ExampleWidget({Key key, this.data}) : super(key: key);
@override
_ExampleWidgetState createState() => _ExampleWidgetState();
}
class _ExampleWidgetState extends State<ExampleWidget> {
String text;
@override
void initState() {
super.initState();
text = widget.data.substring(0,2).toUpperCase();
}
@override
Widget build(BuildContext context) {
return Text(text);
}
}
推荐阅读
- c# - 如何使用 newtonsoft 序列化 JSchema 中的依赖项
- git - 致命:'.git/objects/pack/tmp_idx_XXXX' 上的 fsync 错误:权限被拒绝
- sql - 在 0000000001 或 00000123131 等 varchar 序列中查找非 0 的数字
- qml - QML - 如何正确地将隐式设置设置为 GridLayout
- akka-stream - 项目流,每个产生 n{ http request } > merge{response} > wrapInHeaderAndFooter{data} > http-request
- html - 复选框更改事件接收未定义的值
- swift - 如何实现多个水平标签,如果自动布局没有足够的空间,标签可以垂直增长
- c# - 以一种非常具体的方式生成 Xml
- vue.js - this.my_object.filter 不是函数
- java - 线程的join方法