【问题标题】:Flutter - Text not visible inside FlatButton with FittedBoxFlutter - 带有 FittedBox 的 FlatButton 内的文本不可见
【发布时间】:2020-12-07 04:49:24
【问题描述】:

我正在学习颤振,并尝试设计一个由单元格组成的表格,其中包含旨在执行某些操作的平面按钮。当我尝试使用 FlatButton 创建 TableCell 时,FlatButton 文本会垂直呈现,而当我使用 FittedBox 将其水平对齐时,FlatButton 文本会消失,这里可能出了什么问题,是否有任何解决方法?请在下面找到代码sn-p

Widget build(BuildContext context) {
    final deviceSize = MediaQuery.of(context).size;
    return Stack(
      children: [
        Container(
          height: deviceSize.height,
          width: deviceSize.width,
          decoration: const BoxDecoration(
            gradient: LinearGradient(colors: [
              Color(0xffee0979),
              Color(0xffff6a00),
              //Color(0xff29ffc6),
            ], begin: Alignment.bottomRight),
          ),
        ),
        Container(
          margin: EdgeInsets.only(bottom: 200),
          child: Center(
            child: Card(
              margin: EdgeInsets.all(12),
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(15.0),
              ),
              elevation: 15,
              child: Container(
                alignment: Alignment.topRight,
                height: deviceSize.height * 0.70,
                width: double.infinity,
                padding: EdgeInsets.all(12.0),
                child: Table(
                  border: TableBorder.all(width: 1.2),
                  children: [
                    for (var i = 0; i < 15; i++)
                      TableRow(
                        children: [
                          for (var j = 0; j < 15; j++)
                            TableCell(
                                verticalAlignment:
                                    TableCellVerticalAlignment.middle,
                                child: FlatButton(
                                  onPressed: () {},
                                  child: FittedBox(child: Text('Test')),
                                )),
                        ],
                      ),
                  ],
                ),
              ),
            ),
          ),
        ),
        Container(
          alignment: Alignment.bottomCenter,
          margin: EdgeInsets.only(bottom: 60),
          child: RaisedButton(
            onPressed: () {},
            elevation: 10,
            textColor: Colors.white,
            shape:
                RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
            color: Theme.of(context).primaryColor,
            child: Container(
              width: 100,
              child: Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Icon(Icons.assignment),
                  SizedBox(
                    width: 10,
                  ),
                  Text('Instructions')
                ],
              ),
            ),
          ),
        ),
      ],
    );
  }
}

提前感谢您宝贵的时间!

【问题讨论】:

    标签: android ios flutter flutter-layout


    【解决方案1】:

    在 FittedBox 中添加一个容器来保存子文本可能会起到作用。

    【讨论】:

    • 谢谢...但行为还是一样
    【解决方案2】:

    问题不是对齐或适合单元格内的文本。那是因为你在一行里放的列数很多,才能正常显示在屏幕上。

    你可以做的是减少Column的数量:

    TableRow(
                        children: [
                          for (var j = 0; j < 5; j++)
                            TableCell(
                                verticalAlignment:
                                    TableCellVerticalAlignment.middle,
                                child: FlatButton(
                                  onPressed: () {},
                                  child: Text('Test'),
                                )),
                        ],
                      ),
    

    如果您想在没有滚动视图的情况下连续容纳 15 列。使用 SizedBox:

    TableRow(
                          children: [
                            for (var j = 0; j < 5; j++)
                              SizedBox(
                                width: 50,
                                child: TableCell(
                                  verticalAlignment:
                                      TableCellVerticalAlignment.middle,
                                  child: FittedBox(
                                      child: FlatButton(
                                    onPressed: null,
                                    child: Text('Test'),
                                  )),
                                ),
                              ),
                          ],
                        ),
    

    或者将 Table 放在 SingleChildScrollView 中,scrollDirection 像这样水平:

    SingleChildScrollView(
                  scrollDirection: Axis.horizontal,
                  child: Table(
                    columnWidths: {
                      0: IntrinsicColumnWidth(),
                      1: IntrinsicColumnWidth(),
                      2: IntrinsicColumnWidth(),
                      3: IntrinsicColumnWidth(),
                      4: IntrinsicColumnWidth(),
                    },
                    border: TableBorder.all(width: 1.2),
                    children: [
                      for (var i = 0; i < 15; i++)
                        TableRow(
                          children: [
                            for (var j = 0; j < 5; j++)
                              TableCell(
                                  verticalAlignment:
                                      TableCellVerticalAlignment.middle,
                                  child: FlatButton(
                                    onPressed: null,
                                    child: Text('Test'),
                                  )),
                          ],
                        ),
                    ],
                  ),
                ),
    

    希望对您有所帮助!

    【讨论】:

    • 谢谢!减少行数和列数确实可以解决问题,但我需要在这里有 15x15 的表
    • 我刚刚用 SizedBox 和 SingleChildScrollView 案例的其他示例更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 2020-06-29
    相关资源
    最近更新 更多