Горизонтальное расположение флаттера - виджет без прокрутки рядом с виджетом с прокруткой (SingleChildScrollView) - PullRequest
0 голосов
/ 13 марта 2020

Я хочу DataTable (), который показывает не прокручиваемый столбец, заблокированный слева. (столбец «Times»), в то время как даты справа могут прокручиваться так же, как при использовании «стоп-столбца» в Excel.

Мой метод состоял в том, чтобы начать с рабочего виджета SingleChildScrollView с датами и добавить это в строку с не прокручиваемым виджетом. Однако, когда я добавляю виджет строки с виджетами, которые нельзя прокручивать и прокручивать, SingleChildScrollView «блокируется» и переполняется вправо.

Я создал дартпад, чтобы показать мой код здесь: https://dartpad.dev/c7c35fcd605837159f91e12a25a2b4d7

Дартпад начинается с моей закомментированной попытки показать работающий SingleChildScrollView. Вы можете увидеть, как я пытался заставить его работать, раскомментировав четыре строки в верхней части корпуса скаффолда и три строки рядом с концом.

На случай, если дартпад недоступен, вот код: включая комментированные попытки заставить его работать:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatelessWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title),
      ),
      body: 
//       SafeArea( child: //  <--- uncomment out
//             Row( //  <--- uncomment out
//             children: [ // <--- uncomment out
//            TestTimeData(label: "Times"), // <--- uncomment out
            SingleChildScrollView(
              scrollDirection: Axis.horizontal,
              child: Row(
                children: [ // <--- comment this out
                  TestDayData(label: "   Monday\n 03-09-2020"),
                  TestDayData(label: "   Tuesday\n 03-10-2020"),
                  TestDayData(label: " Wednesday\n 03-11-2020"),
                  TestDayData(label: "  Thursday\n 03-12-2020"),
                  TestDayData(label: "    Friday\n 03-13-2020"),
                  TestDayData(label: "  Saturday\n 03-14-2020"),
                  TestDayData(label: "    Sunday\n 03-15-2020"),
                ],
              ),
            ),
//           ], // <--- uncomment out
//         ), // <--- uncomment out
//       ), //  <--- uncomment out
    );
  }
}

class TestDayData extends StatelessWidget {
  final List<String> timesList = [
    "This is",
    "a bunch",
    "of strings",
  ];

  final String label;

  TestDayData({Key key, this.label}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      child: DataTable(
        showCheckboxColumn: false,
        columns: [
          DataColumn(
            label: Center(child: Text(label)),
            numeric: false,
          ),
        ],
        rows: timesList
            .map(
              (times) => DataRow(cells: [
                DataCell(
                  Text(times.toString()),
                ),
              ]),
            )
            .toList(),
      ),
    );
  }
}

class TestTimeData extends StatelessWidget {
  final List<String> timesList = [
    "08:00",
    "09:00",
    "10:00",
  ];

  final String label;

  TestTimeData({Key key, this.label}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      child: DataTable(
        showCheckboxColumn: false,
        columns: [
          DataColumn(
            label: Center(child: Text(label)),
            numeric: false,
          ),
        ],
        rows: timesList
            .map(
              (times) => DataRow(cells: [
                DataCell(
                  Text(times.toString()),
                ),
              ]),
            )
            .toList(),
      ),
    );
  }
}
...