【发布时间】:2021-05-15 19:41:58
【问题描述】:
展开列表然后单击子项后,我希望单击的行更改颜色。此时,索引一直为0,这导致所有子项都被突出显示。如何获取正确的索引,以便仅突出显示单击的行?
当前状态:
车辆类别:
class Vehicle {
final String title;
List<String> contents = [];
final IconData icon;
Vehicle(this.title, this.contents, this.icon);
}
对象列表:
List<Vehicle> vehicles = [
Vehicle(
'Bike',
['Vehicle no. 1', 'Vehicle no. 2', 'Vehicle no. 7', 'Vehicle no. 10'],
Icons.motorcycle,
),
Vehicle(
'Cars',
['Vehicle no. 3', 'Vehicle no. 4', 'Vehicle no. 6'],
Icons.directions_car,
),
];
小部件:
class CreateNewViewPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => _CreateNewViewPage();
}
class _CreateNewViewPage extends State<CreateNewViewPage> {
int _selectedIndex;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: const Color(0xFF000624),
appBar: AppBar(
elevation: 0,
backgroundColor: Colors.transparent,
title: Text(
'Example',
style: TextStyle(color: Colors.white),
),
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
Navigator.pop(context);
},
),
),
body: Column(
children: <Widget>[
Divider(
color: Colors.white,
),
Expanded(
child: Container(
width: MediaQuery.of(context).size.width / 1.4,
child: ListView.builder(
itemCount: 2,
itemBuilder: (context, index) {
return Card(
child: ExpansionTile(
title: Text(vehicles[index].title, style: TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold, fontStyle: FontStyle.italic),),
children: <Widget>[
Column(
children: _buildExpandableContent(vehicles[index], index),
),
],
),
);
},
),
),
)
],
),
);
}
_buildExpandableContent(Vehicle vehicle, index) {
List<Widget> columnContent = [];
for (String content in vehicle.contents)
columnContent.add(
ListTile(
title: Text(content, style: new TextStyle(fontSize: 18.0),),
leading: Icon(vehicle.icon),
tileColor: _selectedIndex == index ? Colors.blue : null,
onTap: () {
setState(() {
_selectedIndex = index;
});
},
),
);
return columnContent;
}
}
【问题讨论】:
标签: flutter user-interface flutter-layout expandablelistview