flutter - 浏览器 URL 栏不会由 RouteInformationParser.restoreRouteInformation 在登台环境中更新

标签 flutter url flutter-web

我与我的团队合作开发 Flutter Web 应用程序,我试图根据用户在我们应用程序中的页面更改浏览器 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、args 和其他帮助函数。
根据我对 Flutter 文档的理解,RouteInformationParser.restoreRouteInformation 应该在应用程序状态更改时更改浏览器 URL。如果为 MaterialApp.router 提供了 RouteInformationProvider,其功能 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!
    

    最佳答案

    我刚刚遇到了类似的问题,发现我忘记实现 RouterDelegate 的 currentConfiguration。这就是区别所在。

    关于flutter - 浏览器 URL 栏不会由 RouteInformationParser.restoreRouteInformation 在登台环境中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64985653/

    相关文章:

    android - 滑动列表项以获取更多选项(Flutter)

    dart - Flutter:根据 Future 的快照采取行动

    listview - 我的 listView 只显示一个没有内容的空白页面。我该如何解决?

    Ruby on Rails - 生成 bit.ly 样式标识符

    flutter - 如何修复 Flutter 期望类型为 'Map<String, dynamic>' 的值,但得到类型为 'List<dynamic>' 的值

    flutter - Dart/Flutter 将分数字符串转换为 double 字符串

    git urlencode 一些字符

    java - 通过URL导入图片并添加到面板时出错

    flutter - 如何使用 Flutter for Web 在鼠标悬停时动画图像?

    flutter web - 通过光标手动更改浏览器中两个sizedbox之间的宽度