flutter如何在BottomNavigationBar中添加边距或填充

我正在尝试制作底部导航栏,但在屏幕上左右填充。现在,我用容器包装BottomNavigationBar并在其中添加填充。问题是BottomNavigationBar默认背景仍然包裹了所有图层,因此我们可以在其中删除背景颜色吗?

bottomNavigationBar: Container(

margin: EdgeInsets.only(left: 16, right: 16),

decoration: BoxDecoration(

color: Colors.black,

borderRadius: BorderRadius.only(

topLeft: Radius.circular(20),

topRight: Radius.circular(20)),

),

child: BottomNavigationBar(

backgroundColor: Colors.transparent,

showUnselectedLabels: true,

type: BottomNavigationBarType.fixed,

elevation: 0,

currentIndex: _currentIndex,

items: [

BottomNavigationBarItem(

icon: Icon(Icons.home), title: Text('Home')),

BottomNavigationBarItem(

icon: Icon(Icons.local_activity), title: Text('Activity')),

BottomNavigationBarItem(

icon: Icon(Icons.inbox), title: Text('Inbox')),

BottomNavigationBarItem(

icon: Icon(Icons.person), title: Text('Profile')),

],

),

),

编辑:我已经删除了脚手架和所有主题的背景色,但是当您滚动项目时,您可以看到那里仍然有背景 Remove Scafold

bg

编辑2:这里是活动的代码

class App extends StatelessWidget {

final List<Widget> _children = [

Center(

child: Container(

height: 850,

color: Colors.red,

),

)

];

@override

Widget build(BuildContext context) {

return MaterialApp(

debugShowCheckedModeBanner: false,

home: Scaffold(

body: _children[0],

bottomNavigationBar: Container(

margin: EdgeInsets.only(left: 16, right: 16),

decoration: BoxDecoration(

color: Colors.amber,

borderRadius: BorderRadius.only(

topLeft: Radius.circular(200), topRight: Radius.circular(200)),

),

child: BottomNavigationBar(

backgroundColor: Colors.transparent,

showUnselectedLabels: true,

type: BottomNavigationBarType.fixed,

elevation: 0,

items: [

BottomNavigationBarItem(

icon: Icon(Icons.home), title: Text('Home')),

BottomNavigationBarItem(

icon: Icon(Icons.local_activity), title: Text('Activity')),

BottomNavigationBarItem(

icon: Icon(Icons.inbox), title: Text('Inbox')),

BottomNavigationBarItem(

icon: Icon(Icons.person), title: Text('Profile')),

],

),

),

),

);

}

}

回答:

您需要将Body和BottomNavigationBar放在Stack下,以便可以将BottomNavigationBar放在主体内容的顶部。

您的完整代码将是:

import 'package:flutter/material.dart';

class App extends StatelessWidget {

@override

Widget build(BuildContext context) {

final List<Widget> _children = [

Center(

child: Container(

height: 850, // use 'MediaQuery.of(context).size.height' to fit the screen height,

color: Colors.red,

),

)

];

return MaterialApp(

debugShowCheckedModeBanner: false,

home: Scaffold(

body: Stack(

children: <Widget>[

_children[0],

Positioned(

left: 0,

right: 0,

bottom: 0,

child: bottomNavigationBar(),

),

],

),

));

}

}

Widget bottomNavigationBar() {

return Container(

margin: EdgeInsets.only(left: 16, right: 16),

decoration: BoxDecoration(

color: Colors.amber,

borderRadius: BorderRadius.only(

topLeft: Radius.circular(200), topRight: Radius.circular(200)),

),

child: BottomNavigationBar(

backgroundColor: Colors.transparent,

showUnselectedLabels: true,

type: BottomNavigationBarType.fixed,

elevation: 0,

items: [

BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('Home')),

BottomNavigationBarItem(

icon: Icon(Icons.local_activity), title: Text('Activity')),

BottomNavigationBarItem(icon: Icon(Icons.inbox), title: Text('Inbox')),

BottomNavigationBarItem(

icon: Icon(Icons.person), title: Text('Profile')),

],

),

);

}

来自的部分代码:如何在Flutter应用中将边框半径设置为底部应用栏?

将其放入堆栈中。不要将“底部导航栏”直接添加到支架中。

class HomePage extends StatelessWidget {

@override

Widget build(BuildContext context) {

return Scaffold(

appBar: AppBar(

title: Text('Some Text'),

),

body: Stack(

children: <Widget>[

bodyContent,

Positioned(

left: 0,

right: 0,

bottom: 0,

child: bottomNavigationBar,

),

],

),

);

}

Widget get bodyContent {

return Container(color: Colors.red);

}

Widget get bottomNavigationBar {

return ClipRRect(

borderRadius: BorderRadius.only(

topRight: Radius.circular(40),

topLeft: Radius.circular(40),

),

child: BottomNavigationBar(

items: [

BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('1')),

BottomNavigationBarItem(icon: Icon(Icons.usb), title: Text('2')),

BottomNavigationBarItem(

icon: Icon(Icons.assignment_ind), title: Text('3')),

BottomNavigationBarItem(

icon: Icon(Icons.multiline_chart), title: Text('4')),

],

unselectedItemColor: Colors.grey,

selectedItemColor: Colors.black,

showUnselectedLabels: true,

),

);

}

}

以上是 flutter如何在BottomNavigationBar中添加边距或填充 的全部内容, 来源链接: utcz.com/qa/433459.html

回到顶部