#dart #flutter-web #navigator #flutter-sharedpreference
#дротик #трепещущая паутина #навигатор #флаттер-совместное использование
Вопрос:
Я пытаюсь восстановить стек страниц после нажатия кнопки обновления браузера. С помощью onGenerateRoute
on MaterialApp
я могу восстановить одну страницу, даже с аргументами, использующими SharedPrefences
api и данные Firestore, но когда я нажимаю кнопку «Назад» браузера, она переходит на домашнюю страницу. Как я могу сохранить стек страниц flutter или, по крайней мере, только ветвь текущей страницы в стеке? Это пример onGenerateRoute
реализации:
if (settings.name == ProductEditScreen.routeName) { final args = settings.arguments != null ? settings.arguments as ProductEditScreenArguments : null; return MaterialPageRoute( settings: RouteSettings(name: ProductEditScreen.routeName), builder: (context) { return settings.arguments != null ? ProductEditScreen( arguments: ProductEditScreenArguments( args!.product, args.store, args.locations, ), setCurrentPageData: () async { SharedPreferences prefs = await SharedPreferences.getInstance(); //prefs.setString("sessionToken", user!.sessionToken!); prefs.setString("productId", args.product.id!); prefs.setString("storeId", args.store.id!); }, ) : FutureBuilderlt;CurrentPageDatagt;(future: () async { SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.getString("sessionToken"); String? storeId = prefs.getString("storeId"); String? productId = prefs.getString("productId"); Listlt;Locationgt; locations = await EntityControllers .locationController .readAll() .then((locations) =gt; locations.castlt;Locationgt;()); Store store = (await EntityControllers.storeController .readOneByAttribute("id", storeId!)) as Store; Product product = await ProductController.productQueryController( productId!); return CurrentPageData( // sessionToken: user!.sessionToken!, screenName: ProductEditScreen.routeName, data: { "store": store.toJson(), }, dataEntity: {"product": product}, dataList: locations.map((e) =gt; e.toJson()).toList(), ); }(), builder: (BuildContext context, AsyncSnapshotlt;CurrentPageDatagt; snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return Center(child: CircularProgressIndicator()); } if (snapshot.hasData) { Store store = Store.fromJson(snapshot.data!.data!["store"]!); Listlt;Locationgt; locations = snapshot.data!.dataList! .map((location) =gt; Location.fromJson(location)) .toList(); Product product = snapshot.data!.dataEntity!["product"] as Product; return ProductEditScreen( arguments: ProductEditScreenArguments( product, store, locations, ), setCurrentPageData: () async { SharedPreferences prefs = await SharedPreferences.getInstance(); //prefs.setString("sessionToken", user!.sessionToken!); print("screen session token:"); prefs.setString("storeId", store.id!); prefs.setString("productId", product.id!); }, ); } else { if (snapshot.hasError) { print(snapshot.error); } return DashboardScreen(); } }); }, ); }
Перед ProductEditScreen
страницей есть ProductListScreen
страница. Мне нужно положить их в стопку.