Загрузка данных


import flet as ft

def main(page: ft.Page):
    page.title = "Путь к спокойствию"
    page.theme_mode = ft.ThemeMode.LIGHT
    page.bgcolor = "#F0F4F8"  # Мягкий светло-серый фон
    page.scroll = ft.ScrollMode.AUTO
    
    # База данных текстов для каждого раздела
    TOPIC_TEXTS = {
        "Буллинг": "Если вас булят, помните: дело не в вас. Не молчите, обязательно поделитесь с тем, кому доверяете (родители, школьный психолог, близкий друг). Записывайте факты агрессии и не пытайтесь отвечать агрессией на агрессию.",
        "Комплексы / низкая самооценка": "Комплексы часто навязаны извне. Попробуйте сфокусироваться на своих сильных сторонах и вещах, которые у вас хорошо получаются. Перестаньте сравнивать чужую «витрину» со своей «изнанкой».",
        "Боязнь будущего": "Бояться неизвестности — это нормально. Разбейте большую цель (кем быть по жизни) на маленькие шаги. Пробуйте разные сферы уже сейчас, ведь выбор профессии сегодня — это не выбор на всю жизнь.",
        "Одиночество": "Чувство одиночества бывает у каждого. Это временное состояние. Попробуйте найти единомышленников через ваши интересы или хобби в тематических сообществах или кружках.",
        "Никто не поддерживает": "Если близкие вас не слышат, это ранит. Но помните, что вы можете найти опору внутри себя. Иногда людям нужно время, чтобы понять вас. Попробуйте поговорить с ними без взаимных упреков через 'Я-сообщения'.",
        "Тревога": "Тревога — это сигнал организма. Когда она накатывает, вернитесь в реальность через тело: сделайте глубокий вдох и долгий выдох (дыхание по квадрату), найдите глазами 5 синих предметов вокруг себя.",
        "Первая (неудачная) любовь": "Разрыв первых отношений переживается очень остро. Дайте себе время погоревать и выплакаться, это нормальная часть процесса. Со временем эта боль утихнет и превратится в ценный опыт.",
        "Как найти себе хобби": "Чтобы найти то, что интересует, нужно просто пробовать. Составьте список из 5 вещей, которые вы никогда не делали (рисование, кодинг, скейтборд), и уделите каждой хотя бы по одному часу.",
        "Проблемы с учителями": "В конфликте с учителем старайтесь отделять эмоции от учебы. Говорите вежливо, спокойно аргументируйте свою позицию. Если ситуация зашла в тупик, обратитесь за помощью к классному руководителю или родителям.",
        "Ссоры с родителями": "Родители часто ругаются из-за страха за вас или банальной усталости. Попробуйте начать разговор первыми в спокойной обстановке: 'Мне тяжело, когда мы ссоримся, давай обсудим это'."
    }

    # Функция для открытия экрана с текстом рекомендации
    def open_topic(e):
        topic_name = e.control.data
        topic_text = TOPIC_TEXTS.get(topic_name, "Рекомендации скоро появятся...")
        
        # Очищаем страницу и собираем экран статьи
        page.controls.clear()
        page.add(
            ft.Container(
                content=ft.Column([
                    ft.Text(topic_name, size=24, weight=ft.FontWeight.BOLD, color="#1A365D"),
                    ft.Container(height=10),
                    ft.Text(topic_text, size=16, color="#2D3748"),
                    ft.Container(height=30),
                    ft.ElevatedButton(
                        text="Назад к темам", 
                        icon=ft.icons.ARROW_BACK,
                        on_click=show_main_menu,
                        style=ft.ButtonStyle(
                            bgcolor="#2B6CB0",
                            color=ft.colors.WHITE
                        )
                    )
                ]),
                padding=20,
                margin=ft.Margin(top=20, left=15, right=15, bottom=20) # Исправлено под Flet 1.0+
            )
        )
        page.update()

    # Функция возврата на главный экран (меню)
    def show_main_menu(e=None):
        page.controls.clear()
        
        # Шапка
        header = ft.Container(
            content=ft.Column([
                ft.Text("Путь к спокойствию", size=28, weight=ft.FontWeight.BOLD, color="#1A365D", text_align=ft.TextAlign.CENTER),
                ft.Text("Проект, посвященный психологическому благополучию подростка. Здесь собраны рекомендации, которые помогут справиться со стрессом, тревогой и одиночеством.", 
                        size=14, color="#4A5568", text_align=ft.TextAlign.CENTER),
                ft.Text("Выберите тему, про которую хотите узнать:", size=16, weight=ft.FontWeight.W_500, color="#2B6CB0"),
            ], alignment=ft.MainAxisAlignment.CENTER, horizontal_alignment=ft.CrossAxisAlignment.CENTER),
            padding=20,
            alignment=ft.alignment.center
        )

        # Сетка кнопок-карточек
        grid = ft.Column(spacing=12)
        for topic in TOPIC_TEXTS.keys():
            card = ft.Container(
                content=ft.Row([
                    ft.Icon(ft.icons.LIGHTBULB_OUTLINED, color="#2B6CB0"),
                    ft.VerticalDivider(width=10, color=ft.colors.TRANSPARENT),
                    ft.Expanded(child=ft.Text(topic, size=16, weight=ft.FontWeight.W_500, color="#2D3748"))
                ], alignment=ft.MainAxisAlignment.START),
                padding=15,
                bgcolor=ft.colors.WHITE,
                border_radius=10,
                on_click=open_topic,
                data=topic, # Передаем имя темы в обработчик клика
                shadow=ft.BoxShadow(blur_radius=4, color="#10000000")
            )
            grid.controls.append(card)

        # Нижняя часть (Слоган и кнопка отзыва)
        footer = ft.Container(
            content=ft.Column([
                ft.Text("Путь к спокойствию начинается с понимания себя.", size=14, italic=True, color="#718096"),
                ft.Container(height=10),
                ft.OutlinedButton(
                    text="Оставить отзыв", 
                    icon=ft.icons.FEEDBACK,
                    style=ft.ButtonStyle(color="#2B6CB0")
                )
            ], horizontal_alignment=ft.CrossAxisAlignment.CENTER),
            padding=30,
            alignment=ft.alignment.center
        )

        # Собираем всё на главный экран
        page.add(
            ft.Container(
                content=ft.Column([header, grid, footer]),
                max_width=600, # Чтобы красиво смотрелось и на ПК, ограничиваем ширину по центру
                alignment=ft.alignment.top_center,
                margin=ft.Margin(left=15, right=15, top=0, bottom=0) # Исправлено под Flet 1.0+
            )
        )
        page.update()

    # Запускаем начальный экран
    show_main_menu()

ft.app(target=main)