Flutter BottomNavigationBarItem 只接受 Icon 而没有其他小部件?
Flutter BottomNavigationBarItem accepts only Icon and no other widgets?
在我们的 Flutter Cupertino 项目中,我们需要在其中一个底部栏图标上显示一个徽章。准确地说,购物车中已有多少件商品。
我已经尝试了这里提供的不同的小部件和解决方案,但是 BottomNavigationBarItem
只接受 icon: Icon(..)
而没有其他。例如,如果我将 icon: Stack(..)
而不是 icon: Icon(..)
,则会显示错误消息,例如
"Invalid const value..."
下面是一些示例代码:
class CupertinoStoreHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CupertinoTabScaffold(
tabBar: CupertinoTabBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.home),
title: Text('Kühlschrank'),
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.profile_circled),
title: Text('Konto'),
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.shopping_cart),
title: Text('Warenkorb'),
),
],
),
所以如果我不能用任何东西代替 Icon(..)
。没有其他小部件,没有 Stack(..)
.
为什么?我如何放置其他小部件,例如 Badge(..)
:
badges: ^1.0.2
import 'package:badges/badges.dart';
这个问题与可能的重复问题不同,因为我已经尝试了那里发布的解决方案,但仍然不能使用 Stack(..),只能使用 Icon(..)。
我尝试重现该问题,但在更改一些内容后它确实有效。首先 icon
属性 接受 Widget
,因此不仅接受 Icon
,所以这不是问题。
但是我确实注意到,在 items: const <BottomNavigationBarItem>[
中,您应该删除 const
关键字,因为它不是必需的,也不是常量。
最后,您需要向 CupertinoTabScaffold
添加一个选项卡构建器,这基本上是 returns 底部导航栏上方显示的内容。
您的最终代码如下所示:
return CupertinoTabScaffold(
tabBuilder: (BuildContext context, int i) {
return CupertinoActivityIndicator();
},
tabBar: CupertinoTabBar(
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Badge(
badgeContent: Text('3'),
child: Icon(Icons.settings),
),
title: Text('Kühlschrank'),
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.profile_circled),
title: Text('Konto'),
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.shopping_cart),
title: Text('Warenkorb'),
),
],
),
);
在我们的 Flutter Cupertino 项目中,我们需要在其中一个底部栏图标上显示一个徽章。准确地说,购物车中已有多少件商品。
我已经尝试了这里提供的不同的小部件和解决方案,但是 BottomNavigationBarItem
只接受 icon: Icon(..)
而没有其他。例如,如果我将 icon: Stack(..)
而不是 icon: Icon(..)
,则会显示错误消息,例如
"Invalid const value..."
下面是一些示例代码:
class CupertinoStoreHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CupertinoTabScaffold(
tabBar: CupertinoTabBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.home),
title: Text('Kühlschrank'),
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.profile_circled),
title: Text('Konto'),
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.shopping_cart),
title: Text('Warenkorb'),
),
],
),
所以如果我不能用任何东西代替 Icon(..)
。没有其他小部件,没有 Stack(..)
.
为什么?我如何放置其他小部件,例如 Badge(..)
:
badges: ^1.0.2
import 'package:badges/badges.dart';
这个问题与可能的重复问题不同,因为我已经尝试了那里发布的解决方案,但仍然不能使用 Stack(..),只能使用 Icon(..)。
我尝试重现该问题,但在更改一些内容后它确实有效。首先 icon
属性 接受 Widget
,因此不仅接受 Icon
,所以这不是问题。
但是我确实注意到,在 items: const <BottomNavigationBarItem>[
中,您应该删除 const
关键字,因为它不是必需的,也不是常量。
最后,您需要向 CupertinoTabScaffold
添加一个选项卡构建器,这基本上是 returns 底部导航栏上方显示的内容。
您的最终代码如下所示:
return CupertinoTabScaffold(
tabBuilder: (BuildContext context, int i) {
return CupertinoActivityIndicator();
},
tabBar: CupertinoTabBar(
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Badge(
badgeContent: Text('3'),
child: Icon(Icons.settings),
),
title: Text('Kühlschrank'),
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.profile_circled),
title: Text('Konto'),
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.shopping_cart),
title: Text('Warenkorb'),
),
],
),
);