Flutter 如何更改appbar当听Bloc时,我不想在脚手架上使用Bloc builder,而是在appbar上使用BlocBuidler?
简单地说,当底部导航项更改时,我想更改我的应用程序栏。。我无法使用BlocBuilder包装AppBar,如何实现这一点?在您可以使用的Scaffold小部件中Flutter 如何更改appbar当听Bloc时,我不想在脚手架上使用Bloc builder,而是在appbar上使用BlocBuidler?,flutter,dart,flutter-layout,bloc,Flutter,Dart,Flutter Layout,Bloc,简单地说,当底部导航项更改时,我想更改我的应用程序栏。。我无法使用BlocBuilder包装AppBar,如何实现这一点?在您可以使用的Scaffold小部件中 Scaffold( // extendBodyBehindAppBar: true, // extendBody: true, appBar: AppBar( centerTitle: false, brightness: Brightness.li
Scaffold(
// extendBodyBehindAppBar: true,
// extendBody: true,
appBar: AppBar(
centerTitle: false,
brightness: Brightness.light,
leading: IconButton(
icon: const Icon(
Icons.arrow_back,
),
onPressed: () {
Navigator.pop(context);
}),
title: const Text(
'Go back',
),
elevation: 0,
backgroundColor: Colors.transparent,
),
.
.
.
bottomNavigationBar: BottomNavigationWidget()
)//Scaffold;
并创建另一个函数或类作为CustomAppBar,返回AppBar
appBar: PreferredSize(
child: CustomAppBar(),
preferredSize: Size.fromHeight(56),
),
并将文本作为参数传递,如果它为空,则可以为它设置一些默认文本。您不能,因为
Scaffold
appBar属性接受扩展PreferredSizeWidget
类的小部件。使用BlocBuilder
包装Scaffold
,并根据Bloc状态更改AppBar
属性:
return AppBar(
title: Text(
text ?? "Default Text",
),
);
并使用它,但请确保您在Scaffold
上方有BlocProvider
:
class MyAppBar extends StatelessWidget with PreferredSizeWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<YourBloc, YourState>(
builder: (context, state) {
if(state is Selected1) {
return AppBar(...);
} else if (state is Selected2) {
return AppBar(...);
} else {
return AppBar(...);
}
}
);
}
@override
Size get preferredSize => Size(appbarwidth, appbarheight);
}
class MyAppBar extends StatelessWidget with PreferredSizeWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<YourBloc, YourState>(
builder: (context, state) {
if(state is Selected1) {
return AppBar(...);
} else if (state is Selected2) {
return AppBar(...);
} else {
return AppBar(...);
}
}
);
}
@override
Size get preferredSize => Size(appbarwidth, appbarheight);
}
return Scaffold(appBar: MyAppBar());