如何从MaterialPageRoute中的构建器对象获取小部件类名称

时间:2019-11-01 13:12:43

标签: flutter dart flutter-navigation

我想拥有一个自定义的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);

}

在上面的代码中,我试图从构建器中获取Widget并将短名称设置为RouteSettings Name,但问题是强制转换,并且出现以下错误提示无法强制转换

  

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

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

在这方面请帮助我。

1 个答案:

答案 0 :(得分:0)

builder WidgetBuilder类型的函数,您不能将其强制转换为 Widget 。我不确定您要实现的目标,但是如果您用null调用builder,您将能够知道它返回哪个Widget:

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

它打印

  

脚手架