如何在Android Flutter App中删除AppBar中的额外空间?

knsnq2tg  于 2023-11-21  发布在  Flutter
关注(0)|答案(2)|浏览(113)

我在Flutter中的Appbar有问题。如何删除屏幕上的额外空间?(黑线)。
截图


的数据

class MainScreen extends StatelessWidget {
  const MainScreen({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      title: 'Sample',
      localizationsDelegates: const [
        AppLocalizations.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: const [
        Locale('en'),
        Locale('pl'),
      ],
      theme: theme,
      routerConfig: router,
    );
  }
}
final GoRouter router = GoRouter(
  initialLocation: "/",
  routes: <RouteBase>[
    GoRoute(
      path: '/',
      builder: (BuildContext context, GoRouterState state) {
        return SomePage(navController: _navController);
      },
      routes: <RouteBase>[
        GoRoute(
          path: 'page1',
          pageBuilder: (BuildContext context, GoRouterState state) => CupertinoPage(child: OtherPage1(navController: _navController)),
        ),
        GoRoute(
          path: 'page2',
          pageBuilder: (BuildContext context, GoRouterState state) => CupertinoPage(child: OtherPage2(navController: _navController)),
        )
      ],
    ),
  ],
);
class SomePage extends StatelessWidget {
  final NavController navController;

  const SomePage({super.key, required this.navController});

  @override
  Widget build(BuildContext context) {
    return MultiBlocProvider(
        providers: [
          /* here is some code, not relevant for this problem */
        ],
        child: DefaultTabController(
          length: 3,
          child: BlocBuilder<CountersCubit, Counters>(
            builder: (blockContext, state) {
              FocusScopeNode currentFocus = FocusScope.of(blockContext);
              return Scaffold(
                appBar: AppBar(
                  leading: IconButton(
                      onPressed: () => { Navigate.back(navController) },
                      icon: const Icon(Icons.arrow_back)),
                  bottom: TabBar(
                    isScrollable: true,
                    indicatorSize: TabBarIndicatorSize.label,
                    indicatorColor: Colors.blue,
                    indicatorWeight: 3.0,
                    tabs: [
                      Tab(
                          text: processTextTabLabel(
                              label: AppLocalizations.of(context)!
                                  .header_view1,
                              counter: state.view1)),
                      Tab(
                          child: badges.Badge(
                        showBadge: false,
                        child: Text(processTextTabLabel(
                            label: AppLocalizations.of(context)!
                                .header_view2,
                            counter: state.view2)),
                      )),
                      Tab(
                          text: processTextTabLabel(
                              label: AppLocalizations.of(context)!
                                  .header_view3,
                              counter: state.view3)),
                    ],
                  ),
                  title: Text(AppLocalizations.of(context)!.header_title),
                ),

                body: TabBarView(
                  children: [
                    View1(navController: navController),
                    View2(navController: navController),
                    View3(navController: navController)
                  ],
                ),
              );
            },
          ),
        ));
  }
}

我试探着:
1.在scaffold容器之前使用SafeArea小部件。
1.设置高度Appbar。
我尝试了五种方法,我发现堆栈溢出和其他网站。所有在这种情况下不工作。
如果我删除Appbar,视图看起来是正确的。

9gm1akwq

9gm1akwq1#

1.溶液-01,
PreferredSize Package AppBar,并将preferredSize设置为零。

appBar: PreferredSize(
  preferredSize: Size.fromHeight(0.0),
  child: AppBar(
   
  ),
),

字符串
2.溶液-02,
为AppBar使用自定义PreferredSizeWidget。创建自定义PreferredSizeWidget并覆盖preferredSize以控制AppBar的高度。

class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
  @override
  Size get preferredSize => Size.fromHeight(kToolbarHeight); // Set your desired height here

  @override
  Widget build(BuildContext context) {
    return AppBar(
    );
  }
}


然后你可以使用这个应用程序栏作为自定义.

appBar: CustomAppBar(),


3.溶液-03,
调整Scaffold的extendBody属性。
在Scaffold中设置extendBody: true,以确保主体延伸到AppBar后面,这可能会解决空间问题。

return Scaffold(
  extendBody: true,
  appBar: AppBar(
  ),
  body: TabBarView(
    children: [
    ],
  ),
);


逐个尝试这些解决方案,看看它们是否解决了AppBar引起的额外空间问题。有时,部件的特定嵌套或Flutter更新可能会影响这些解决方案的工作方式。

jtw3ybtb

jtw3ybtb2#

Dhanusha Dilshan -我找到了解决方案。当然,我测试了你的解决方案,但我仍然高于appbar的距离。我添加:

return Scaffold(
            appBar: AppBar(
              primary: false, <- this line
              leading: IconButton(

字符串
和作品.应用程序栏默认有一个安全区的距离,和改变高度appbar,我们不改变这个距离.也许我忘了写在我的基地后,这个Flutter应用程序是模块.是添加到原生Android应用.所以我们不需要安全区.

相关问题