我试图将menuButton类别名称传递给下一页,并在我的categoryScreens上设置下一页的状态。
当前,我收到一条红色的波浪线,并带有“不能将参数类型'Context'分配给参数类型'BuildContext'的注释”
import 'package:flutter/material.dart';
import 'package:boardwalk/Screens/categoryScreen.dart';
import 'package:boardwalk/Widgets/headerCategory.dart';
import 'package:path/path.dart';
class homeMenu extends StatelessWidget {
const homeMenu({Key key}) : super(key: key);
Padding menuButton(String category, IconData categoryIcon) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 10),
child: Container(
width: 95,
child: InkWell(
onTap: ()=>
Navigator.of(context).push(MaterialPageRoute(builder: (context) => categoryScreen()));
,
child: Column(
children: <Widget>[
Center(
child: Container(
height: 70,
width: 70,
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Colors.deepPurple, Colors.deepPurpleAccent],
),
shape: BoxShape.circle,
),
child: Icon(
categoryIcon,
size: 40.0,
color: Colors.white,
),
),
),
Padding(
padding: const EdgeInsets.all(6.0),
child: Text(
category,
style: TextStyle(
color: Colors.deepPurpleAccent,
fontSize: 14,
),
),
)
],
),
),
));
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Container(
height: 100,
width: 400,
child: ListView(scrollDirection: Axis.horizontal, children: <Widget>[
menuButton('Home', Icons.home),
menuButton('Eat', Icons.restaurant_menu),
menuButton('Shop', Icons.store),
menuButton('Travel', Icons.airplanemode_active),
menuButton('Play', Icons.local_activity),
menuButton('Service', Icons.build),
]),
),
);
}
}
如果导航器不喜欢上下文,我不确定该在导航器中传递什么,我完全不确定此时的期望。
答案 0 :(得分:11)
实际上,此问题是由导入path.dart包引起的。要解决此问题,请将上下文更改为this.context
答案 1 :(得分:3)
我只是将上下文更改为this.context,并在寻找解决方案2小时后解决了该问题!
答案 2 :(得分:0)
小部件无法访问BuildContext
方法之外的build
。如果要在此处创建像menuButton
这样的可重用的Widget函数,则必须传递在BuildContext
方法中收到的build
实例。
所以您的代码变成了
class homeMenu extends StatelessWidget {
const homeMenu({Key key}) : super(key: key);
Padding menuButton(BuildContext context, String category, IconData categoryIcon, BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 10),
...
);
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Container(
height: 100,
width: 400,
child: ListView(scrollDirection: Axis.horizontal, children: <Widget>[
menuButton(context, 'Home', Icons.home),
...
]),
),
);
}
}
答案 3 :(得分:0)
如果 “导入包” 没有帮助,则意味着您应该尝试以下语句。
声明BuildContext context;这是一个参数。