я только начал изучать трепетание, я использую виджет с сохранением состояния, следующий код ниже - это файл main.dart
void main() {
runApp(App());
}
class App extends StatefulWidget {
@override
_AppState createState() => _AppState();
}
class _AppState extends State<App> {
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: new Scaffold(backgroundColor: Colors.blueGrey.shade100,
body: Home.Homescreen(HomeText: "default",), //initially setting text to default
appBar: new AppBar(
centerTitle: true,
title: new Text("newApp",
textDirection: TextDirection.ltr,
style: TextStyle(fontSize:20 ,color: Colors.white)),
),
bottomNavigationBar: new BottomNavigationBar(items: [
new BottomNavigationBarItem(
icon: Icon(Icons.home),
title: new Text(
"Home",
textDirection: TextDirection.ltr,
)),
new BottomNavigationBarItem(
icon: Icon(Icons.face),
title: new Text(
"Profile",
textDirection: TextDirection.ltr,
)),
new BottomNavigationBarItem(
icon: Icon(Icons.exit_to_app),
title: new Text(
"Exit",
textDirection: TextDirection.ltr,
)),
],onTap: (int item){
if(item == 0){
setState(() {
Home.Homescreen(HomeText:'this is home'); /* this should change homescreen text but it still says default same for all the below as well*/
});
}
else if(item == 1){
setState(() {
Home.Homescreen(HomeText:'this is proile');
});
}
else if(item == 2){
setState(() {
Home.Homescreen(HomeText:'this is exit');
});
}
},),
));
}
}
в этом виджете без сохранения состояния вызывается приложение и в _AppState в Scaffold тело назначается виджету без сохранения состояния «HomeScreen», экспортированному как Home в main под BottomNavigationBar, для элементов назначается int, который при нажатии должен соответствующим образом изменить HomeText, но он не обновляется, он остается тем же на домашнем экране, просто говоря «default» это то, что он был первоначально назван, следующий код для home_screen.dart, который называется
class Homescreen extends StatefulWidget{
Homescreen({this.HomeText}); // init hometext
String HomeText;
@override
_Homescreen createState() => _Homescreen();
}
class _Homescreen extends State<Homescreen>{
@override
Widget build(BuildContext context) {
// TODO: implement build
return new Center(
child: new Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
new Text(
widget.HomeText, // this is what should be updated when called
textDirection: TextDirection.ltr,
style: new TextStyle(fontSize: 30,color: Colors.black),
)
],
),
);
}
}
я не понимаю, почему домашний текст не обновляется, когда значки (bottomnavigationbaritems) коснулись, я ' мы проверили значения, используя debugprint, они возвращают 0,1,2. Так, по крайней мере, правильно.