Dart2路由器的实现

Dart2路由器的实现,dart,angular-dart,Dart,Angular Dart,我正在尝试将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._rout

我正在尝试将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]);
 }
}
}
未为类Router定义方法generate

第二个错误在这里

_router.navigate([routeName, parameters]);
无法将参数类型列表分配给参数类型“String”

上面的函数在Dart 1中运行良好,但当我升级到Dart 2时,我发现了错误,不知道如何解决

在这方面是否有人可以提供帮助

您需要一个RoutePath实例来定义您的路由

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是如何定义的,它可能不会出现并起作用,但这是一般的想法

有几个其他的选择,看看他们,看看什么最适合你

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);
     }
   }
}