错误:"RequestCallBack"类型不是类型"FirebaseUser"的子类型



我正在制作一个简单的应用程序,这样当用户按下回调按钮时,回调表单就会弹出,因为我使用命名路由来实现它,所以在按下回调按钮的时候,我会收到这样的错误:当路由到回调表单屏幕时,类型"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;

最新更新