Ошибка: тип 'RequestCallBack' не является подтипом типа 'FirebaseUser' - PullRequest
0 голосов
/ 04 мая 2020

Я делаю простое приложение, так что когда пользователь нажимает кнопку обратного вызова, появляется форма обратного вызова, так как я реализую ее с использованием именованных маршрутов, поэтому при нажатии кнопки обратного вызова я получаю эту ошибку: type «RequestCallBack» не является подтипом типа «FirebaseUser» при маршрутизации на экран формы обратного вызова.

Это мой файл маршрутизации:

rout.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 голосов
/ 04 мая 2020

Вы передаете RequestCallback в качестве аргументов pushNamed:

arguments: RequestCallBack(user: user,mobileNumber: widget.mobileNumber,));

Но вы получаете аргументы как FirebaseUser:

final argsFireBaseUser = (RequestCallBack) settings.arguments;

Сначала вы должны получить аргументы как объект:

final rc = settings.arguments;

А затем получить пользователя:

argsFireBaseUser = rc.user;
0 голосов
/ 04 мая 2020

Вам не нужно передавать весь виджет там. Вы должны передать эти аргументы в виде списка следующим образом.

  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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...