main文件
初始化路由
class IndexPage extends StatelessWidget {
const IndexPage({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: BottomNavigator(),
initialRoute: "/",
onGenerateRoute: onGenerateRoutes,
);
}
}
底部导航栏
class BottomNavigator extends StatefulWidget {
final int index;
const BottomNavigator({super.key, this.index = 0});
@override
State<BottomNavigator> createState() => _BottomNavigatorState();
}
class _BottomNavigatorState extends State<BottomNavigator> {
late int _currentIndex;
static final List<Widget> _page = [
Homepage(),
Classificationpage(),
Shoppage(),
TrustPage(),
Mepage()
];
@override
void initState() {
super.initState();
_currentIndex = widget.index;
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: _page[_currentIndex],
bottomNavigationBar: BottomNavigationBar(
items: [
BottomNavigationBarItem(
label: '首页',
icon: Icon(Icons.home),
),
BottomNavigationBarItem(
label: '分类',
icon: Icon(Icons.type_specimen),
),
BottomNavigationBarItem(
label: '值得买',
icon: Icon(Icons.home),
),
BottomNavigationBarItem(
label: '购物车',
icon: Icon(Icons.shop),
),
BottomNavigationBarItem(
label: '我的',
icon: Icon(Icons.person),
),
],
selectedItemColor: Colors.red,
unselectedItemColor: Colors.grey,
type: BottomNavigationBarType.fixed,
currentIndex: _currentIndex,
onTap: (index) {
setState(() {
_currentIndex = index;
});
},
),
);
}
}
路由文件
Map routes = {
"/": (context) => const Homepage(),
"/mepage":(context)=> const Mepage(),
"/shopPage":(context) => const Shoppage(),
"/trustPage":(context) => const TrustPage(),
"/classificationpage":(context)=>const Classificationpage(),
"/detailspage":(context,{arguments})=>Detailspage(arguments: arguments)
};
var onGenerateRoutes = (RouteSettings settings) {
final String? name = settings.name;
final Function? pageContentBuider = routes[name];
if (pageContentBuider != null) {
if (settings.arguments != null) {
final Route route = MaterialPageRoute(
builder: (context) =>
pageContentBuider(context, arguments: settings.arguments));
return route;
} else {
final Route route = MaterialPageRoute(
builder: (context) => pageContentBuider(context));
return route;
}
}
return null;
};
tab跳转
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(builder: (BuildContext context) {
return const BottomNavigator(index:0);
}), (route) => false);
命名路由
Navigator.pushNamed(context, "/detailspage");
命名路由传参
Navigator.pushNamed(context, "/detailspage",arguments: {"title":"张三"});
接收参数
class Detailspage extends StatefulWidget {
final Map arguments;
const Detailspage({super.key, required this.arguments});
@override
State<Detailspage> createState() => _DetailspageState();
}
class _DetailspageState extends State<Detailspage> {
@override
void initState() {
super.initState();
print(widget.arguments);
}
@override
Widget build(BuildContext context) {
return Material();
}
}
返回上一步
class Detailspage extends StatefulWidget {
const Detailspage({super.key});
@override
State<Detailspage> createState() => _DetailspageState();
}
class _DetailspageState extends State<Detailspage> {
@override
Widget build(BuildContext context) {
return Material(
child: TextButton(
onPressed: () {
Navigator.pop(context);
},
child: Text("返回")),
);
}
}