我对编程很陌生。我创造了一个颤振的抽屉,它工作得很好。但是,我已经了解了for循环,现在我想缩短代码,这样我就不会显示10倍的ListTiles。现在,我的ListTile有一个for循环。我设法让抽屉正常工作,使用文本和图标,但似乎无法让onTap处理路由(页面)。我可以让Navigator.pushNamed在我的路由中返回一个页面,但是这个页面会被返回到我所有ListTiles中的所有项目。
我已经在我的main.dart中创建了路线。我已经创建了我的类和页面列表。我在Builder之外的函数中创建了for循环,并将Buildcontext (上下文)解析到函数中,这似乎没有问题。我的代码不会抛出错误,但只返回一页。
我花了四天时间阅读,做了很多类似的解决方案,但我根本找不到一个可行的解决方案。我似乎没有找到一个正确的答案,我的问题,因为所有的解决办法,通过某种错误,或在充其量,没有错误,但它不起作用。这是我的密码。
// MAIN.DART FILE TO ILLUSTRATE PAGE ROUTES
class MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
routes: {
'/page2': (context) => const InvoiceApp(),
'/page3': (context) => const Currency(),
'/page4': (context) => const Expenses(),
'/page5': (context) => const Reports(0),
'/page6': (context) => const Graphs(0),
'/page7': (context) => const Download(0),
'/page8': (context) => const Customer(),
'/page9': (context) => const People(0),
'/page10': (context) => const Resources(0),
'/page11': (context) => const Profile(),
},
home: Scaffold(
//CLASS ROUTES
class Routes {
String page;
Routes({required this.page});
}
//LIST
list<Routes> routeList = [
Routes(page: '/page2'),
Routes(page: '/page3'),
Routes(page: '/page4'),
Routes(page: '/page5'),
Routes(page: '/page6'),
Routes(page: '/page7'),
Routes(page: '/page8'),
Routes(page: '/page9'),
Routes(page: '/page10'),
Routes(page: '/page11'),
];
//MAIN CODE
class MenuBar extends StatelessWidget {
const MenuBar({Key? key}) : super(key: key);
List<ListTile> getMenuItems(BuildContext context, var index) {
List<ListTile> menuList = [];
for (var i = 0; i < menuItemList.length; i++) {
var item = menuItemList[i];
var loopCode = ListTile(
title: Text(item),
leading: Icon(
icons[i],
color: Colors.teal,
),
// onTap: () {
// Navigator.pushNamed(context, routeList[index].page);
// },
onTap: () {
Navigator.pushNamed(context, '/page3');
},
);
menuList.add(loopCode);
}
return menuList;
}
@override
Widget build(
BuildContext context,
) {
// getMenuItems(context);
return Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: [
const AccountHeader(),
Column(
children: getMenuItems(context, routeList),
),
],
),
);
}
List<String> menuItemList = [
'Invoices',
'Currency Converter',
'Expenses',
'Reports',
'Graphs',
'Downloads',
'Customers',
'People Management',
'Resources',
'Profile',
];
List<IconData> icons = [
Icons.receipt,
Icons.money,
Icons.money,
Icons.report,
Icons.bar_chart,
Icons.download,
Icons.people,
Icons.people,
Icons.cake,
Icons.person,
];
请注意:
。
你能帮帮我吗。谢谢你的好意
发布于 2022-01-04 21:30:05
问题是,您使用的是从函数传递的索引,而不是循环中的索引。替换注释的代码
// onTap: () {
// Navigator.pushNamed(context, routeList[index].page);
// },
使用
onTap: () {
Navigator.pushNamed(context, routeList[i].page);
},
i是for循环的索引。
https://stackoverflow.com/questions/70583667
复制相似问题