我正在制作一个简单的应用程序,这样当用户按下回调按钮时,回调表单就会弹出,因为我使用命名路由来实现它,所以在按下回调按钮的时候,我会收到这样的错误:当路由到回调表单屏幕时,类型"RequestCallBack"不是类型"FirebaseUser"的子类型。
这是我的路由文件:
路线.省道
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.art
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();
}
您不必将整个小部件传递到那里。您必须将这些参数作为列表传递,如下所示。
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);
现在,在State窗口小部件中,您可以分离数据。
final String mobileNumber = widget.data[0];
final FirebaseUser user = widget.data[1];
您正在传递RequestCallback作为pushNamed:的参数
arguments: RequestCallBack(user: user,mobileNumber: widget.mobileNumber,));
但您正在以FirebaseUser:的身份检索参数
final argsFireBaseUser = (RequestCallBack) settings.arguments;
您应该首先将检索参数作为对象:
final rc = settings.arguments;
然后获取用户:
argsFireBaseUser = rc.user;