如何在Flutter中使用路线制作持久抽屉?

时间:2019-09-15 13:47:53

标签: flutter

现在,我为我的抽屉提供了一个可供所有页面支架使用的类。当我推一条新路线时,抽屉将重置状态。有什么办法可以解决这个问题?我试图制作一个可以根据路线更改所选项目背景的抽屉,但是当我单击自定义列表图块时,它只会突出显示抽屉中的第一个项目,而这并不是期望的结果。

在状态类的顶部:

    int selectedIndex = 0;

下面是一些代码:

      ListView.builder(
        padding: EdgeInsets.zero,
        shrinkWrap: true,
        itemCount: _drawerItems.length,
        // primary: true,
        itemBuilder: (context, index) {
          DrawerItem currentItem = _drawerItems[index];
          return Container(
            decoration: BoxDecoration(
                color: selectedIndex == index ? Colors.blue[100] : Colors.white,
                borderRadius: BorderRadius.only(
                    topRight: Radius.circular(50),
                    bottomRight: Radius.circular(50))),
            child: ListTile(
              title: Text(
                currentItem.title,
                style: TextStyle(
                  fontSize: 15.0,
                  fontFamily: "Muli",
                  letterSpacing: .3,
                  fontWeight: FontWeight.w600,
                ),
              ),
              leading: Icon(currentItem.icon, color: Colors.black),
              onTap: () {
                setState(() {
                  selectedIndex = index;
                });
                Navigator.of(context).popAndPushNamed(routes[index]);
              },
            ),
          );
        },
      )

1 个答案:

答案 0 :(得分:0)

当您推一条新路线时,它将创建一个新抽屉,而当前抽屉将被处置。因此setState什么也不做。

您应该尝试将selectedIndex声明为静态[或全局]变量,然后将onTap更改为:

              onTap: () {
                selectedIndex = index;
                Navigator.of(context).popAndPushNamed(routes[index]);
              },