我想制作一个使用英雄小部件和墨水池小部件的Flutter应用程序,但是当我尝试使用navigator.push导航到新页面时,出现此错误:
Compiler message: lib/main.dart:238:25: Error: Getter not found: 'context'.
Navigator.push(context ,MaterialPageRoute(
^^^^^^^
我尝试在某个Telegram组中问我的问题,他们回答我应该定义名称“ context”,但是当我这样做时,会出现此错误,甚至导航器也不会推送到新页面。
...
Widget _buildPillItmes(String name, String imagePath, String count){
return Padding(
padding: EdgeInsets.only(top: 20.0, right: 10.0, left: 10.0),
child: new InkWell(
onTap: () {
//BuildContext context;
Navigator.push(context ,MaterialPageRoute(
builder: (context) => DetailsPage(heroTag: imagePath, pillName: name, pillCount: count)
));
},
child: new Row(
...
我希望导航到新页面,但是除了第一页之外我什么也没得到
答案 0 :(得分:1)
您需要在范围内使用 context ,如果您仅定义名称,则使用时将为null;在主应用程序中,您有一个将上下文作为参数的构建方法,因此您可以执行以下操作:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Welcome to Flutter',
home: Scaffold(
appBar: AppBar(
title: Text('Welcome to Flutter'),
),
body: _buildPillItmes("name", "image", "count", context),
),
);
}
Widget _buildPillItmes(String name, String imagePath, String count, BuildContext context){
return Padding(
padding: EdgeInsets.only(top: 20.0, right: 10.0, left: 10.0),
child: new InkWell(
onTap: () {
Navigator.push(context ,MaterialPageRoute(
builder: (context) => DetailsPage(heroTag: imagePath, pillName: name, pillCount: count)
));
},
child: new Row(
...
}
您只需要适应您的情况并找到您具有上下文的最近点,可能就可以在您调用 _buildPillItmes
的地方找到它答案 1 :(得分:1)
您有一个返回Widget的方法。所以我希望您在主窗口小部件的build方法中调用此方法,对吧?
因此,在此方法的范围内,您没有“上下文”,应将其作为参数传递。您只有在build方法中具有上下文。
在您的主窗口小部件中:
class Main extends StatelessWidget {
@override
Widget build(BuildContext context) { // Here you have the context
return new Center (
child: this._buildPillItmes("name", "imagePath", 0, context), // Here you pass the context
);
}
}
您的方法
...
Widget _buildPillItmes(String name, String imagePath, String count, BuildContext context){ // Here you expect the context
return Padding(
padding: EdgeInsets.only(top: 20.0, right: 10.0, left: 10.0),
child: new InkWell(
onTap: () {
// Now you have context and it should work
Navigator.push(context ,MaterialPageRoute(
builder: (context) => DetailsPage(heroTag: imagePath, pillName: name, pillCount: count)
));
},
child: new Row(
...
答案 2 :(得分:0)
我认为他们说得像个参数:
...
Widget _buildPillItmes(BuildContext context, String name, String imagePath, String count){
return Padding(
padding: EdgeInsets.only(top: 20.0, right: 10.0, left: 10.0),
child: new InkWell(
onTap: () {
Navigator.push(context ,MaterialPageRoute(
builder: (context) => DetailsPage(heroTag: imagePath, pillName: name, pillCount: count)
));
},
child: new Row(
...
希望我。