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); // _onRoute.add(_current = null);
//} else { //} else {
final route = resolved.route; final route = resolved.route;
var thisPath = route.name; var thisPath = route.name ?? '';
if (thisPath.isEmpty) { if (thisPath.isEmpty) {
thisPath = route.path; thisPath = route.path;
} }

View file

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