Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何更改appbar当听Bloc时,我不想在脚手架上使用Bloc builder,而是在appbar上使用BlocBuidler?_Flutter_Dart_Flutter Layout_Bloc - Fatal编程技术网

Flutter 如何更改appbar当听Bloc时,我不想在脚手架上使用Bloc builder,而是在appbar上使用BlocBuidler?

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

简单地说,当底部导航项更改时,我想更改我的应用程序栏。。我无法使用BlocBuilder包装AppBar,如何实现这一点?

在您可以使用的Scaffold小部件中

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());