【问题标题】:How to fix: " Getter not found: 'context'. "如何解决:“找不到吸气剂:'context'。”
【发布时间】:2019-09-28 14:32:00
【问题描述】:

我想制作一个使用 hero 小部件和 inkwell 小部件的颤振应用程序,但是当我尝试使用 navigator.push 导航到新页面时出现此错误:

Compiler message: lib/main.dart:238:25: Error: Getter not found: 'context'.
         Navigator.push(context ,MaterialPageRoute(
                        ^^^^^^^

我尝试在某个 Telegram 组中提问,他们回答我应该定义名称“上下文”,但是当我这样做时,我收到此错误,甚至导航器也不会推送到新页面。

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

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

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您有一个返回 Widget 的方法。所以我希望您在主小部件的构建方法中调用此方法,对吧?

    因此,在此方法的范围内您没有“上下文”,您应该将其作为参数传递。您只有 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】:

      我认为他们说的就像一个参数:

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

      希望能帮到你。

      【讨论】:

        【解决方案3】:

        你需要有 context 在范围内,如果你只是定义名称,当你使用它时它将为空,在你的主应用程序中,你有一个将上下文作为参数的构建方法,所以你可以这样做:

        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

        的地方拥有它

        【讨论】:

          猜你喜欢
          • 2018-08-17
          • 1970-01-01
          • 2019-11-26
          • 1970-01-01
          • 2023-02-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-19
          相关资源
          最近更新 更多