Мобильное приложение "Расписание для Хекслет" предназначено для просмотра расписания занятий студентами и преподавателями Хекслет Колледжа. Приложение разработано с использованием современных технологий React Native и Expo.
- Просмотр расписания групп и преподавателей
- Переключение между текущей и следующей неделей
- Добавление в избранное
- Умный поиск
- Темная и светлая тема
- Настройка отображения информации
app/
├── _layout.tsx # Корневой layout
├── (tabs)/ # Основные экраны
│ ├── _layout.tsx # Навигация по вкладкам
│ ├── index.tsx # Список групп
│ ├── teacher.tsx # Список преподавателей
│ ├── favorites.tsx # Избранное
│ └── settings.tsx # Настройки
├── schedule/ # Экраны расписания
│ └── [id].tsx # Расписание группы
└── teacher/ # Экраны преподавателей
└── [id].tsx # Расписание преподавателя
components/ # Переиспользуемые компоненты
├── GroupList.tsx # Список групп
├── TeacherList.tsx # Список преподавателей
├── ScheduleView.tsx # Отображение расписания
├── LessonCard.tsx # Карточка занятия
└── WeekSelector.tsx # Выбор недели
contexts/ # React контексты
├── FavoritesContext.tsx # Управление избранным
├── ThemeContext.tsx # Управление темой
└── ScheduleSettingsContext.tsx # Настройки расписания
constants/ # Константы приложения
├── groups.ts # Информация о группах
├── teachers.ts # Информация о преподавателях
└── theme.ts # Настройки тем
- Загрузка приложения
- Инициализация контекстов
- Загрузка сохраненных настроек
- Проверка темы устройства
- Рендеринг интерфейса
- Обработка пользовательских действий
- Управление состоянием
- Кэширование данных
- Загрузка расписания
- Обновление избранного
- Сохранение настроек
- Обработка ошибок
Управление избранными группами и преподавателями.
interface FavoritesContextType {
favorites: FavoriteItem[];
addToFavorites: (item: GroupInfo | TeacherInfo, type: 'group' | 'teacher') => Promise<void>;
removeFromFavorites: (id: number, type: 'group' | 'teacher') => Promise<void>;
isFavorite: (id: number, type: 'group' | 'teacher') => boolean;
}Управление темой оформления.
interface ThemeContextType {
isDarkTheme: boolean;
useSystemTheme: boolean;
toggleTheme: () => Promise<void>;
toggleSystemTheme: () => Promise<void>;
}Настройки отображения расписания.
interface ScheduleSettings {
showCabinetNumbers: boolean;
showTeacherNames: boolean;
compactMode: boolean;
showLessonNumbers: boolean;
}- Вкладки (Tabs)
- Расписание (index)
- Преподаватели (teacher)
- Избранное (favorites)
- Настройки (settings)
- Стек навигации
- Расписание группы (schedule/[id])
- Расписание преподавателя (teacher/[id])
- Информация (info)
type RootStackParamList = {
'(tabs)': undefined;
'info': undefined;
'schedule/[id]': { id: string };
'teacher/[id]': { id: string };
};- AsyncStorage для настроек и избранного
- Кэширование расписания
- Управление состоянием приложения
- Fetch API для получения данных
- Обработка ошибок сети
- Retry механизмы
- Кэширование ответов
- Светлая тема
- Темная тема
- Системная тема
- Material Design
- Адаптивный дизайн
- Анимации
- Кастомные компоненты
- iOS 13.0 и выше
- Оптимизация для iPhone
- Поддержка жестов iOS
- Android 6.0 и выше
- Material Design
- Адаптация под разные устройства