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对象作为参数的动态变量)。