我在 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(...), ...)
?这是最好的方法吗?
最佳答案
在 app_properties_bloc.dart
中为应用属性创建一个 BLoC
final appBloc = AppPropertiesBloc();
class AppPropertiesBloc{
StreamController<String> _title = StreamController<String>();
Stream<String> get titleStream => _title.stream;
updateTitle(String newTitle){
_title.sink.add(newTitle);
}
dispose() {
_title.close();
}
}
像这样在 AppBar 中使用流生成器:
AppBar(
title: StreamBuilder<Object>(
stream: appBloc.titleStream,
initialData: "Main Dart",
builder: (context, snapshot) {
return Text(snapshot.data);
}
),
),
使用它来更新按钮的 onPressed() 上的标题
onPressed: () {
appBloc.updateTitle('new title');
},
关于dart - 如何以编程方式更改其子项中 main.dart AppBar 的标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55738886/