Класс RouteInformationParser
Класс RouteInformationParser реализуют для
Router.
Метод
parseRouteInformation
читает
RouteInformation.
Метод
restoreRouteInformation
собирает URI обратно из конфигурации.
Синтаксис
class AppParser extends RouteInformationParser<AppConfig>
{
@override
Future<AppConfig> parseRouteInformation(
RouteInformation routeInformation,
) async {
return AppConfig(routeInformation.uri.path);
}
}
Методы
| Метод | Описание |
|---|---|
parseRouteInformation |
На вход приходит RouteInformation, на выходе - тип конфигурации delegate. Давайте разберём вызов на примерах.
|
restoreRouteInformation |
Router вызывает его, когда нужно обновить адрес в браузере или сообщить платформе новый URI. Давайте разберём вызов на примерах.
|
Пример
Давайте распарсим path из URI:
import 'package:flutter/material.dart';
class AppConfig
{
AppConfig(this.path);
final String path;
}
class AppParser extends RouteInformationParser<AppConfig>
{
@override
Future<AppConfig> parseRouteInformation(
RouteInformation routeInformation,
) async {
return AppConfig(routeInformation.uri.path);
}
@override
RouteInformation restoreRouteInformation(AppConfig configuration) {
return RouteInformation(uri: Uri.parse(configuration.path));
}
}
void main()
{
var parser = AppParser();
parser.parseRouteInformation(
RouteInformation(uri: Uri.parse('/detail')),
).then((cfg) {
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: Text(cfg.path),
),
),
),
);
});
}
На экране по центру появится '/detail' после parseRouteInformation.
Пример
Давайте восстановим URI через restoreRouteInformation:
import 'package:flutter/material.dart';
class AppConfig
{
AppConfig(this.path);
final String path;
}
class AppParser extends RouteInformationParser<AppConfig>
{
@override
Future<AppConfig> parseRouteInformation(
RouteInformation routeInformation,
) async {
return AppConfig(routeInformation.uri.path);
}
@override
RouteInformation restoreRouteInformation(AppConfig configuration) {
return RouteInformation(uri: Uri.parse(configuration.path));
}
}
void main()
{
var parser = AppParser();
var info = parser.restoreRouteInformation(AppConfig('/home'));
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: Text('${info.uri}'),
),
),
),
);
}
На экране по центру строка URI с путём '/home'.
Смотрите также
-
метод
parseRouteInformation,
разбор адреса -
класс
RouteInformation,
входparseRouteInformation -
класс
RouterDelegate,
получает конфигурацию от парсера -
виджет
Router,
связывает parser и delegate