Flutter时脚手架底部导航杆高度的确定

5jvtdoz2  于 2023-02-13  发布在  Flutter
关注(0)|答案(5)|浏览(374)

在Flutter中如何获得ScaffoldBottomNavigationBarheight?我知道有MediaQuery.of(context).size可以获得屏幕尺寸,BottomNavigationBar有类似的方法吗?

omqzjyyz

omqzjyyz1#

我试过了,对于Android,我使用kBottomNavigationBarHeight,对于iOS,我认为高度是90 pixel ..所以我在常量文件中声明了高度,如double btmNavigationBarHeight = Platform.isAndroid ? kBottomNavigationBarHeight : 90;

ru9i0ody

ru9i0ody2#

根据dosc:https://api.flutter.dev/flutter/material/NavigationBar/height.html
If null, NavigationBarThemeData.height is used. If that is also null, the default is 80

k2arahey

k2arahey3#

Container(
   width: MediaQuery.of(context).size.width,
   height: kBottomNavigationBarHeight,
   child: Scaffold(
       backgroundColor: Colors.transparent,
       body: null,
       bottomNavigationBar: BottomNavigationBar()
  )
)

这将创建一个仅为BottomNavigationBar小部件提供足够空间的Scaffold。
kBottomNavigationBarHeight是一个常量,可以在常量.dart文件中找到。

s71maibg

s71maibg4#

要获取小部件的大小,可以使用key字段

final key = GlobalKey();
... set key field of widget
double height = key.currentContext.size.height;
9q78igpj

9q78igpj5#

如果你想知道bottomNavigationBar在主Scaffold的一个子屏幕中的高度,你可以使用MediaQuery:

final bottomPadding = MediaQuery.of(context).padding.bottom;

除了SafeArea之外,MediaQuery的底部填充还考虑了bottomNavigationBar的高度。
更详细:

@override
  Widget build(BuildContext context) {

    final bottomPadding = MediaQuery.of(context).padding.bottom; // From here you will get only SafeArea padding.

    return Scaffold(
      body: PageView(
        children: const [

          // But in build() method of each of these screens you will get
          // SafeArea padding with bottomNavigationBar height
          // just by calling MediaQuery.of(context).padding.bottom;

          FirstScreen(), 
          SecondScreen(),
          ThirdScreen(),
          FourthScreen(),

        ],
      ),
      bottomNavigationBar: MyBottomNavigationBar(),
    );
  }

相关问题