在我的 flutter 应用程序中,当我尝试使用 Navigator.push( 导航到另一个屏幕时, selectedItemcolor 不会改变 语境, MaterialPageRoute(构建器:(上下文) => _pages.elementAt(index)), );
这是完整代码
import 'package:flutter/material.dart';
class BottomBar extends StatefulWidget {
const BottomBar({Key? key}) : super(key: key);
@override
_BottomBarState createState() => _BottomBarState();
}
class _BottomBarState extends State<BottomBar> {
int _SelectedIndex = 0;
final List<Widget> _pages = <Widget>[
Home(),
Order(),
Profile(),
];
void onTabTapped(int index) {
setState(() {
_SelectedIndex = index;
});
Navigator.push(
context,
MaterialPageRoute(builder: (context) => _pages.elementAt(index)),
);
}
@override
Widget build(BuildContext context) {
return BottomNavigationBar(
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: "Home",
),
BottomNavigationBarItem(
icon: Icon(Icons.card_travel),
label: "Orders",
),
BottomNavigationBarItem(icon: Icon(Icons.person), label: "Profile"),
],
currentIndex: _SelectedIndex,
onTap: onTabTapped,
);
}
}
您不应使用导航器更改活动页面。
BottomNavigationBar
负责导航。请检查以下示例:
import 'package:flutter/material.dart';
void main() => runApp(const BottomNavigationBarExampleApp());
class BottomNavigationBarExampleApp extends StatelessWidget {
const BottomNavigationBarExampleApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: BottomNavigationBarExample(),
);
}
}
class BottomNavigationBarExample extends StatefulWidget {
const BottomNavigationBarExample({super.key});
@override
State<BottomNavigationBarExample> createState() =>
_BottomNavigationBarExampleState();
}
class _BottomNavigationBarExampleState
extends State<BottomNavigationBarExample> {
int _selectedIndex = 0;
static const List<Widget> _widgetOptions = <Widget>[
Text('Index 0: Home'),
Text('Index 1: Orders'),
Text('Index 2: Profile'),
];
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('BottomNavigationBar Sample'),
),
body: Center(
child: _widgetOptions.elementAt(_selectedIndex),
),
bottomNavigationBar: BottomNavigationBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.business),
label: 'Orders',
),
BottomNavigationBarItem(
icon: Icon(Icons.school),
label: 'Profile',
),
],
currentIndex: _selectedIndex,
selectedItemColor: Colors.amber[800],
onTap: _onItemTapped,
),
);
}
}