0

我想要一个自定义的 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 名称,但问题是 Casting 并且收到以下错误表示无法进行强制转换

type '(dynamic) => CitySelectionScreen' 不是类型转换中类型 'Widget' 的子类型

我这样做的原因是作为 Firebase 分析集成的一部分,我需要更改我的整个导航代码以添加以前不存在的新 RouteSettings,我试图解决这个问题,改为设置默认名称在整个项目级别进行的更改。

请在这方面帮助我。

4

1 回答 1

1

builderWidgetBuilder类型的函数,您不能将其转换为Widget。我不确定您要实现什么,但也许如果您使用 null 调用 builder ,您将能够知道它返回哪个 Widget:

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

它打印

脚手架

于 2019-11-01T17:06:08.893 回答