Dart2 路由器实现

Dart2 Router Implementation

我正在尝试将 Dart1 应用程序升级到 Dart 2.4,我在路由器中遇到了问题我的代码如下所示

import 'dart:async';
import 'dart:convert';
import 'package:angular/src/core/di/decorators.dart';
@Injectable()
class SpRouterImpl implements SpRouter {
 final Router _router;

 SpRouterImpl(this._router);
 @override
 void go(String routeName, Map<String, String> parameters,
  [bool openInNewWindow = false]) {
  if (openInNewWindow) {
  var url = _router.generate([routeName, parameters]).component.urlPath;
  window.open(url, "_blank");
 } else {
  _router.navigate([routeName, parameters]);
 }
}
}

我在这一行中遇到错误

var url = _router.generate([routeName, parameters]).component.urlPath;

未为 class 路由器定义生成方法

第二个错误在这里

_router.navigate([routeName, parameters]);

参数类型List无法赋值给参数类型'String'

上述功能在 Dart 1 中运行良好,但当我升级到 Dart 2 时,出现错误,不知道如何解决。

任何人都可以在这方面提供帮助

您需要一个 RoutePath 实例来定义您的 "route"。

final search = RoutePath(path: "search/:term"); // term is the parameter

然后使用该路径导航到该路线。

_router.navigate(search.toUrl(parameters: {'term': searchTerm}));

所以在你的情况下它可能看起来像这样:

import 'dart:async';
import 'dart:convert';
import 'package:angular/src/core/di/decorators.dart';
@Injectable()
class SpRouterImpl implements SpRouter {
   final Router _router;

   SpRouterImpl(this._router);
   @override
   void go(String routeName, Map<String, String> parameters,
    [bool openInNewWindow = false]) {
     final path = RoutePath(routeName);
     final url = path.toUrl(parameters: parameters)
     if (openInNewWindow) {
       window.open(url, "_blank");
     } else {
       _router.navigate(url);
     }
   }
}

根据您的 routeName 定义方式,它可能无法正常工作,但这是一般的想法。

RoutePath还有其他几个选项,请查看它们,看看哪个最适合您!