#flutter #navigation #navigator
Вопрос:
Мое мобильное приложение написано на угловом и ионном языках. В нем много-много страниц. Теперь я хочу переписать его в flutter.
Я прочитал много статей для flutter navigator 2.0. Им всегда нравится внизу.
class MyAppRouterDelegate extends RouterDelegate<MyAppConfiguration>{
String? _selectedColorCode;
String? _selectedShapeBorderType;
@override
Widget build(BuildContext context) {
List<Page> stack = [
HomePage(),
if(_selectedColorCode != null){
ColorPage(),
}
if(_selectedShapeBorderType != null){
ShapeBorderPage(),
}
];
return Navigator(
key: navigatorKey,
pages: stack,
onPopPage: (route, result) {
if (!route.didPop(result)) return false;
if (selectedShapeBorderType == null) selectedColorCode = null;
selectedShapeBorderType = null;
return true;
},
);
}
Они используют множество свойств в RouterDelegate для описания всего состояния маршрутизатора и множество if-else для создания текущего стека страниц.
class MyAppConfiguration {
final String colorCode;
final ShapeBorderType shapeBorderType;
final bool unknown;
MyAppConfiguration.shapeBorder(String colorCode, ShapeBorderType shape)
: unknown = false,
shapeBorderType = shape,
loggedIn = true,
colorCode = colorCode;
MyAppConfiguration.color(String colorCode)
: unknown = false,
shapeBorderType = null,
loggedIn = true,
colorCode = colorCode;
MyAppConfiguration.home()
: unknown = false,
shapeBorderType = null,
loggedIn = true,
colorCode = null;
MyAppConfiguration.unknown()
: unknown = true,
shapeBorderType = null,
loggedIn = null,
colorCode = null;
bool get isUnknown => unknown == true;
bool get isHomePage => unknown == false amp;amp; loggedIn == true amp;amp; colorCode == null amp;amp; shapeBorderType == null;
bool get isColorPage => unknown == false amp;amp; loggedIn == true amp;amp; colorCode != null amp;amp; shapeBorderType == null;
bool get isShapePage => unknown == false amp;amp; loggedIn == true amp;amp; colorCode != null amp;amp; shapeBorderType != null;
bool get isSplashPage => unknown == false amp;amp; loggedIn == null;
}
И они используют конфигурационный файл, который имеет так много свойств, чтобы описать все маршруты для сопоставления с URL.
Это решение так ужасно, когда в моем приложении так много страниц.
Есть ли изящное решение?
Спасибо.
Комментарии:
1. Не путайте маршруты с детскими виджетами. Сколько экранов у приложения? Вы можете создавать маршруты для главных страниц, т. е., если это рынок, используйте маршруты для определения страницы входа в систему, домашней страницы клиента, страницы редактирования профиля, отображения сведений о продукте, страницы оформления заказа, страницы истории заказов. Все остальное внутри них может быть отдельными виджетами без необходимости создавать маршруты для всех них и определять их в вашем main.dart.
2. Спасибо. более 50 страниц и непрерывный рост. Вы имеете в виду один маршрут для многих страниц бизнес-потока? И поддерживать переход по страницам, переключая только виджеты на странице?
3. Да, маршруты должны контролировать рабочий процесс или логические пути, это также помогает поддерживать динамику вашего приложения, у вас не могут быть только маршруты, которые вы определили при компиляции приложения, это будет борьба с фреймворком, а не использование его возможностей. Пусть это будет просто, но динамично, это более мощно. Это придет с практикой, и в дальнейшем вы найдете много помощи.