同时导航栏索引页面更改

Simultaneous Navbar index page change

对不起我的英语我是法国长棍面包

这是我的问题,我想知道如何在导航栏中移动索引时切换页面我已经尝试了上面的解决方案但是几秒钟后我崩溃了我想知道为什么?

这是我主页的代码

import 'package:flutter/material.dart';
import 'package:flutter/painting.dart';
import 'package:flutter_application_1/views/screenmaps_view.dart';
import 'package:flutter_application_1/views/screenussers_views.dart';

class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key}) : super(key: key);

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  int _selectedItemIndex = 0;
  int setPageIndex = 0;

  final pages = [
    HomeScreen(),
    PageMaps(),
    userpage(),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: pages[setPageIndex], //the line that makes me crash my application
      //backgroundColor: Colors.amber,
      bottomNavigationBar: Row(
        children: [
          newNavBarItem(Icons.home_outlined, 0),
          newNavBarItem(Icons.map_outlined, 1),
          newNavBarItem(Icons.home, 2),
        ],
      ),
    );
  }

  Widget newNavBarItem(IconData icon, int index) {
    return GestureDetector(
      onTap: () {
        setState(() {
          _selectedItemIndex = index;
          setPageIndex = index;
        });
      },
      child: Container(
          height: 70,
          width: MediaQuery.of(context).size.width / 3,
          decoration: index == _selectedItemIndex
              ? BoxDecoration(
                  border: Border(
                    bottom: BorderSide(width: 4, color: Color(0xff238ADC)),
                  ),
                  gradient: LinearGradient(colors: [
                    Color(0xff7EC1F6).withOpacity(0.3),
                    Color(0xff7EC1F6).withOpacity(0.015)
                  ], begin: Alignment.bottomCenter, end: Alignment.topCenter),
                )
              : BoxDecoration(),
          child: Icon(icon,
              color:
                  index == _selectedItemIndex ? Colors.black : Colors.black)),
    );
  }
}

我用导航栏的索引值初始化了一个变量“setPageIndex”,将其与要显示的正文相关联,但没有成功,崩溃报告较低

@override
  Widget build(BuildContext context) {
    return Scaffold(
      body: pages[setPageIndex], //the line that makes me crash my application
      //backgroundColor: Colors.amber,
      bottomNavigationBar: Row(
        children: [
          newNavBarItem(Icons.home_outlined, 0),
          newNavBarItem(Icons.map_outlined, 1),
          newNavBarItem(Icons.home, 2),
        ],
      ),
    );
  }

这是errors_path.dart

的错误
@pragma("vm:external-name", "AssertionError_throwNew")
  external static _doThrowNew(
      int assertionStart, int assertionEnd, Object? message);
  @pragma("vm:external-name", "AssertionError_throwNewSource")
  external static _doThrowNewSource(
      String failedAssertion, int line, int column, Object? message);

这是我的调试控制台的错误


#24     DiagnosticsNode.toString
package:flutter/…/foundation/diagnostics.dart:1706
#25     Diagnosticable.toString.<anonymous closure>
package:flutter/…/foundation/diagnostics.dart:3168
#26     Diagnosticable.toString
package:flutter/…/foundation/diagnostics.dart:3170
#27     _StringBase._interpolate (dart:core-patch/string_patch.dart:853:19)
#28     ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4785
#29     StatefulElement.performRebuild
package:flutter/…/widgets/framework.dart:4928
#30     Element.rebuild
package:flutter/…/widgets/framework.dart:4477
#31     ComponentElement._firstBuild
package:flutter/…/widgets/framework.dart:4735
#32     StatefulElement._firstBuild
package:flutter/…/widgets/framework.dart:4919
#33     ComponentElement.mount
package:flutter/…/widgets/framework.dart:4729
...     Normal element mounting (7 frames)
#40     Element.inflateWidget
package:flutter/…/widgets/framework.dart:3790
#41     Element.updateChild
package:flutter/…/widgets/framework.dart:3540
#42     ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4780
#43     Element.rebuild
package:flutter/…/widgets/framework.dart:4477
2
...
...     Normal element mounting (21 frames)
#4821   Element.inflateWidget
package:flutter/…/widgets/framework.dart:3790
#4822   Element.updateChild
package:flutter/…/widgets/framework.dart:3540
#4823   RenderObjectToWidgetElement._rebuild
package:flutter/…/widgets/binding.dart:1198
#4824   RenderObjectToWidgetElement.mount
package:flutter/…/widgets/binding.dart:1167
#4825   RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure>
package:flutter/…/widgets/binding.dart:1112
#4826   BuildOwner.buildScope
package:flutter/…/widgets/framework.dart:2600
#4827   RenderObjectToWidgetAdapter.attachToRenderTree
package:flutter/…/widgets/binding.dart:1111
#4828   WidgetsBinding.attachRootWidget
package:flutter/…/widgets/binding.dart:944
#4829   WidgetsBinding.scheduleAttachRootWidget.<anonymous closure>
package:flutter/…/widgets/binding.dart:924
(elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
════════════════════════════════════════════════════════════════════════════════

如果您觉得代码中的内容很特别,我就顺便开始,如果有什么不对的地方请告诉我:)

感谢您阅读我的帖子

问题是因为您在导航栏的 pages 数组中再次添加 HomeScreen,而它已经是具有导航栏的屏幕,所以您的页面应该是:

final pages = [
  AnotherHomePage(),
  PageMaps(),
  userpage(),
];