点击时如何更改 ListTile 背景颜色?

How to change ListTile background color when tapped?

我到处搜索,但找不到更改 ListTile 背景颜色的方法,例如当用户点击它时。

有没有人对看似常见的用例有解决方案?

更改 ListTile, you can simply wrap it in a Container 的背景颜色并更改其 color 属性。之后,当 ListTileonTap 被触发时,您可以更改颜色。

演示:

演示来源:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: CustomTile()
        ),
      ),
    );
  }
}

class CustomTile extends StatefulWidget {
  @override
  CustomTileState createState() => CustomTileState();
}

class CustomTileState extends State<CustomTile> {
  Color color;

  @override
  void initState() {
    super.initState();

    color = Colors.transparent;
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      color: color,
      child: ListTile(
        title: Text('Title'),
        subtitle: Text('Subtitle'),
        onTap: () {
          setState(() {
            color = Colors.lightBlueAccent;
          });
        },
      ),
    );
  }
}

由于您没有描述您的用例或共享任何代码,我已经共享了更改 Listile 颜色的示例代码 onTap()

class Screen1 extends StatefulWidget {
  @override
  Screen1State createState() {
    return new Screen1State();
  }
}

class Screen1State extends State<Screen1> {
  bool _color;

  @override
  void initState() {
    super.initState();
    _color = true;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Center(
      child: Card(
        color: _color ? Colors.deepOrangeAccent : Colors.purpleAccent,
        child: ListTile(
          onTap: () {
            setState(() {
              _color = !_color;
            });
          },
          title: Text(
            'Title',
            style: TextStyle(color: Colors.white),
          ),
          subtitle: Text(
            'Subtitle',
            style: TextStyle(color: Colors.white),
          ),
        ),
      ),
    ));
  }
}

如果您只是想要一种快速的方法,不需要太多代码和定制,您可以像这样用 RaisedButton 包装它:

RaisedButton(
  color: ...
  child: ListTile(
    color: Colors.transparent,
    ...
  )

)

您还可以使用许多属性,例如高程、突出显示颜色、焦点颜色等等。