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

时间:2020-05-04 08:34:37

标签: flutter dart

我正在制作一个简单的应用程序,以便当用户按下回调按钮时,会弹出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();

}

2 个答案:

答案 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;