(Flutter)DataTable行的DataCell内的水平ListView.Builder

时间:2020-10-14 21:55:31

标签: flutter

我应该说,在将ListViews放入列,行等内部时始终遇到问题,而不会出现大量错误,也不必真正找到解决方法。我已经搜索了这个,却找不到有效的解决方案。

我正在尝试将ListView.builder放在DataTable的每个DataCell中。这是我编造的一个例子。

我尝试了很多不同的事情-将ListView放入具有设置的宽度/高度的容器中,将其放入Flexible中,将其放入Column / Row中,然后不断地进行。我还尝试了ListView.builder中属性的各种变体(例如,shrinkWrap的打开和关闭,物理和无物理等),每种都给我新的错误,但它们都不起作用。

  Widget build(BuildContext context) {
List<DataRow> _testRows = [
  DataRow(
    cells: [
      DataCell(
        ListView.builder(
          shrinkWrap: true,
          physics: NeverScrollableScrollPhysics(),
          itemCount: 3,
          scrollDirection: Axis.horizontal,
          itemBuilder: (BuildContext context, int index) {
            return Text(index.toString());
          },
        ),
      ),
      DataCell(
        Text('Data B'),
      ),
      DataCell(
        Text('Data C'),
      ),
    ],
  ),
];

return Scaffold(
  body: DataTable(
    columns: const <DataColumn>[
      DataColumn(
        label: Text('Column A'),
      ),
      DataColumn(
        label: Text('Column B'),
      ),
      DataColumn(
        label: Text('Column C'),
      ),
    ],
    rows: _testRows,
  ),
);

}

1 个答案:

答案 0 :(得分:0)

您可以在下面复制粘贴运行完整代码
在这种情况下,您可以使用function _testRows()并用ListView包裹Container并设置width
代码段

 List<DataRow> _testRows() {
    return [
      DataRow(
        cells: [
          DataCell(
            Container(
              width: 100,
              child: ListView.builder(

工作演示

enter image description here

完整代码

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

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

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

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<DataRow> _testRows() {
    return [
      DataRow(
        cells: [
          DataCell(
            Container(
              width: 100,
              child: ListView.builder(
                shrinkWrap: true,
                physics: NeverScrollableScrollPhysics(),
                itemCount: 3,
                scrollDirection: Axis.horizontal,
                itemBuilder: (BuildContext context, int index) {
                  return Text(index.toString());
                },
              ),
            ),
          ),
          DataCell(
            Text('Data B'),
          ),
          DataCell(
            Text('Data C'),
          ),
        ],
      ),
    ];
  }

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: DataTable(columns: const <DataColumn>[
          DataColumn(
            label: Text('Column A'),
          ),
          DataColumn(
            label: Text('Column B'),
          ),
          DataColumn(
            label: Text('Column C'),
          ),
        ], rows: _testRows()),
      ),
    );
  }
}