флаттер веб-сохранение стека страниц после обновления страницы

#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 страница. Мне нужно положить их в стопку.