首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

命名路线导航错误:类型'MaterialPageRoute<dynamic>‘不是类型'Route<String>’的子类型

基础概念

在Flutter中,MaterialPageRoute 是一种常用的路由类型,用于在应用的不同页面之间进行导航。Route 是一个抽象类,定义了路由的基本行为。MaterialPageRoute 继承自 PageRouteBuilder,而 PageRouteBuilder 又实现了 Route 接口。

问题原因

当你遇到“类型 'MaterialPageRoute<dynamic>' 不是类型 'Route<String>' 的子类型”这个错误时,通常是因为你在使用 Navigator.pushNavigator.of(context).push 方法时,传递了一个不兼容的路由类型。

解决方法

  1. 确保导入正确的包: 确保你已经导入了 material.dart 包中的 MaterialPageRoute
  2. 确保导入正确的包: 确保你已经导入了 material.dart 包中的 MaterialPageRoute
  3. 检查路由类型: 确保你在调用 Navigator.pushNavigator.of(context).push 时,传递的是 MaterialPageRoute 类型。
  4. 检查路由类型: 确保你在调用 Navigator.pushNavigator.of(context).push 时,传递的是 MaterialPageRoute 类型。
  5. 使用泛型: 如果你在使用泛型,确保类型参数正确。例如,如果你有一个 Route<String> 类型的变量,你可以这样使用:
  6. 使用泛型: 如果你在使用泛型,确保类型参数正确。例如,如果你有一个 Route<String> 类型的变量,你可以这样使用:

示例代码

以下是一个完整的示例,展示了如何在 Flutter 中使用 MaterialPageRoute 进行导航:

代码语言:txt
复制
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home Screen'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => SecondScreen()),
            );
          },
          child: Text('Go to Second Screen'),
        ),
      ),
    );
  }
}

class SecondScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Screen'),
      ),
      body: Center(
        child: Text('Welcome to the Second Screen!'),
      ),
    );
  }
}

参考链接

通过以上步骤,你应该能够解决“类型 'MaterialPageRoute<dynamic>' 不是类型 'Route<String>' 的子类型”这个问题。

相关搜索:类型'_InternalLinkedHashMap<String,dynamic>‘不是类型'String’的子类型错误错误:类型'String‘不是类型'List<dynamic>’的子类型错误:'List<dynamic>‘不是'Map<String,dynamic>’类型的子类型MaterialPageRoute<dynamic>:类型'Widget‘不是’Widget‘类型的子类型// Flutter(Null))<String,dynamic>‘不是'int’类型的子类型错误类型“Future<dynamic>”不是类型“Route<Object>”的子类型类型“_InternalLinkedHashMap<String,dynamic>”不是类型“List<dynamic>”的子类型获取'List<dynamic>‘类型的错误不是'Map<String,dynamic>’类型的子类型颤动错误(类型'List<dynamic>‘不是类型'Map<String,String>’的子类型)错误:类型‘(动态) =>Meta’不是'transform‘的类型'(String,dynamic) => MapEntry<dynamic,dynamic>’的子类型类型'(String) => dynamic‘不是类型'Widget’的子类型Im获取-类型'List<dynamic>‘不是类型'Map<String,dynamic>’的子类型错误颤动错误: List<dynamic>不是类型Map<String、dynamic>的子类型类型“_InternalLinkedHashMap<dynamic,dynamic>”不是类型转换中的“String”类型的子类型类型“_InternalLinkedHashMap<String,dynamic>”不是类型“Iterable<dynamic>”FLUTTER的子类型异常:类型'List<dynamic>‘不是类型'Map<String,dynamic>’的子类型List<dynamic>不是类型Map<String、dynamic>的子类型Flutter - String,dynamic不是List<dynamic>类型的子类型类型List<dynamic>不是Map<String,dynamic>的子类型错误“类型'Future<dynamic>‘不是类型'StreamTransformer<List<String>,List<String>>’的子类型”
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Flutter路由管理和页面参数传递(获取&返回)

所谓路由管理,就是管理页面之间如何跳转,通常也可被称为导航管理。...fullscreenDialog表示新路由页面是否是一个全屏模态对话框,在iOS中,如果fullscreenDialog为true,新页面将会从屏幕底部滑入(而不是水平方向)。...命名路由 所谓命名路由(Named Route)即给路由起一个名字,然后可以通过路由名字直接打开新路由。这为路由管理带来了一种直观、简单方式。...Navigator.of(context).push(route); } push方法使用 我们可以将参数放在 SecondScreen 构造函数中,也可以放在构造 MaterialPageRoute...之前通过在 WidgetsApp 注册routes 方式默认生成 PageRoute 类型MaterialPageRoute

