#flutter #url #flutter-web
#трепетание #url-адрес #флаттер-паутина
Вопрос:
Я работаю со своей командой над веб-приложением Flutter и пытаюсь изменить URL-адрес браузера в соответствии со страницей, на которой пользователь находится внутри нашего приложения.
Мне удалось заставить это работать на моем локальном компьютере, при этом верхняя часть нашего приложения выглядит следующим образом:
final app = ChangeNotifierProvider<RouteModel>(
create: (_) => RouteModel(
visitStack: ListQueue.from([visit ?? PageVisit.home()]),
),
child: Builder(builder: (BuildContext context) => MyApp()),
);
runApp(app);
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final routeModel = context.watch<RouteModel>();
final _routerDelegate = MyRouterDelegate(routeModel);
final _routeInformationParser = MyRouteInformationParser(routeModel);
final _routeInformationProvider = MyRouteInformationProvider(routeModel);
return MaterialApp.router(
title: 'My App',
routerDelegate: _routerDelegate,
routeInformationParser: _routeInformationParser,
);
}
}
Это RouteModel
концентратор, который принимает вызовы со страниц для перехода на другие страницы и обрабатывает URL, аргументы и другие вспомогательные функции для внутреннего состояния приложения.
Из того, что я понял из документов Flutter, предполагается, что RouteInformationParser.restoreRouteInformation изменяет URL-адрес браузера при изменении состояния приложения. Если RouteInformationProvider предоставляется MaterialApp.router, его функция routerReportsNewRouteInformation может переопределять RouteInformationParser.restoreRouteInformation.
URL-адрес браузера изменяется при навигации, как и ожидалось, на наших локальных компьютерах, но не в нашей промежуточной среде.
Используя некоторую информацию о ведении журнала, я знаю, что при переходе на новую страницу вызываются следующие функции, как на локальном компьютере, так и в промежуточной среде:
- MyRouteInformationProvider.value (4 раза)
- MyRouteInformationParser.parseRouteInformation
- Router.navigate // (Я вызываю его из верхнего виджета приложения, общего для всех подстраниц)
- MyRouterDelegate.currentConfiguration
- MyRouteInformationParser.restoreRouteInformation
- MyRouteInformationProvider.routerReportsNewRouteInformation
Если я удалю RouteInformationProvider, я также могу удалить вызов Router.navigate, и URL-адрес браузера все равно будет обновляться локально.
Мой вопрос: есть ли конкретная причина / конфигурация, из-за которых промежуточная среда может препятствовать изменению URL-адреса браузера?
Вывод flutter --version
:
Flutter 1.23.0-18.1.pre • channel beta • https://github.com/flutter/flutter.git
Framework • revision 198df796aa (6 weeks ago) • 2020-10-15 12:04:33 -0700
Engine • revision 1d12d82d9c
Tools • Dart 2.11.0 (build 2.11.0-213.1.beta)
Вывод flutter doctor
:
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel beta, 1.23.0-18.1.pre, on Mac OS X 10.15.7 19H2 x86_64, locale fr-FR)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[✓] Xcode - develop for iOS and macOS (Xcode 11.7)
[✓] Chrome - develop for the web
[✓] Android Studio (version 3.5)
[✓] Connected device (2 available)
• No issues found!
Ответ №1:
У меня только что возникла аналогичная проблема, и я обнаружил, что забыл реализовать текущую конфигурацию RouterDelegate . Это имело значение.