fli*_*lix 3 appbar dart flutter
我有一个AppBar
输入main.dart
,我想将它定义为它的孩子的主要内容,但是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);
},
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
或者我需要放入Scaffold(appBar:AppBar(...), ...)
每个屏幕?这是最好的方法吗?
在应用程序属性中有一个 BLoC app_properties_bloc.dart
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();
}
}
Run Code Online (Sandbox Code Playgroud)
在 AppBar 中使用流生成器,如下所示:
AppBar(
title: StreamBuilder<Object>(
stream: appBloc.titleStream,
initialData: "Main Dart",
builder: (context, snapshot) {
return Text(snapshot.data);
}
),
),
Run Code Online (Sandbox Code Playgroud)
使用它来更新按钮 onPressed() 上的标题
onPressed: () {
appBloc.updateTitle('new title');
},
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3490 次 |
最近记录: |