当前位置: 首页 > 知识库问答 >
问题:

Flutter中的样式BottomNavigationBar

洪彬
2023-03-14

我正在试用Flutter,我正在尝试更改应用程序上BottomNavigationBar的颜色,但我所能做的只是更改Bottom导航项

这里是我声明我的< code>BottomNavigationBar的地方:

class _BottomNavigationState extends State<BottomNavigationHolder>{

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: null,
      body: pages(),
      bottomNavigationBar:new BottomNavigationBar(
        items: <BottomNavigationBarItem>[
          new BottomNavigationBarItem(
              icon: const Icon(Icons.home),
              title: new Text("Home")
          ),
          new BottomNavigationBarItem(
              icon: const Icon(Icons.work),
              title: new Text("Self Help")
          ),
          new BottomNavigationBarItem(
              icon: const Icon(Icons.face),
              title: new Text("Profile")
          )
        ],
        currentIndex: index,
        onTap: (int i){setState((){index = i;});},
        fixedColor: Colors.white,
      ),
    );
  }

早些时候,我以为我通过在主端主题上将画布颜色编辑为绿色来解决这个问题,但它打乱了整个应用程序的配色方案:

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
        canvasColor: Colors.green
      ),
      home: new FirstScreen(),
    );
  }
}

共有3个答案

沈飞舟
2023-03-14

接受的答案并不完全错误。然而,BottomNavigationBar实际上确实具有background Color的属性。根据留档

如果类型为BottomNavigationBarType。shifting和items,则具有BottomNavigationBarItem。backgroundColor设置后,项目的background color将弹出并覆盖此颜色。

这意味着BottomNaviation的background Color将被各个项目background Color覆盖,因为默认类型是BottomNavigationBarType.shifting

要解决这个问题,只需将以下属性添加到声明的< code>BottomNavigationbar小部件中。

type: BottomNavigationBarType.fixed,

注意:但是,如果您想要改变效果,则必须声明每个项目的颜色,或者包装允许覆盖子窗口小部件背景色的窗口小部件。

i. e类似Container小部件的东西。

郎魁
2023-03-14

底部导航栏可以是固定的,也可以是移动的(移动的)。如果有 3 个项目,并且更改为 4 个或更多项目,则将修复此问题。我们可以通过设置底部导航栏 .type 参数来覆盖此行为。

dart prettyprint-override">BottomNavigationBar(
  type: BottomNavigationBarType.fixed, // Fixed 
  backgroundColor: Colors.black, // <-- This works for fixed
  selectedItemColor: Colors.greenAccent,
  unselectedItemColor: Colors.grey,
  items: [
    BottomNavigationBarItem(
      icon: Icon(Icons.call),
      label: 'Call',
    ),
    BottomNavigationBarItem(
      icon: Icon(Icons.message),
      label: 'Message',
    ),
  ],
)
BottomNavigationBar(
  type: BottomNavigationBarType.shifting, // Shifting
  selectedItemColor: Colors.white,
  unselectedItemColor: Colors.grey,
  items: [
    BottomNavigationBarItem(
      icon: Icon(Icons.call),
      label: 'Call',
      backgroundColor: Colors.blue, // <-- This works for shifting
    ),
    BottomNavigationBarItem(
      icon: Icon(Icons.message),
      label: 'Message',
      backgroundColor: Colors.green, // <-- This works for shifting
    ),
  ],
)
颜志业
2023-03-14

没有指定< code>BottomNavigationBar背景颜色的选项,但可以更改< code>canvasColor。在不弄乱整个应用程序的情况下,实现这一点的一个方法是将< code>BottomNavigationBar包装在带有所需< code>canvasColor的< code >主题中。

例子:

  bottomNavigationBar: new Theme(
    data: Theme.of(context).copyWith(
        // sets the background color of the `BottomNavigationBar`
        canvasColor: Colors.green,
        // sets the active color of the `BottomNavigationBar` if `Brightness` is light
        primaryColor: Colors.red,
        textTheme: Theme
            .of(context)
            .textTheme
            .copyWith(caption: new TextStyle(color: Colors.yellow))), // sets the inactive color of the `BottomNavigationBar`
    child: new BottomNavigationBar(
      type: BottomNavigationBarType.fixed,
      currentIndex: 0,
      items: [
        new BottomNavigationBarItem(
          icon: new Icon(Icons.add),
          title: new Text("Add"),
        ),
        new BottomNavigationBarItem(
          icon: new Icon(Icons.delete),
          title: new Text("Delete"),
        )
      ],
    ),
  ),

希望有所帮助!

 类似资料:
  • 我想创建一个单选按钮风格的投票系统使用的图标在Flutter(Dart),看起来像这样:投票图标 这个概念很简单:页面将显示一部电影,然后用户可以使用上面的图标按钮对该电影进行投票。当进行投票时,图标将变为红色,影片将添加到数组中。 我正在纠结的棘手部分是: 更改选定后图标的颜色 确保其他图标保持黑色 如果用户选择了其他选项,则将其他图标更改为黑色 提前道谢!

  • 我来自像angular、react和vue这样的前端webframeworks,我很难找到编写可重用小部件样式的最佳方法。让我用一个例子来演示这个问题。 假设我们有这个小部件: 现在让我们假设我想让属性像、等可以通过参数改变。如果没有传递属性的某个参数,则应该使用其默认值,如下所示:

  • 在这一个章节中我们会提供一些CSS In JS的实践. 如果你还不太明白为什么要CSS In Js, 作者vasan推荐你看一看下面的 talk by Vjeux 相关文章 Patterns for style composition in React Inline style vs stylesheet performance

  • 本文向大家介绍C#中DataGridView的样式,包括了C#中DataGridView的样式的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#中DataGridView的样式。分享给大家供大家参考。具体如下: 1、设置grid交替行颜色 2、单元格内容有效性检查 3、 单元格的选择模式 4、设置合适的列宽 希望本文所述对大家的C#程序设计有所帮助。

  • 我有一个JAVA EE应用程序。部署在Tomcat 7中,其中我有这个JSP,我想将样式应用于页脚以使文本居中,所以我在JSP中定义了要应用于页眉DIV的样式 但是页脚不适用该样式,我看到所有浏览器的文本都向左对齐。L IE、chrome和Firefox

  • 问题内容: 我注意到Bootstrap和Normalize.css在package.json中都有一个“样式”字段。 他们为什么有这个?如果我不得不猜测,那就是允许用户像导入一样容易地导入已定义的样式表,但是事实并非如此。 问题答案: 从Techwraith的pull请求中将其添加到Bootstrap: npm中的许多模块开始在package.json文件中公开其CSS入口文件。这使得工具,如,