← Назад к вопросам
Какие классы понадобятся при реализации навигации в Flutter?
2.0 Middle🔥 141 комментариев
#State Management#Архитектура Flutter
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Классы для реализации навигации в Flutter
Навигация в Flutter — это система управления переходами между экранами и маршрутами приложения. Существует несколько подходов и соответствующих им классов.
1. Navigator и Route (базовая навигация)
Navigator — это главный класс для управления стеком маршрутов:
// Переход на новый экран
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => SecondScreen())
);
// Возврат с результатом
Navigator.of(context).pop(result);
Route — базовый класс для описания маршрута:
class CustomRoute extends MaterialPageRoute {
CustomRoute({required WidgetBuilder builder}) : super(builder: builder);
}
2. MaterialPageRoute и CupertinoPageRoute
// Android-style переход с слайдом
MaterialPageRoute(builder: (context) => NextScreen())
// iOS-style переход
CupertinoPageRoute(builder: (context) => NextScreen())
Оба класса наследуют PageRoute и определяют анимацию переходов.
3. GoRouter (рекомендуемый подход)
Это пакет для декларативной навигации с поддержкой deep linking:
final router = GoRouter(
routes: [
GoRoute(
path: '/',
builder: (context, state) => HomeScreen(),
routes: [
GoRoute(
path: 'detail/:id',
builder: (context, state) => DetailScreen(
id: state.pathParameters['id']!,
),
),
],
),
],
);
// Навигация
context.go('/detail/123');
4. Named Routes (традиционный подход)
MaterialApp(
routes: {
'/': (context) => HomeScreen(),
'/second': (context) => SecondScreen(),
},
);
// Навигация
Navigator.of(context).pushNamed('/second');
5. PageRoute и его подклассы
- MaterialPageRoute — слайд снизу (Android)
- CupertinoPageRoute — слайд справа (iOS)
- PageRouteBuilder — кастомная анимация
PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) => NextScreen(),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
return FadeTransition(opacity: animation, child: child);
},
)
6. RouteSettings и навигационные события
RouteSettings(
name: '/detail',
arguments: {'id': 123},
)
7. RouteObserver (отслеживание навигации)
class MyRouteObserver extends RouteObserver<Route<dynamic>> {
@override
void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {
print('Pushed');
}
@override
void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
print('Popped');
}
}
MaterialApp(
navigatorObservers: [MyRouteObserver()],
)
Рекомендации по выбору подхода:
GoRouter:
- Для новых проектов
- Если нужен deep linking
- Сложная навигационная логика
- Управление состоянием навигации
Navigator + MaterialPageRoute:
- Простые приложения
- Кастомная анимация переходов
- Полный контроль над логикой
Named Routes:
- Legacy приложения
- Простая структура навигации
Современный подход — использовать GoRouter с Riverpod или Provider для управления состоянием.