Flutter:我的动态菜单存在上下文问题

时间:2019-01-14 13:32:09

标签: flutter flutter-layout

我的动力学菜单存在构建上下文的问题。

实际上,我想动态创建一个菜单,但是我不知道如何在_MenuItem的类中使用上下文。

有替代方法吗?

我的代码:

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      ...
      body: MenuButtons(kMenuCard),
    );
  }
}

class MenuButtons extends StatelessWidget {

  final List<MenuCard> _menuButtons;

  MenuButtons(this._menuButtons);

  @override
  Widget build(BuildContext context) {
    return GridView.count(
        crossAxisCount: 2,
        children: _buildMenu()
    );
  }

  List<_MenuItem> _buildMenu() {
    return _menuButtons.map((button) => _MenuItem(button)).toList();
  }
}

在这一部分中,我的IDE提醒我:“缺少构建上下文”,我不知道如何以不同的方式实现buildContext

class _MenuItem extends GridTile {

  _MenuItem(MenuCard button)
      : super(
    child:GestureDetector(
      onTap: (){Navigator.push(context, "${button.route}")},
      child: Card(
        color: Colors.teal,
        child: Center(
          child: Text("${button.title}"),
        ),
      ),
    ),
  );
}

1 个答案:

答案 0 :(得分:0)

您需要将BuildContext传递给您的_MenuItem类:

更新代码:

@override
  Widget build(BuildContext context) {
    return GridView.count(
        crossAxisCount: 2,
        children: _buildMenu(context) // Pass Context
    );
  }

List<_MenuItem> _buildMenu(BuildContext context) { 
    return _menuButtons.map((button) => _MenuItem(button,context)).toList();
  }
}

class _MenuItem extends GridTile {

  _MenuItem(MenuCard button,BuildContext context)
      : super(
    child:GestureDetector(
      onTap: (){Navigator.push(context, "${button.route}")},
      child: Card(
        color: Colors.teal,
        child: Center(
          child: Text("${button.title}"),
        ),
      ),
    ),
  );
}