Muh*_*hid 8 exception dart flutter
我正在创建一个应用程序,我是扑扑,飞镖的新手。我在“上下文”中有问题。我想替换页面/屏幕 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>()
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
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')
]
),
);
}
Run Code Online (Sandbox Code Playgroud)
这是代码错误。我不知道为什么上下文对我不起作用。
Jos*_*eve 12
问题(为什么上下文对您不起作用)是因为您的customCard方法中没有BuildContext对象
有几种方法可以实现这一点..
一种方法是在你的方法中添加一个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,
),
),
),
],
),
),
),
),
);
}
Run Code Online (Sandbox Code Playgroud)
然后你的 ListView 孩子会像
customCard(context, "Theory Test 1")
Run Code Online (Sandbox Code Playgroud)
另一种方法是创建一个无状态小部件并在 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,
),
),
),
],
),
),
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
然后你的 ListView 孩子会像......
CustomCard("Theory Test 1")
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助你。
| 归档时间: |
|
| 查看次数: |
12872 次 |
| 最近记录: |