导航时未定义命名 'context'

Undefined named 'context' while navigating

import 'package:flutter/material.dart';
import 'fruits_listing_card.dart';
import 'fruits_page.dart';

Map<String, Widget> fruits = {
  "banana": FruitsListingCards(
    fruitBGColor: 0xFFF8A8B5,
    fruitImagePath: 'images/fruits/banana.png',
    fruitName: 'Banana',
    fruitPrice: 'Rs. 105',
    fruitShortDescription: 'Ripe & Tasty',
    onTap: () {
      Navigator.push(context, MaterialPageRoute(builder: (context) => FruitsPage()),);
    },
  ),
}

// 第二个文件

import 'package:flutter/material.dart';
class FruitsPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Container(),
      ),
    );
  }
}

这两个代码在不同的文件中。 FruitsListingCards 是一个具有手势检测器功能的小部件。 onTap 是一个带函数的参数。 我在主文件中使用 FruitsListingCards,每当用户点击它时,都应该转到 FruitsPage 屏幕。但错误是不允许我这样做。任何有适当解释的解决方案都会对我有很大帮助。

编辑: 为了正确理解代码,请查看我的回购协议: https://github.com/RaghavTheGreat1/fruits_delivery/tree/master/lib

您必须以某种方式提供上下文,以便它可以连接上一个屏幕和下一个屏幕。

您可以为此将其包装在一个函数中。

以下最少的代码将帮助您更好地理解。

class DeleteWidget extends StatefulWidget {   
@override  
_DeleteWidgetState createState() => _DeleteWidgetState(); 
}

class FruitsPage extends StatelessWidget {   
final Function call;   
FruitsPage({this.call});   
@override   
Widget build(BuildContext context) {
        return Container(
          child: RaisedButton(
            child: Text("press"),
            onPressed: call,
          ),
        );   
} 
}

    class NewPage extends StatelessWidget {   
    @override   
    Widget build(BuildContext context) {
            return Scaffold(
              body: Center(
                child: Container(
                  child: Text("FruiysPage"),
                ),
              ),
            );   
} 
}




    callme(context) {   
Map<String, Widget> fruits = {
        "banana": FruitsPage(
          call: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => NewPage()),
            );
          },
        )   
};   
return fruits; 
}

好吧,我自己解决了这个问题,这比其他人给我的建议要容易,即使他们没有查看我在 GitHub 存储库中提交的代码。

快速解决方案或修复是在 FruitsListingCards 的 GestureDetector 的匿名函数中添加 Navigator.push(context, MaterialPageRoute(builder: (context) => fruitsPage));,然后返回 fruitsPage(这是一个动态变量,将以 Class 对象作为参数)。