首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在for循环中使用onTap调用索引

如何在for循环中使用onTap调用索引
EN

Stack Overflow用户
提问于 2022-01-04 18:46:29
回答 1查看 667关注 0票数 1

我对编程很陌生。我创造了一个颤振的抽屉,它工作得很好。但是,我已经了解了for循环,现在我想缩短代码,这样我就不会显示10倍的ListTiles。现在,我的ListTile有一个for循环。我设法让抽屉正常工作,使用文本和图标,但似乎无法让onTap处理路由(页面)。我可以让Navigator.pushNamed在我的路由中返回一个页面,但是这个页面会被返回到我所有ListTiles中的所有项目。

我已经在我的main.dart中创建了路线。我已经创建了我的类和页面列表。我在Builder之外的函数中创建了for循环,并将Buildcontext (上下文)解析到函数中,这似乎没有问题。我的代码不会抛出错误,但只返回一页。

我花了四天时间阅读,做了很多类似的解决方案,但我根本找不到一个可行的解决方案。我似乎没有找到一个正确的答案,我的问题,因为所有的解决办法,通过某种错误,或在充其量,没有错误,但它不起作用。这是我的密码。

代码语言:javascript
运行
复制
// 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,
];

请注意:

  1. 我的路线有10页,但我的路线从第2页开始,到第11页结束。这不是问题,因为我的main.dart文件是我的应用程序的登陆页。

  1. 我的问题是onTap。您将注意到两个onTap代码(一个被注释掉)。如果我使用当前活动的一个(...page3),那么它可以工作,但所有的10个页面,然后返回到第3页,一旦任何10个瓷砖被点击。如果我使用被注释掉的onTap,那么应用程序就会加载,抽屉就会打开find,但是没有瓷砖会导航到任何页面。而且,我的代码中没有出现错误。

你能帮帮我吗。谢谢你的好意

EN

回答 1

Stack Overflow用户

发布于 2022-01-04 21:30:05

问题是,您使用的是从函数传递的索引,而不是循环中的索引。替换注释的代码

代码语言:javascript
运行
复制
   // onTap: () {
      //   Navigator.pushNamed(context, routeList[index].page);
     // },

使用

代码语言:javascript
运行
复制
  onTap: () {
      Navigator.pushNamed(context, routeList[i].page);
    },

i是for循环的索引。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70583667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档