flutter bottomNavigationBar不更改屏幕

问题描述

我是新手,尝试在演示应用程序中实现BottomNavigationBar。底部栏确实显示在应用程序中,但是在点击时无法更改当前项目,屏幕也不会更改。

我尝试了各种方法来加载屏幕,但是好像没有调用onTap函数

这是我的代码

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  @override
  Widget build(BuildContext context) {

    final Size screenSize = MediaQuery.of(context).size;

    int _currentTab = 0;

    Widget body() {
      switch (_currentTab) {
        case 0:
          return FeedScreen();
        case 1:
          return SearchScreen();
        case 2:
          return ProfileScreen();
        default:
          return FeedScreen();
      }
    }

    return Scaffold(
      bottomNavigationBar: BottomNavigationBar(
        onTap: (newValue) {
          setState(() {
            _currentTab = newValue;
          });
        },currentIndex: _currentTab,items: [
          BottomNavigationBarItem(
            icon: ImageIcon(
              Assetimage('images/home.png'),),title: SizedBox.shrink(),BottomNavigationBarItem(
            icon: ImageIcon(
              Assetimage('images/search.png'),BottomNavigationBarItem(
            icon: CircleAvatar(
              radius: 15,backgroundImage: Assetimage('images/avatar.png'),)
        ],appBar: PreferredSize(
        preferredSize: Size(screenSize.width,50.0),child: CustomAppBar(),body: body(),);
  }
}

解决方法

您的int _currentTab = 0;build方法内。放在外面。

每次触发setState时,_currentTab将始终等于0的{​​{1}},因为变量位于FeedScreen方法内部>

,

尝试以下代码!

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {

 int _currentTab = 0;

  @override
  Widget build(BuildContext context) {

    final Size screenSize = MediaQuery.of(context).size;

    Widget body() {
      switch (_currentTab) {
        case 0:
          return FeedScreen();
        case 1:
          return SearchScreen();
        case 2:
          return ProfileScreen();
        default:
          return FeedScreen();
      }
    }

    return Scaffold(
      bottomNavigationBar: BottomNavigationBar(
        onTap: (newValue) {
          setState(() {
            _currentTab = newValue;
          });
        },currentIndex: _currentTab,items: [
          BottomNavigationBarItem(
            icon: ImageIcon(
              AssetImage('images/home.png'),),title: SizedBox.shrink(),BottomNavigationBarItem(
            icon: ImageIcon(
              AssetImage('images/search.png'),BottomNavigationBarItem(
            icon: CircleAvatar(
              radius: 15,backgroundImage: AssetImage('images/avatar.png'),)
        ],appBar: PreferredSize(
        preferredSize: Size(screenSize.width,50.0),child: CustomAppBar(),body: body(),);
  }
}

在构建方法之外写入int _currentTab = 0,因为将newValue更新到_currentTab时,setState也重新分配了0值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...