如何使用setter设置最终变量

时间:2019-03-23 02:25:24

标签: dart flutter

所以我是Dart和Flutter的新手,我试图根据像这样的switch语句传入的特定字符串值来设置材质的颜色

class AnswerButton extends StatelessWidget{

  final String _option;
  final String _answer;
  final VoidCallback _onTap;
  final Color _color = null;

  set _color(_option){
    switch (_option){
      case "A": 
      _color = Colors.greenAccent;
      break;

      case 'B': 
      _color = Colors.redAccent;
      break;

      case 'C': 
      _color = Colors.blueAccent;
      break;

      case 'D': 
      _color = Colors.yellowAccent;
      break;
    }
  }

  AnswerButton(this._option, this._answer, this._onTap); 

  @override
  Widget build(BuildContext context){
    return new Expanded(
      child: new Material(
      color: _color,
      child: new InkWell(
        onTap: () => _onTap(), 
        child: new Center(
          child: new Container(
            decoration: new BoxDecoration(
              border: new Border.all(color: Colors.white, width: 5.0)
            ),
              padding: new EdgeInsets.all(20.0),
              child: new Text(_answer.toString(),
              style: new TextStyle(color: Colors.white, fontSize: 40.0, fontStyle: FontStyle.italic),),
            ),
          ),
        ),
      )
    );
  }
}
)

但是我遇到了麻烦,因为我不确定如何调用setter方法更新_colour并且材质仍然是白色

1 个答案:

答案 0 :(得分:0)

首先,您需要修正一个小的错字。您正在尝试根据official dart documentationset的值color而不是最终变量_color:< / p>

    set color(_option){
    }

收件人:

    set _color(_option){
    }

另一件事是,除非定义了子项,否则Material小部件color将不会显示,使用时您会注意到它:

 new Material(
  color: _color,
  child: Text(''), // or any other widget you want to implement
 )