У меня проблема с обновлением состояния. Мне нужно передать функцию с setState
в виджет, но я не знаю, как. Проблема в том, что мне нужно передать функцию stati c, и там я не могу выполнить setState
. Какие варианты мне нужно исправить?
Мой код
class NavigationBar extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _NavigationBarState();
}
}
class _NavigationBarState extends State<NavigationBar> {
bool showMusicTab = false;
bool openMusicTab = false;
int index = 4;
final List<Widget> screens = [
Home(),
Search(),
AddPost(),
Notifications(),
Profile(showMusicTabAndPlay)
];
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
body: screens[index],
persistentFooterButtons: showMusicTab
? <Widget>[
Container(
color: Colors.black,
height: 20,
width: MediaQuery.of(context).size.width,
child: ListTile(
leading: Icon(Icons.favorite_border, color: Colors.white),
title: Center(
child: InkWell(
onTap: () {},
child: Text(
'Break my soul',
style: TextStyle(
color: Colors.white,
fontFamily: kRobotoBold,
fontWeight: FontWeight.bold),
),
),
),
trailing: Icon(
Icons.pause_circle_filled,
color: Colors.white,
),
),
)
]
: null,
bottomNavigationBar: BottomNavigationBar(
currentIndex: index,
onTap: (int index) {
setState(() {
this.index = index;
});
},
type: BottomNavigationBarType.fixed,
showSelectedLabels: false,
showUnselectedLabels: false,
backgroundColor: Colors.black,
items: [
new BottomNavigationBarItem(
icon: new Icon(
Icons.home,
color: index == 0 ? Colors.pinkAccent : Colors.white,
),
title: new Text('Home'),
),
new BottomNavigationBarItem(
icon: new Icon(
Icons.search,
color: index == 1 ? Colors.pinkAccent : Colors.white,
),
title: new Text('Search'),
),
new BottomNavigationBarItem(
icon: new Icon(
Icons.add_circle,
color: index == 2 ? Colors.pinkAccent : Colors.white,
),
title: new Text('Add post'),
),
new BottomNavigationBarItem(
icon: new Icon(
Icons.notifications,
color: index == 3 ? Colors.pinkAccent : Colors.white,
),
title: new Text('Notifications'),
),
new BottomNavigationBarItem(
icon: Icon(
Icons.person,
color: index == 4 ? Colors.pinkAccent : Colors.white,
),
title: Text('Profile'))
],
),
);
}
static void showMusicTabAndPlay() {
setState(() {
showMusicTab = true;
});
}
}