首页 > 解决方案 > 将参数传递给 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))
    );
  }
}

这似乎是一个愚蠢的问题,因为我知道无论如何您都可以在自定义小部件实例化的参数中访问这些属性。但我想根据背景颜色更改按钮的不同属性。提前致谢。

标签: flutterdart

解决方案


您可以使用以下方式访问有状态小部件中的小部件属性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);
  }
}

推荐阅读