我使用go_router flutter包用于flutter Web。我得到这个错误,而重新加载网站。后退按钮工作得很好,但是重载导致了这个问题。
Assertion failed: org-dartlang-sdk:///flutter_web_sdk/lib/_engine/engine/window.dart:25:10_isUrlStrategySet !不能设置多于一次的URL策略。">
下面是main.dart的代码:import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:navigator_2/some_app.dart';
import 'details_page.dart';
void main() {
runApp( MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final GoRouter _router = GoRouter(
urlPathStrategy: UrlPathStrategy.path,
routes: [
GoRoute(path: '/',builder: (context,state)=> const SomeAppPage()),
GoRoute(path: '/details',builder: (context,state){
final query = state.queryParams['index'];
return DetailsPage(index: int.parse(query!));
}),
]);
return MaterialApp.router(
routeInformationParser: _router.routeInformationParser,
routerDelegate: _router.routerDelegate ,
title: 'Go Router Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
);
}
}
从url's中删除#字符的url路径策略应该在main()
中设置。
从go_router 5.1.0开始,urlPathStrategy已经被完全移除,所以GoRouter.setUrlPathStrategy(UrlPathStrategy.path);
会导致构建错误。
GoRouter.setUrlPathStrategy(UrlPathStrategy.path);
替换为:
import 'package:flutter_web_plugins/url_strategy.dart';
void main() {
usePathUrlStrategy();
runApp(ExampleApp());
}
Divyam Makar的答案不适合我,因为我需要在我的GoRouter定义上使用ChangeNotifier子类,所以当我将GoRouter初始化到initState时,我得到了例外:
因此,按照文档,我在层次结构的上层设置了Url路径策略,在main方法中:dependOnInheritedWidgetOfExactType<_InheritedProviderScope<MyCustomState ?在祝辞()或者之前调用过dependOnInheritedElement()_MainWidgetState.initState()完成。
void main() {
GoRouter.setUrlPathStrategy(UrlPathStrategy.path);
runApp(App());
}
我得到了答案。这只是因为GoRouter是在构建函数中定义的,然后在重新加载期间再次调用它,从而导致这个错误。删除它并将它放在initState中解决了这个问题。