Если не важна история, можно использовать Navigator.pushReplacement для удаления предыдущей страницы, если нужна история переходов, то можно отдельно сохранять ее в список
List<String> routeHistory = []
и потом выдергивать оттуда.
Насчет жора памяти, у ios и android работают сборщики мусора, вам просто так не дадут сожрать всю память устройства, GC начнет выгружать старый кэш и соответственно приложение начнет медленно работать, т.к. придется заново все подгружать.
Чтобы как-то ускорить процесс, можно использовать прогрев кэша для картинок, которые скоро будут использоваться:
ImageProvider imageProvider = AssetImage(imagePath);
scheduleMicrotask(() {
precacheImage(imageProvider, context);
});
Реализация зависит от конкретного приложения и как пользователь его использует, оптимизировать заранее не стоит, иначе закопаетесь в задачах.