通过 for 循环创建颤振抽屉

Posted

技术标签:

【中文标题】通过 for 循环创建颤振抽屉【英文标题】:create flutter Drawer by for loop 【发布时间】:2021-08-09 14:12:12 【问题描述】:

我在 Flutter 中使用 GetX。我已经厌倦了每次在抽屉里都这样写。


            ListTile(
              title: Text('signIn'),
              onTap: () 
                Get.to(SigninPage());
              ,
            ),

所以我决定像这样将它们放在一个 Map 中,然后用 for 语句循环。

  Map _showWidgets = 
    "Home": () => MyHomePage(),
    "Word": () => WordPage(),
    "Sign In": () => SigninPage(),
    "Sign Up": () => SignupPage(),
    "Writing": () => WritingPage(),
    "Order": () => OrderPage(),
    "Pronounce": () => PronouncePage()
  ;
  List get showNames 
    return _showWidgets.keys.toList();
  

//at Drawer for loop
for (var name in showNames)
  ListTile(
    title: Text(name),
    onTap: () 
      Get.to(_showWidgets[name]);
    ,
  ),

但我得到一个错误:

“在构建过程中调用了setState()或markNeedsBuild()。”

怎么了?命名路由是唯一的解决方案吗? 有没有用 for 循环创建 Drawer 的好方法?

当然它可以正常工作,但它并不优雅。

  Map _showWidgets = 
    "Home": () => Get.to(MyHomePage()),
    "Word": () => Get.to(WordPage()),
    "Sign In": () => Get.to(SigninPage()),
    "Sign Up": () => Get.to(SignupPage()),
    "Writing": () => Get.to(WritingPage()),
    "Order": () => Get.to(OrderPage()),
    "Pronounce": () => Get.to(PronouncePage())
  ;

【问题讨论】:

这个错误意味着你告诉 Flutter 重建 UI,而它已经在构建相同的小部件。通常是由侦听器和触发器一起触发引起的。在你的 GetX 逻辑中解决这个问题。 【参考方案1】:

试试这样的:

创建一个方法buildDrawerTiles:

List<ListTile> buildDrawerTiles(List<String> showNames)

   List<ListTile> tiles= [];

   for (var name in showNames)
    final tile = ListTile(
      title: Text(name),
      onTap: () 
      Get.to(_showWidgets[name]);
     ,
    );

    tiles.add(tile);
  

  return tiles;
 

然后在抽屉上,调用它:

buildDrawerTiles(showNames);

【讨论】:

以上是关于通过 for 循环创建颤振抽屉的主要内容,如果未能解决你的问题,请参考以下文章

颤振抽屉背景图片

如何用颤振制作顶部导航抽屉?

如何在颤振抽屉中返回主页/主页

Python - 尝试通过 for 循环创建字典

坚持通过 for 循环创建对象

在颤振中,如何移动导航抽屉的内容而不是覆盖在顶部。