android - Flutter 更改所选选项卡的背景

标签 android flutter

我是 Flutter 的新手,我在屏幕底部创建了一个新的导航栏。我想在单击时更改我所在的选项卡的背景。我该如何改变它?我无法让它工作。我只是用“activeIcon”改变标签颜色或图标颜色。 @override 有什么作用?

import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'Neu.dart';
import 'Beliebt.dart';
import 'Profil.dart';

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

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return MyAppState();
  }
}

class MyAppState extends State<MyApp> {
  int _selectedTab = 0;
  final _pageOptions = [
    NeuPage(),
    BeliebtPage(),
    ProfilPage(),
  ];
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
          primaryColor: Colors.deepOrangeAccent,
          primaryTextTheme: TextTheme(
            title: TextStyle(color: Colors.white),
          )),
      home: Scaffold(
        appBar: AppBar(
          title: Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                  Image.asset(
                 'assets/logo_straight.png',
                  fit: BoxFit.contain,
                  height: 32,
              ),
            ],
          ),
        ),


        body: _pageOptions[_selectedTab],

        bottomNavigationBar: BottomNavigationBar(
          backgroundColor: Colors.deepOrangeAccent,
          currentIndex: _selectedTab,
          onTap: (int index) {
            setState(() {
              _selectedTab = index;
            });
          },
          items: [
            BottomNavigationBarItem(
              icon: Icon(FontAwesomeIcons.quoteRight, color: Colors.white),
              title: Text('Neu', style: TextStyle(color: Colors.white),
              )
            ),
            BottomNavigationBarItem(
              icon: Icon(Icons.whatshot, color: Colors.white),
              title: Text('Beliebt', style: TextStyle(color: Colors.white),
              )
            ),
            BottomNavigationBarItem(
              icon: Icon(Icons.account_circle, color: Colors.white),
              title: Text('Profil', style: TextStyle(color: Colors.white),
              )
            ),
          ],
        ),
      ),
    );
  }
}

最佳答案

您将需要构建自己的自定义小部件。 这就是 Flutter 的用途。您可以根据需要构建所有内容。 您将通过锻炼来流利地执行此操作。我制作了一个 MVE 供您查看。还有很多地方需要做得更好更流畅,但我认为对于初学者来说,看到详细的实现是件好事。

import 'package:flutter/material.dart';


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

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return MyAppState();
  }
}

class MyAppState extends State<MyApp> {
  int _selectedTab = 0;
  final _pageOptions = [
    Container(child: Center(child: Text('1', style: TextStyle(color: Colors.black87),)),),
    Container(child: Center(child: Text('2', style: TextStyle(color: Colors.black87),)),),
    Container(child: Center(child: Text('3 ', style: TextStyle(color: Colors.black87),)),),
  ];


  _changePage(int index) {
    setState(() {
      if (index >= _pageOptions.length){
        return;
      }
      _selectedTab = index;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
          primaryColor: Colors.deepOrangeAccent,
          primaryTextTheme: TextTheme(
            title: TextStyle(color: Colors.white),
          )),
      home: Scaffold(
        appBar: AppBar(
          title: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Image.asset(
                'assets/logo_straight.png',
                fit: BoxFit.contain,
                height: 32,
              ),
            ],
          ),
        ),


        body: Container(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.end,
              children: <Widget>[
                Expanded(
                  child: _pageOptions[_selectedTab],
                ),
                Center(
                  child: Container(
                    color: Colors.orangeAccent,
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceAround,
                      children: <Widget>[
                        BottomNavItem(
                          iconData: Icons.add,
                          title: 'Add',
                          selected: _selectedTab == 0,
                          onTap: (){
                            _changePage(0);
                          },
                        ),
                        BottomNavItem(
                          iconData: Icons.add,
                          title: 'Add',
                          selected: _selectedTab == 1,
                          onTap: (){
                            _changePage(1);
                          },
                        ),
                        BottomNavItem(
                          iconData: Icons.add,
                          title: 'Add',
                          selected: _selectedTab == 2,
                          onTap: (){
                            _changePage(2);
                          },
                        )
                      ],
                    ),
                  ),
                )
              ],
          ),
        )
      ),
    );
  }
}

class BottomNavItem extends StatelessWidget {

  final IconData iconData;
  final String title;
  final bool selected;
  final Function onTap;

  BottomNavItem({this.iconData, this.title, this.selected, this.onTap});

  @override
  Widget build(BuildContext context) {
    return Expanded(
      child: Container(
        child: InkWell(
          child: Container(
            padding: EdgeInsets.all(8.0),
            color: selected ? Colors.orange : Colors.orangeAccent,
            child: Column(
              children: <Widget>[
                Icon(iconData),
                Text(title)
              ],
            ),
          ),
          onTap: onTap,
        ),
      ),
    );
  }
}

关于android - Flutter 更改所选选项卡的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57616514/

相关文章:

android - 无法将 Json 值转换为 Json 对象

android - 如何在 android 中使用 android-support-v4.jar 禁用 ViewPager 滑动

dart - 约束可拖动区域

Flutter:在父状态更改时重新渲染子小部件

dart - 如何使用 Flutter 将图像保存到照片库?

Java ArrayList 性能

安卓用户界面元素

Android - 如何获取 android.R.anim.slide_in_right

Flutter DART "Try adding an explicit type like ' 动态',或在您的分析选项文件中启用隐式动态。”

dart - 我们如何改变flutter中的appbar背景颜色