导航时未定义名称'context'

问题描述 投票:0回答:2
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

flutter dart screen navigator
2个回答
1
投票

您必须提供一些上下文信息,以便它可以连接上一个屏幕和下一个屏幕。

您可以为此工作。

遵循最少的代码将帮助您更多地理解。

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; }

0
投票

好吧,我自己找出了问题,即使其他人没有研究我在GitHub存储库中提交的代码,也比其他人建议的问题容易。

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

© www.soinside.com 2019 - 2024. All rights reserved.