Fixed route crashing

This commit is contained in:
thomashii 2021-04-03 23:04:25 +08:00
parent ddbf7f33b6
commit 22e073eb3f
2 changed files with 30 additions and 19 deletions

View file

@ -182,7 +182,7 @@ class _PushStateRouter<T> extends _BrowserRouterImpl<T> {
// _onRoute.add(_current = null);
//} else {
final route = resolved.route;
var thisPath = route.name;
var thisPath = route.name ?? '';
if (thisPath.isEmpty) {
thisPath = route.path;
}

View file

@ -2,28 +2,37 @@ part of angel_route.src.router;
/// Represents a virtual location within an application.
class Route<T> {
String method;
String path;
final String method;
final String path;
final Map<String, Map<String, dynamic>> _cache = {};
String name = '';
final RouteDefinition? _routeDefinition;
final List<T> handlers;
String? name;
Parser<RouteResult>? _parser;
late RouteDefinition _routeDefinition;
late List<T> handlers;
Route(this.path, {required this.method, required this.handlers}) {
Route(this.path, {required this.method, required this.handlers})
: _routeDefinition = RouteGrammar.routeDefinition
.parse(SpanScanner(path.replaceAll(_straySlashes, '')))
.value {
if (_routeDefinition?.segments.isNotEmpty != true) {
_parser = match('').map((r) => RouteResult({}));
}
/*
var result = RouteGrammar.routeDefinition
.parse(SpanScanner(path.replaceAll(_straySlashes, '')));
if (result.value != null) {
//throw ArgumentError('[Route] Failed to create route for $path');
_routeDefinition = result.value!;
//throw ArgumentError('[Route] Failed to create route for $path');
_routeDefinition = result.value;
if (_routeDefinition.segments.isEmpty) {
_parser = match('').map((r) => RouteResult({}));
}
} else {
//print('[Route] Failed to create route for $path');
_parser = match('').map((r) => RouteResult({}));
}
*/
}
factory Route.join(Route<T> a, Route<T> b) {
@ -35,7 +44,7 @@ class Route<T> {
//List<T> get handlers => _handlers;
Parser<RouteResult>? get parser => _parser ??= _routeDefinition.compile();
Parser<RouteResult>? get parser => _parser ??= _routeDefinition?.compile();
@override
String toString() {
@ -51,7 +60,8 @@ class Route<T> {
var b = StringBuffer();
var i = 0;
for (var seg in _routeDefinition.segments) {
if (_routeDefinition != null) {
for (var seg in _routeDefinition!.segments) {
if (i++ > 0) b.write('/');
if (seg is ConstantSegment) {
b.write(seg.text);
@ -62,6 +72,7 @@ class Route<T> {
b.write(params[seg.name]);
}
}
}
return b.toString();
}