如何仅添加一个BottomNavigationBarItem

时间:2019-09-12 17:04:24

标签: flutter flutter-layout

我有一个BottomNavigationBar,我只需要在其中添加一个集中式按钮,但出现此错误:

  

'package:flutter / src / material / bottom_navigation_bar.dart':失败的断言:第191行pos 15:'items.length> = 2':不正确。

这是合理的,因为flutter的源代码具有以下条件:

//..
assert(items.length >= 2),

那么,这是我的代码,是否有使用BottomNavigationBar保持代码干净的解决方法?

BottomNavigationBar(

   items: <BottomNavigationBarItem>[
      buildBottomNavigationBarItem(
         iconData: Icons.close,
      ),

// AN ERROR AFTER COMMENTING THIS:

//    buildBottomNavigationBarItem(
//       iconData: Icons.open,
//    ),
   ],
),


BottomNavigationBarItem buildBottomNavigationBarItem(
      {IconData iconData, String title = ''}
    ) {
    return BottomNavigationBarItem(
      icon: Icon(
        iconData,
        color: Theme.of(context).accentColor,
        size: 0.04 * _deviceHeight,
      ),
      title: Text(
        title,
      ),
    );
}

谢谢

2 个答案:

答案 0 :(得分:1)

您不能使用BottomNavigationBar,而是可以创建自己的小部件并将其作为bottomNavigationBar参数传递。

希望这个示例可以帮助您制作自己的底部导航栏。

enter image description here

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
          body: SafeArea(
            child: Text('hi'),
          ),
          bottomNavigationBar: Container(
            height: 60,
            color: Colors.black12,
            child: InkWell(
              onTap: () => print('tap on close'),
              child: Padding(
                padding: EdgeInsets.only(top: 8.0),
                child: Column(
                  children: <Widget>[
                    Icon(
                      Icons.close,
                      color: Theme.of(context).accentColor,
                    ),
                    Text('close')
                  ],
                ),
              ),
            ),
          )),
    );
  }
}

答案 1 :(得分:0)

如果您希望三个项目将 assert(items.length >= 2), 变为 assert(items.length >= 2),,您可以在底部导航栏中将 assert(items.length >= 3), 更改为所需的长度