Как получить имя класса виджета из объекта компоновщика в MaterialPageRoute - PullRequest
0 голосов
/ 01 ноября 2019

Я хотел бы иметь пользовательский MaterialPageRoute, где объект RouteSettings будет назначаться с именем по умолчанию, которое должно быть компоновщиком, т.е. именем класса виджета.

Я переопределяю метод, как показано ниже, и не понимаю, как получить имя класса из объекта построителя.

import 'package:flutter/material.dart';
class CMaterialPageRoute extends MaterialPageRoute {


 CMaterialPageRoute({@required builder, RouteSettings settings, maintainState = true, bool fullscreenDialog = false,})
  : assert(builder != null),
    assert(maintainState != null),
    assert(fullscreenDialog != null),
    assert(opaque),
    super(settings: settings == null ? new RouteSettings(name: (builder as Widget).toStringShort()):settings,fullscreenDialog: fullscreenDialog);

}

в приведенном выше коде я пытался получить виджет от компоновщика и установить короткое имя в качестве имени RouteSettings, но проблема в приведении, и приведенная ниже ошибка говорит о том, что приведение невозможно

type '(dynamic) => CitySelectionScreen' не является подтипом типа 'Widget' в приведении типа

Причина, по которой я это делаю, является частью FirebaseДля интеграции с аналитикой мне потребуется изменить весь код навигации, чтобы добавить новые RouteSettings, которых раньше не было, и я пытался обойти это, чтобы установить имя по умолчанию вместо изменений, которые должны быть выполнены на уровне всего проекта.

Пожалуйста, помогите мне в этом.

1 Ответ

0 голосов
/ 01 ноября 2019

builder - это функция типа WidgetBuilder , и вы не можете привести ее к Widget . Я не уверен, чего вы пытаетесь достичь, но, возможно, если вы позвоните в builder с нулевым значением, вы сможете узнать, какой виджет он возвращает:

final WidgetBuilder b = (BuildContext context) => Scaffold();
print(b(null).toString());

Он печатает

Эшафот

...