如何以编程方式更改其子项中 main.dart AppBar 的标题?

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(...), ...)每个屏幕?这是最好的方法吗?

Kal*_*ani 6

在应用程序属性中有一个 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)

  • 为什么看起来像用机枪杀死一只苍蝇?? (5认同)