我与我的团队合作开发 Flutter Web 应用程序,我试图根据用户在我们应用程序中的页面更改浏览器 url。
我设法在我的本地机器上完成了这项工作,我们的应用程序的顶部看起来像这样:
final app = ChangeNotifierProvider<RouteModel>(
create: (_) => RouteModel(
visitStack: ListQueue.from([visit ?? PageVisit.home()]),
),
child: Builder(builder: (BuildContext context) => MyApp()),
);
runApp(app);
Run Code Online (Sandbox Code Playgroud)
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,
);
}
}
Run Code Online (Sandbox Code Playgroud)
这RouteModel是一个集线器,它接收来自页面的调用以导航到其他页面,并处理内部应用程序状态的 url、args 和其他帮助函数。
根据我对 Flutter 文档的理解,RouteInformationParser.restoreRouteInformation 应该在应用程序状态更改时更改浏览器 URL。如果为 MaterialApp.router 提供了 RouteInformationProvider,其功能 routerReportsNewRouteInformation 可能会覆盖 …