import 'package:flutter/material.dart';
class FilterScreen extends StatelessWidget {
FilterScreen({Key? key}) : super(key: key);
final List<String> games = ['Football', 'Cricket', 'Chess'];
final ValueNotifier<String> selectedGame = ValueNotifier('Football');
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ListenableBuilder(
listenable: selectedGame,
builder: (context, child) {
return Text('Favourite Game : ${selectedGame.value}');
}),
FilterPanel(
list: games,
onSelected: (index) {
selectedGame.value = games[index];
}),
],
),
);
}
}
class FilterPanel extends StatefulWidget {
final List<String> list;
final void Function(int)? onSelected;
const FilterPanel({
Key? key,
required this.list,
this.onSelected,
}) : super(key: key);
@override
State<FilterPanel> createState() => _FilterPanelState();
}
class _FilterPanelState extends State<FilterPanel> {
int selectedIndex = 0;
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(color: Colors.grey, borderRadius: BorderRadius.circular(9)),
height: 30,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: List<Widget>.generate(
widget.list.length,
(index) => GestureDetector(
onTap: () {
setState(() {
selectedIndex = index;
widget.onSelected?.call(index);
});
},
child: Chip(
label: Text(widget.list[index]),
backgroundColor: index == selectedIndex ? Colors.red : Colors.white,
),
),
),
),
);
}
}
如果您的 Flutter 版本较低并且没有ListenableBuilder
, 您可以使用AnimatedBuilder
.
AnimatedBuilder(
animation: selectedGame,
builder: (context, child) {
return Text('Favourite Game : ${selectedGame.value}');
}),