Прежде всего вам необходимо преобразовать ваш Stateless
виджет в виджет с сохранением состояния.Затем установите значки в виде списка переменных.
class TabBarDemoState extends State<TabBarDemo> {
var icons = List<Icon>();
initState() {
super.initState();
icons = [
Icon(Icons.directions_car),
Icon(Icons.directions_transit),
Icon(Icons.directions_bike),
];
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: DefaultTabController(
length: 3,
child: Scaffold(
appBar: AppBar(
bottom: TabBar(
tabs: icons,
),
title: Text('Tabs Demo'),
),
body: TabBarView(
children: icons,
),
),
),
);
}
}
Теперь скажите, что хотите удалить значок из списка.Напишите для него метод обратного вызова, например, нажатие кнопки.Вызывайте этот метод при нажатии кнопки или при возникновении события.Примерно так:
class TabBarDemoState extends State<TabBarDemo> {
var icons = List<Icon>();
initState() {
super.initState();
icons = [
Icon(Icons.directions_car),
Icon(Icons.directions_transit),
Icon(Icons.directions_bike),
];
}
void removeAnIcon() {
if (icons.isNotEmpty) {
setState({
icons.removeAt(0);
});
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: DefaultTabController(
length: 3,
child: Scaffold(
appBar: AppBar(
bottom: TabBar(
tabs: icons,
),
title: InkWell(
onTap: () => removeAnIcon(),
Text('Tabs Demo')
),
),
body: TabBarView(
children: icons,
),
),
),
);
}
}
Когда вы вызываете setState
, функция сборки вызывается снова и дерево виджетов перестраивается.Поэтому, когда вы нажимаете на заголовок, вы удаляете один значок и получаете на один значок меньше.Подробнее о Stateful
виджетах здесь