Строка URL-адреса браузера не обновляется с помощью RouteInformationParser.restoreRouteInformation в промежуточной среде

#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 . Это имело значение.