如何将RaisedButton设置为已选中状态,就像在切换按钮已选中状态中一样?

如何使RaisedButton不占用额外的宽度,即虾包裹标签文本。

flutter - 如何使Flutter RaisedButton处于选定状态-LMLPHP

最佳答案

我相信我无需使用RaisedButton就可以做到同样的事情。

根据我的理解,您正在尝试在第一个问题中在两种情况之间切换RaisedButton,可以通过在调用States时在两个onPressed之间交替来实现此目的。

但是,为了也回答您的第二个问题,我使用了Container而不是RaisedButton,该Container现在充当了Button,当点击它时,它会在状态之间切换。并且Container将自己调整为它的child,即我的示例中Text的状态发生变化的String(ColorContainer值)。

最后,为了使RaisedButton具有类似于GestureDetector的新闻功能,我将其包装在onTap中,并控制RaisedButton调用中状态的变化。

这是我的完整代码:

import 'package:flutter/material.dart';


void main() {
  runApp(new MaterialApp(
      home: new MyApp()));
}

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new _MyAppState();
  }
}

class _MyAppState extends State<MyApp> {
  Color _myColor = Colors.green;
  String _myAccountState = "Account Enabled";

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("Manage Accounts"),
        centerTitle: true,
      ),
      body: new Center(
          child: new GestureDetector(
            child: new Container(
              decoration: new BoxDecoration(color: Colors.grey),
              child: new Text(
                _myAccountState, style: new TextStyle(color: _myColor),),
            ),
            onTap: () {
              setState(() {
                if (_myColor == Colors.green) {
                  _myAccountState = "Account Disabled";
                  _myColor = Colors.orange;
                }
                else {
                  _myAccountState = "Account Enabled";
                  _myColor = Colors.green;
                }
              });
            },

          )
      ),
    );
  }

}

PS:对于开/关行为,您绝对可以使用Container并产生类似的行为,如下所示:
return new Scaffold(
      appBar: new AppBar(
        title: new Text("Manage Accounts"),
        centerTitle: true,
      ),
      body: new Center(
        child: new Column(
          children: <Widget>[
            new Text(_myAccountState),
            new RaisedButton(
                child: new Text("Click Me"), color: _myColor, onPressed: () {
              setState(() {
                if (_myColor == Colors.green) {
                  _myAccountState = "Account Disabled";
                  _myColor = Colors.red;
                }
                else {
                  _myAccountState = "Account Enabled";
                  _myColor = Colors.green;
                }
              });
            })
          ],
        ),
      ),
    );

但是,我尝试将GestureDetectorRaisedButton结合使用的唯一原因是回答您的第二个问题,我不确定如何将rinktWrap与ojit_code结合使用。

10-08 03:23