如何在 Flutter 中对齐小部件内的按钮

Posted

技术标签:

【中文标题】如何在 Flutter 中对齐小部件内的按钮【英文标题】:How to align button within a widget in Flutter 【发布时间】:2021-02-06 06:31:55 【问题描述】:

尝试在无需支付开发人员费用的情况下进行一点小改动......我想将按钮与屏幕底部对齐,但我似乎只能将其放置在可滚动文本区域内。它需要显示出来,以便查看者无需滚动即可看到按钮。

这是该页面的代码:

Widget showEveryday2Card() 
    return FlipCard(
      onFlip: () => _sound.playLocal("shuffle.mp3"),
      direction: FlipDirection.HORIZONTAL, // default
      //front: Image.asset('images/cards/24.png'),
      front: Container(
        color: Colors.white,
        child: Align(
          alignment: Alignment.center,
          child: Image.asset('images/cards/24.png'),
        ),
      ),
      back: Container(
        color: Colors.white,
        child: Stack(children: <Widget>[
          Positioned.fill(
            child: Align(
              alignment: Alignment.center,
              child: Image.asset('images/cards/cardbacks/back24.png'),
            ),
          ),
          Center(
            child: Container(
              padding: EdgeInsets.only(
                  top: (MediaQuery.of(context).size.height > 800)
                      ? 20
                      : (MediaQuery.of(context).size.height > 700) ? 10 : 0),
              height: 0.5 * MediaQuery.of(context).size.height,
              width: 0.8 * MediaQuery.of(context).size.width,
              child: Center(
                child: CupertinoScrollbar(
                  isAlwaysShown: true,
                  controller: _controller,
                  child: ListView(children: <Widget>[
                    Text(
                      "Scrollable text",
                      style: TextStyle(
                        fontFamily: 'GillSansMT',
                        fontWeight: FontWeight.normal,
                        color: Colors.black,
                        fontSize: (MediaQuery.of(context).size.height > 900)
                            ? 30
                            : 14,
                      ),
                    ),
                    new RaisedButton(
                      onPressed: () 
                        Navigator.pop(context);
                        ,
                        child: Text('Go back!'),
                    )
                  ]),
                ),
              ),
            ),
          ),
        ]),
      ),
    );
  

如果您能指出正确的方向,我将不胜感激。

谢谢!

【问题讨论】:

【参考方案1】:
return FlipCard(
  onFlip: () => _sound.playLocal("shuffle.mp3"),
  direction: FlipDirection.HORIZONTAL, // default
  //front: Image.asset('images/cards/24.png'),
  front: Container(
    color: Colors.white,
    child: Align(
      alignment: Alignment.center,
      child: Image.asset('images/cards/24.png'),
    ),
  ),
  back: Container(
    color: Colors.white,
    child: Stack(children: <Widget>[
      Positioned.fill(
        child: Align(
          alignment: Alignment.center,
          child: Image.asset('images/cards/cardbacks/back24.png'),
        ),
      ),
      Center(
        child: Container(
          padding: EdgeInsets.only(
              top: (MediaQuery.of(context).size.height > 800)
                  ? 20
                  : (MediaQuery.of(context).size.height > 700)
                      ? 10
                      : 0),
          height: 0.5 * MediaQuery.of(context).size.height,
          width: 0.8 * MediaQuery.of(context).size.width,
          // Made some changes here
          child: Column(children: [
            Expanded(
              child: CupertinoScrollbar(
                  isAlwaysShown: true,
                  controller: _controller,
                  child: ListView(children: <Widget>[
                    Text("Scrollable text" * 1000,
                        style: TextStyle(
                          fontFamily: 'GillSansMT',
                          fontWeight: FontWeight.normal,
                          color: Colors.black,
                          fontSize:
                              (MediaQuery.of(context).size.height > 900)
                                  ? 30
                                  : 14,
                        ))
                  ])),
            ),
            // SizedBox(height: 10), // Uncomment if you need some space
            RaisedButton(
              onPressed: () 
                Navigator.pop(context);
              ,
              child: Text('Go back!'),
            )
          ]),
        ),
      ),
    ]),
  ),
);

尝试用这段代码替换函数体。

【讨论】:

以上是关于如何在 Flutter 中对齐小部件内的按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中对齐单个小部件?

颤振:单击该小部件内的按钮后如何将小部件更改为另一个小部件

Flutter - 如何对齐(小部件)孙小部件与孩子相同

Flutter 中的索引堆叠。如何在所有其他小部件之上显示容器?

无法在 Flutter 中正确对齐小部件

如何将特定元素与列小部件内的左侧对齐