有没有一种方法可以根据Flutter中的可用空间来自动调整Table小部件的行高?

问题描述 投票:0回答:1

我一直在尝试使用Table小部件在Flutter中创建一个表,并使其扩展到屏幕底部,而无需滚动查看整个表。但是,“文本”小部件似乎将行强制具有特定的高度,从而导致最后一行溢出。

[一个有趣的旁注是,表所在的扩展小部件不会溢出屏幕,因此即使表溢出了扩展小部件也不会显示错误消息。相反,似乎表格在“扩展”小部件内溢出。

示例代码:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter table example',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter table example'),
        ),
        body: Column(
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.all(4.0),
              child: Image.network('https://imgs.xkcd.com/comics/minifigs.png'),
            ),
            Expanded(
              child: Container(
                padding: const EdgeInsets.all(6.0),
                child: Table(
                  columnWidths: {
                    0: FlexColumnWidth(1),
                    1: FlexColumnWidth(2),
                    2: FlexColumnWidth(2),
                  },
                  border: TableBorder(
                      horizontalInside: new BorderSide(color: Colors.grey[300], width: 1)
                  ),
                  defaultVerticalAlignment: TableCellVerticalAlignment.middle,
                  children:
                  List<TableRow>.generate(10, (int i){
                    return TableRow(
                        children: [
                          Padding(
                            padding: const EdgeInsets.all(8.0),
                            child: Text(
                              (1990 + i).toString(),
                              style: TextStyle(
                                fontWeight: FontWeight.bold,
                                fontSize: 14,
                              ),
                            ),
                          ),
                          Padding(
                            padding: const EdgeInsets.all(8.0),
                            child: Text(
                              'Normal people',
                              textAlign: TextAlign.center,
                            ),
                          ),
                          Padding(
                            padding: const EdgeInsets.all(8.0),
                            child: Text(
                              'Lego people',
                              textAlign: TextAlign.center,
                            ),
                          ),
                        ]
                    );
                  }),
                ),
              ),
            )
          ],
        ),
      ),
    );
  }
}

和输出:

Screenshot of example app with overflowing table

flutter flutter-layout flutter-text
1个回答
0
投票

希望这会有所帮助

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter table example',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter table example'),
        ),
        body: Container(
          child: ListView(
            shrinkWrap:true,
            children: <Widget>[
              Padding(
                padding: const EdgeInsets.all(4.0),
                child:
                    Image.network('https://imgs.xkcd.com/comics/minifigs.png'),
              ),
                 Container(
                  padding: const EdgeInsets.all(6.0),
                  child: Table(
                    columnWidths: {
                      0: FlexColumnWidth(1),
                      1: FlexColumnWidth(2),
                      2: FlexColumnWidth(2),
                    },
                    border: TableBorder(
                        horizontalInside:
                            new BorderSide(color: Colors.grey[300], width: 1)),
                    defaultVerticalAlignment: TableCellVerticalAlignment.middle,
                    children: List<TableRow>.generate(20, (int i) {
                      return TableRow(children: [
                        Padding(
                          padding: const EdgeInsets.all(8.0),
                          child: Text(
                            (1990 + i).toString(),
                            style: TextStyle(
                              fontWeight: FontWeight.bold,
                              fontSize: 14,
                            ),
                          ),
                        ),
                        Padding(
                          padding: const EdgeInsets.all(8.0),
                          child: Text(
                            'Normal people',
                            textAlign: TextAlign.center,
                          ),
                        ),
                        Padding(
                          padding: const EdgeInsets.all(8.0),
                          child: Text(
                            'Lego people',
                            textAlign: TextAlign.center,
                          ),
                        ),
                      ]);
                    }),
                  ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

© www.soinside.com 2019 - 2024. All rights reserved.