我的动力学菜单存在构建上下文的问题。
实际上,我想动态创建一个菜单,但是我不知道如何在_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}"),
),
),
),
);
}
答案 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}"),
),
),
),
);
}