我正在制作一个简单的应用程序,以便当用户按下回调按钮时,会弹出callBack表单,因为我正在使用命名路由来实现它,因此在按下回调按钮时出现此错误:路由到回调表单屏幕时,“ RequestCallBack”不是“ FirebaseUser”类型的子类型。
这是我的路由文件:
routes.dart
class RouteGenerator {
static Route<dynamic> generateRoute(RouteSettings settings) {
// Getting arguments passed in while calling Navigator.pushNamed
final argsFireBaseUser = settings.arguments;
final argsString = settings.arguments;
switch (settings.name) {
case '/request-call-back':
return MaterialPageRoute(
builder: (_) => RequestCallBack(user: argsFireBaseUser,
mobileNumber: argsString)
);
default:
return _errorRoute();
}
}
screen.dart
final String mobileNumber;
Screen({
Key key,
@required this.mobileNumber,
}) : assert(mobileNumber != null),
super(key: key);
onPressed:() {
Navigator.of(context).pushNamed('/request-call-back',
arguments: RequestCallBack(user: user,mobileNumber:
widget.mobileNumber,));
}
requestcallback.dart
class RequestCallBack extends StatefulWidget {
final String mobileNumber;
final FirebaseUser user;
RequestCallBack({
Key key,
@required this.user,
@required this.mobileNumber,
}) : assert(mobileNumber != null && user != null),
super(key: key);
@override
_RequestCallBackState createState() => _RequestCallBackState();
}
答案 0 :(得分:0)
您不必将整个小部件传递到那儿。您必须将这些参数作为列表传递,如下所示。
Navigator.of(context).pushNamed('/request-call-back',
arguments: [user,
widget.mobileNumber]);
在导航路线中,您还必须只传递以下列表。
case '/request-call-back':
return MaterialPageRoute(
builder: (_) => RequestCallBack(data:settings.arguments) // changed
);
现在在stfull小部件中,您可以接受以下数据。
class RequestCallBack extends StatefulWidget {
final List data;
RequestCallBack({
Key key,
@required this.data,
}) : assert(data != null),
super(key: key);
现在,在状态小部件中,您可以分离数据。
final String mobileNumber = widget.data[0];
final FirebaseUser user = widget.data[1];
答案 1 :(得分:0)
您正在传递RequestCallback作为pushNamed的参数:
arguments: RequestCallBack(user: user,mobileNumber: widget.mobileNumber,));
但是您以FirebaseUser的身份获取参数:
final argsFireBaseUser = (RequestCallBack) settings.arguments;
您应该首先将参数作为对象检索
final rc = settings.arguments;
然后获取用户:
argsFireBaseUser = rc.user;