我正在创建一个应用程序,我是一个新的扑翼,飞镖。我在“上下文”方面有问题。我想替换页面/屏幕onTab()。但我遇到了以下错误:
> ══════ Exception caught by gesture ════════════════════════ The
> following NoSuchMethodError was thrown while handling a gesture: The
> method 'findAncestorStateOfType' was called on null. Receiver: null
> Tried calling: findAncestorStateOfType<NavigatorState>()下面是我的代码:
class Theorytest extends StatelessWidget {
Widget customcard(String testName ){
return Padding(
padding: EdgeInsets.all(10.0),
child: InkWell(
onTap: (){
Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (context) => GetTestData(),
),
);
},
child: Material(
borderRadius: BorderRadius.circular(50.0),
elevation: 20.0,
child : Container(
child: Column(
children : <Widget>[
Padding(
padding: EdgeInsets.fromLTRB(5.0, 20.0, 10.0, 20.0),
child: Text( testName,
style: TextStyle(
fontSize: 24.0,
),
),
),
],
),
),
),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: ListView(
children : <Widget>[
customcard('Theory Test 1'),
customcard('Theory Test 2'),
customcard('Theory Test 3'),
customcard('Theory Test 4'),
customcard('Theory Test 5'),
customcard('Theory Test 6'),
customcard('Theory Test 7'),
customcard('Theory Test 8'),
customcard('Theory Test 9'),
customcard('Theory Test 10'),
customcard('Theory Test 11'),
customcard('Theory Test 12'),
customcard('Theory Test 13'),
customcard('Theory Test 14'),
customcard('Theory Test 15')
]
),
);
}这是代码错误。我不知道为什么上下文对我不起作用。

发布于 2020-03-17 04:05:18
问题(为什么上下文对您无效)是因为您的BuildContext方法中没有customCard对象
有几种方法可以实现这一点。
一种方法是在方法中添加一个BuildContext参数,如下所示
Widget customcard(BuildContext context, String testName) {
return Padding(
padding: EdgeInsets.all(10.0),
child: InkWell(
onTap: () {
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (context) => GetTestData(),
),
);
},
child: Material(
borderRadius: BorderRadius.circular(50.0),
elevation: 20.0,
child: Container(
child: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.fromLTRB(5.0, 20.0, 10.0, 20.0),
child: Text(
testName,
style: TextStyle(
fontSize: 24.0,
),
),
),
],
),
),
),
),
);
}那么你的ListView孩子就会像这样
customCard(context, "Theory Test 1")另一种方法是创建一个无状态小部件,并在build方法中返回customcard
class CustomCard extends StatelessWidget {
String testName;
CustomCard(this.testName);
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.all(10.0),
child: InkWell(
onTap: () {
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (context) => GetTestData(),
),
);
},
child: Material(
borderRadius: BorderRadius.circular(50.0),
elevation: 20.0,
child: Container(
child: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.fromLTRB(5.0, 20.0, 10.0, 20.0),
child: Text(
testName,
style: TextStyle(
fontSize: 24.0,
),
),
),
],
),
),
),
),
);
}
}然后你的ListView孩子就会像..。
CustomCard("Theory Test 1")我希望这对你有帮助。
https://stackoverflow.com/questions/60711890
复制相似问题