Flutter:更改DataTable行和列的颜色

时间:2018-09-24 17:56:07

标签: dart flutter flutter-layout

我的数据表很小,我想更改列和行的背景色 但不幸的是,DataColumn或DataRow中没有属性可实现此目的。 我发现的唯一方法是通过修改DataColumn的标签

DataColumn(label: Container(child: Text('Person'),color: Colors.amberAccent,)),

但是DataColumn有默认的填充,并且颜色仅适用于文本。

这是我的代码:

class _ContactLocationsState extends State<ContactLocations> {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: DataTable(columns: <DataColumn>[
        DataColumn(label: Text('Person')),
        DataColumn(label: Text('Rating')),
        DataColumn(label: Text('Distance')),
        DataColumn(label: Text('Max Price')),
        DataColumn(label: Text('Fee')),
      ], rows: <DataRow>[
        DataRow(
          cells: <DataCell>[
            DataCell(Text("test")),
            DataCell(Text("test")),
            DataCell(Text("test")),
            DataCell(Text("test")),
            DataCell(Text("test")),
          ],
        ),
      ]),
    );
  }
}

2 个答案:

答案 0 :(得分:0)

我找到了一种方法,可以使您获得与表格完全相同的外观,并且还可以使用 Row (行)和 Expanded (扩展)小部件来更改背景颜色。 希望以下代码对您有所帮助。

import 'package:flutter/material.dart';

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

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

  class MyHomePage extends StatefulWidget {
    @override
    _MyHomePageState createState() => _MyHomePageState();
  }

  class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
    AnimationController _controller;

    @override
    void initState() {
      _controller = AnimationController(vsync: this);
      super.initState();
    }

    @override
    void dispose() {
      _controller.dispose();
      super.dispose();
    }


      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Container(
              child: Center(
                child: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                    Row(
                      children: <Widget>[
                        Expanded(
                          child: Container(
                              color: Colors.green,
                              child: Text("person")
                          ),
                        ),Expanded(
                          child: Container(
                              color: Colors.red,
                              child: Text("Rating")
                          ),
                        ),Expanded(
                          child: Container(
                              color: Colors.green,
                              child: Text("Distance")
                          ),
                        ),Expanded(
                          child: Container(
                              color: Colors.red,
                              child: Text("Max Price")
                          ),
                        ),Expanded(
                          child: Container(
                              color: Colors.green,
                              child: Text("Free")
                          ),
                        ),
                      ],
                    ),
                    Row(
                      children: <Widget>[
                        Expanded(
                          child: Container(
                              color: Colors.red,
                              child: Text("Test")
                          ),
                        ),Expanded(
                          child: Container(
                              color: Colors.green,
                              child: Text("Test")
                          ),
                        ),Expanded(
                          child: Container(
                              color: Colors.red,
                              child: Text("Test")
                          ),
                        ),Expanded(
                          child: Container(
                              color: Colors.green,
                              child: Text("Test")
                          ),
                        ),Expanded(
                          child: Container(
                              color: Colors.red,
                              child: Text("Test")
                          ),
                        ),
                      ],
                    ),
                  ],
                ),
              )
          ),
        );
      }
    }

答案 1 :(得分:0)

如果你还在寻找答案,你可以使用 MaterialStateColor 属性。这是工作代码

 return DataRow.byIndex(
              index: row.key,
              color: MaterialStateColor.resolveWith(
                (states) {
                  if (row.key % 2 == 0) {
                    return Colors.blue[50];
                  } else {
                    return Colors.white;
                  }
                },
              ),