如何解决:“找不到Getter:'上下文'。”

时间:2019-09-28 14:32:00

标签: flutter dart

我想制作一个使用英雄小部件和墨水池小部件的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(
...

我希望导航到新页面,但是除了第一页之外我什么也没得到

3 个答案:

答案 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(
...

希望我。