flutter2.x报错解决type (RouteSettings) => Route<dynamic> is not a subtype of type (RouteSettings) => Route<dynemic> of function result

flutter2.x报错解决type (RouteSettings) => Route <dynamic>? is not a subtype of type (RouteSettings) => Route <dynemic> of function result

在这里插入图片描述

原有代码--main.dart

import 'package:flutter/material.dart';
import 'pages/tabs/Tabs.dart';
import 'routers/router.dart';
void main() {
  runApp(MyApp());
}
// 输入stf  有状态组件
// stss 无状态组件
class MyApp extends StatefulWidget {
  const MyApp({ Key? key }) : super(key: key);

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // home: Tabs()
      initialRoute: '/', // 注意观察--问题就出在函数类型声明方面
      onGenerateRoute: onGenerateRoute, // 注意观察--问题就出在函数类型声明方面
    );
  }
}

原有代码--router.dart

    import 'package:flutter/material.dart';
    import '../pages/tabs/Tabs.dart';
    import '../pages/test/Search.dart';
    // 配置路由路径
    var router = {
      '/': (context, { arguments }) => Tabs(arguments: arguments), // 使用arguments传递参数
      '/search': (context) => SearchPage()
    };
    // onGenerateRoute配置
    // 注意观察--问题就出在函数类型声明方面
    final onGenerateRoute = (RouteSettings settings) {
      final String ? name = settings.name;
      final Function pageContentBuilder = router[name] as Function;
      if (pageContentBuilder != null) {
        if (settings.arguments != null) {
          final Route route = MaterialPageRoute(
            builder: (context) =>
            pageContentBuilder(context, arguments: settings.arguments));
          return route;
        } else {
          final Route route =
            MaterialPageRoute(builder: (context) => pageContentBuilder(context));
          return route;
        }
      }
    };

解决方案--现有代码--修改类型声明

final Map<String, WidgetBuilder> routes = {
    '/': (context) => NewPage(),
    '/search': (context) => ParamPage(),
  };

  Route<dynamic> _onGenerateRoute(RouteSettings settings) {
    //   return MaterialPageRoute(builder: (context) {
    //     // 如果访问的路由页需要登录,但当前未登录,则直接返回登录页路由,
    //     // 引导用户登录;其它情况则正常打开路由。
    //     // 统一处理
    // })
    final String name = settings.name;
    final Function pageContentBuilder = routes[name];
    print('到1');
    if (settings.arguments != null) {
      print('到2');
      final Route route = MaterialPageRoute(
        builder: (context) => NewPage(),
      );
      return route;
    } else {
      print('到3');
      final Route route = MaterialPageRoute(
        builder: (context) {
          return ParamPage(text: ModalRoute.of(context).settings.arguments);
        },
      );
      return route;
    }
  }

解决思路,点击main.dart中的 onGenerateRoute: _onGenerateRoute,跳转过去看一下其变量类型,然后根据类型进行声明

posted @   糖~豆豆  阅读(516)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
Live2D
欢迎阅读『flutter2.x报错解决type (RouteSettings) => Route is not a subtype of type (RouteSettings) => Route of function result』
点击右上角即可分享
微信分享提示