4.7K40
  • Flutter开发(15)- 路由导航

    但是Route是一个抽象类,所以它是不能实例化 在上面有一段注释,让我们查看MaterialPageRoute来使用 /// See [MaterialPageRoute] for a route that...并不是Route直接子类: MaterialPageRoute在不同平台有不同表现 对Android平台,打开一个页面会从屏幕底部滑动到屏幕顶部,关闭页面时从顶部滑动到底部消失 对iOS平台,打开一个页面会从屏幕右侧滑动到屏幕左侧...基本跳转 我们可以通过创建一个新Route,使用Navigator来导航到一个新页面,但是如果在应用中很多地方都需要导航到同一个页面(比如在开发中,首页、推荐、分类页都可能会跳到详情页),那么就会存在很多重复代码...在这种情况下,我们可以使用命名路由(named route命名路由是将名字和路由映射关系,在一个地方进行统一管理 有了命名路由,我们可以通过Navigator.pushNamed() 方法来跳转到新页面...,类型为Map 修改MaterialApp中代码: return MaterialApp( title: 'Flutter Demo', theme: ThemeData

    98520

    从零开始Flutter之旅: Navigator

    这次我们接着来了解一下路由导航Navigator相关信息。 Flutter中路由管理与原生开发类似,都会维护一个路由栈,通过push入栈打开一个新页面,然后再通过pop出栈关闭老页面。...用法很简单通过push传递一个Route。这里对应MaterialPageRoute。它会提供一个builder方法,我们直接在builder中返回想要跳转页面实例即可。... route = _history.last; assert(route....ModalRoute.of()内部运用是context.dependOnInheritedWidgetOfExactType() 是不是有点眼熟?...命名路由 命名路由,顾名思义通过提前注册好名称来跳转到对应页面。 首页我们需要注册一个路由表,约定好名称与页面的一一对应。

    74910

    flutter路由

    ; Navigator 方法 作用 pushNamed 按路由名字路由入栈 pushReplacementNamed 按路由名字替换当前路由栈 popAndPushNamed 将当前路线导航器中弹出,...并在其中推入已命名路由位置 pushNamedAndRemoveUntil 按路由名称将具有给定名称路由推入导航器,然后删除所有 push 直接路由入栈 pushReplacement 替换当前路由栈...pushAndRemoveUntil 将具有给定名称路由推入导航器,然后删除所有 replace 用新路由替换导航器上路由 replaceRouteBelow 用新路由替换导航器上路由。...,然后[Route.dispose]要替换路线是给定“ anchorRoute”下方路线。...,如果为空就不做任何操作; 路由命名 我们想执行跟name有关Navigator方法就必须先给路由命名,比如pushNamed方法, 注册路由在MaterialApproutes属性,它定义为:

    1.7K20

    Flutter 构建完整应用手册-导航器 顶

    导航到新屏幕并返回 大多数应用程序包含几个用于显示不同类型信息屏幕 例如,我们可能有一个显示产品屏幕。 然后,我们用户可以在新屏幕上点击产品以获取更多信息。...push方法会将Route添加到由导航器管理路由堆栈中! push方法需要Route,但Route从哪里来? 我们可以创建自己,或者使用MaterialPageRoute开箱即用。...pop方法将从由导航器管理路线堆栈中移除当前Route。...路线 定义一个Todo类 创建Todos列表 创建一个可以显示关于待办事项信息详情屏幕 导航并将数据传递到详情屏幕 1.定义一个Todo类 首先,我们需要一种简单方法来表示Todos。...通常,您可以创建可重用部件,而不是重复代码,但对于此示例,我们将复制代码以进行演示。

    4.9K10

    第132期:flutter导航和路由

    : Text(song.name), 由于Navigator保存了一个Route对象堆栈(表示历史堆栈),所以push()方法也使用Route对象作为参数。...MaterialPageRoute对象是Route子类,用于指定Material Design过渡动画。...命名路由 对于有些具有简单导航和深度链接需求应用程序,我们可以使用Navigator进行导航,使用MaterialApp对象routes属性对路由进行配置: @override Widget build...命名路由局限 尽管命名路由可以处理深层链接,但是他们表现总是一致,没办法做到自定义。当应用平台接收到一个新深层链接,不论用户此时在哪个位置,Flutter都会将新路线推送到导航器上。...如果我们使用是路由包,则页面支持路由始终是可深度链接,而无页面的路由则不是。 当从导航器中删除页面支持路由时,它之后所有无页面路由也将被删除。

    2K30

    Flutter | 路由管理

    点击进行跳转 FlatButton( child: Text("点击跳转"), textColor: Colors.red, onPressed: () { //导航到新路由...; })); }, ) 复制代码 效果: MaterialPageRoute MaterialPageRoute 是 Material 组件库提供组件,他可以针对不同平台,...settings, this.maintainState = true, bool fullscreenDialog = false, }) builder 是 WidgetBuilder 类型回调函数...push(route); } 复制代码 将给定路由入栈(打开页面),返回 future 对象,用于接收该路由出栈是返回数据。...I/flutter (23778): 路由返回值 我是返回值 复制代码 需要注意是 ​ 1,参数是通过构造方法传入 ​ 2,如果点击左上角,或者返回按钮进行返回,则页面返回值为 null 命名路由

    85720

    再谈路由与导航,详谈Flutter是如何实现页面切换

    Navigator 则会维护一个路由栈管理RouteRoute打开即入栈,Route关闭即出栈,还可以直接替换栈内某一个Route。...要导航到一个新页面,我们需要创建一个 MaterialPageRoute 实例,调用 Navigator.push 方法将新页面压到堆栈顶部。...也许你会想到,我们可以约定使用字符串常量去定义、使用路由,但我们无法避免通过接口数据下发错误路由标识符场景。面对这种情况,无论是直接报错或是不响应错误路由,都不是一个用户体验良好解决办法。...对于命名路由,我们为了能够响应错误路由标识符,还需要一并注册 UnknownRoute 。...可以看到,关于路由导航,Flutter综合了Android、iOS和React特点,简洁而不失强大。 而在中大型应用中,我们通常会使用命名路由来管理页面间切换。

    2.8K20

    Flutter 页面交互 | 路由跳转方式、常用API、发送接收数据、可能发生问题与知识点拓展

    修改ContentPage (封装pushData()方法, 用于导航以及接收数据), String results; //封装一个函数 处理路由返回数据 // 接收数据是异步,需要加...async关键字; // 需要接收数据,需要加 await关键字; // 需要准备一个数据类型变量,来承载; // 指定函数返回类型String,Alt+enter 改成 Future<...; // push()要求传入一个Route对象,一般用 MaterialPageRoute类 var datas = await Navigator.of(context).push(...可以写main函数,也可以不写; 建议只在首页写main,其他页面不要写,便于查找和维护; 命名路由 路径名称 正确性(定义与使用要相符合)、 传参(参数类型一致性问题; 1....需要接收数据,需要加 await关键字; // 需要准备一个数据类型变量,来承载; // 指定函数返回类型String,Alt+enter 改成 Future Future

    3.3K10

    Flutter | 路由管理

    2,创建一个文本按钮,点击进行跳转 child: Text("点击跳转"), textColor: Colors.red, onPressed: () { //导航到新路由...settings, this.maintainState = true, bool fullscreenDialog = false, }) builder 是 WidgetBuilder 类型回调函数...中若此参数为 true,新页面会从底部滑入,而不是水平方向 Navigator Navigator 是一个路由管理组件,它提供了打开和退出路由方法 Navigator 通过栈来管理活动路由集合,通常屏幕显示页面就是栈顶路由...push(route); } 将给定路由入栈(打开页面),返回 future 对象,用于接收该路由出栈是返回数据。 关闭一个页面 Navigator.of(context)!....I/flutter (23778): 路由返回值 我是返回值 需要注意是 ​ 1,参数是通过构造方法传入 ​ 2,如果点击左上角,或者返回按钮进行返回,则页面返回值为 null 命名路由 有名字路由

    95450

    Flutter中基本路由、命名路由、替换路由,返回到根路由

    Flutter中路由,通俗地讲就是页面跳转。在Flutter中通过 Navigator 组件管理路由导航。 Flutter中给我们提供了两种配置路由跳转方式:基本路由和命名路由。...= null) {//页面跳转前有传参 final Route route = MaterialPageRoute( builder: (...= null) { //页面跳转前有传参 final Route route = MaterialPageRoute( builder: (context)...~${this.arguments["name"]}")//6,获取到传递过来值 ); } } 这里DetailPage是一个StatefulWidget类型组件,我们按照上述123456...那么在绝大部分情况下,我们在页面跳转时候,还是采取普通命名路由跳转方式(而不是采取替换路由),此时,在跳转到多级页面之后,如何一键返回到主页面呢?

    9.1K21
    领券