导航时未定义命名 '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 对象作为参数)。
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 对象作为参数)。