Как сделать DataTable в расположении внутри стека прокручиваемым

#flutter #dart

#flutter #dart

Вопрос:

Я хочу иметь возможность прокручивать DataTable() для просмотра всех строк таблицы.

Вот мой пользовательский интерфейс:

введите описание изображения здесь

И вот код.

 Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.grey[200],
      body: Stack(
        overflow: Overflow.visible,
        children: <Widget>[
          // Header amp; Overlap
          Positioned(
            ...
            child: CustomHeaderContainer(),
          ),
          Positioned(
            ...
            child: Container(
              color: Colors.white,
              width: MediaQuery.of(context).size.width * 0.9,
              height: 50,
            ),
          ),
          //

          // TODO: Make the table below scrollable
          Positioned( //*3
            ...
            child: Container( //*2
              color: Colors.white,
              width: MediaQuery.of(context).size.width * 0.9,
              child: DataTable( //*1
                columns: [
                  DataColumn(label: Text('Name')),
                  DataColumn(label: Text('Year')),
                ],
                rows: [
                  DataRow(cells: [
                    DataCell(Text('Dash')),
                    DataCell(Text('2018')),
                  ]),
                  DataRow(cells: [
                    DataCell(Text('Gopher')),
                    DataCell(Text('2009')),
                  ]),
                  ...
                ],
              ),
            ),
          ),
        ],
      ),
    );
  }
  

* Вот что произойдет, если я попытаюсь добавить SingleChildScrollView:

  1. Таблица данных: без прокрутки и без ошибок
  2. Контейнер: нет прокрутки и нет ошибки
  3. Позиционирование: ошибка, неправильное использование ParentDataWidget и отсутствие scoll

Ответ №1:

попробуйте использовать пользовательский скроллер со списком sliver

 CustomScrollView(
        slivers: <Widget>[
          SliverList(delegate: SliverChildListDelegate([
            ...children
          ])),
        ],
      )