我在main.dart
中有一个AppBar
,我想在它的子页面上将它定义为主要的,但是我想在子页面上更改AppBar
本身的标题,我如何正确地做到这一点?
void main() => runApp(MyApp());
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "Flutter App",
theme: ThemeData(
primaryColor: Colors.cyan,
brightness: Brightness.dark
),
home: Scaffold(
appBar: AppBar(
title: Text("Main Dart"),
),
body: HomeScreen(),
),
routes: <String, WidgetBuilder>{
'/homeScreen': (buildContext)=>HomeScreen(),
'/second': (buildContext)=>Second()
},
);
}
}
//HomeScreen or Second Widget on different dart file
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
//here I want to change the title of Main Dart to HomeScreen
return Container(
child: Center(
child: FlatButton(
child: new Text("Home screen"),
onPressed: (){
Route route = MaterialPageRoute(builder: (context) => Second());
Navigator.push(context, route);
},
),
),
);
}
}
或者我需要在每个屏幕中放置Scaffold(appBar:AppBar(...), ...)
?这是最好的方法?
5条答案
按热度按时间qzwqbdag1#
在
app_properties_bloc.dart
中具有应用程序属性的BLoC在AppBar中使用流构建器,如下所示:
使用此项更新按钮onPressed()的标题
nmpmafwu2#
如果你只是改变了支架的标题,那么这将是工作。
我正在创建一个
DefaultScaffold
,每个屏幕都提供了标题。这里的代码将显示MainPage
和另外两个页面,它们具有相同的AppBar
,但标题发生了变化。注意:这是一个简单的解决方法,可能不是最好的方法。
eivgtgni3#
您可以使用回呼函式,从
child
更新parent
的状态。父类:
子类别
参考编号:
mrwjdhj34#
可以选择使用ValueListenableBuilder。
使用示例变量
然后按以下块中所示设置应用栏:
之后,你可以简单地在另一个类中设置appTitle.value。标题也会被改变,因为它会监听那个值。
iyfamqjs5#
这里的一些答案太复杂了。这里是一个完整的工作示例使用应用程序栏更新从儿童与scafold小部件。
你可以在 dart 垫run the example