puls_design 1.0.1 copy "puls_design: ^1.0.1" to clipboard
puls_design: ^1.0.1 copied to clipboard

Puls Glass Design System for Flutter with frosted glass effect and dynamic animations.

Puls Design System #

Дизайн-система «Puls Glass» для Flutter, создающая эффект матового стекла с динамическими анимациями, цветовой семантикой и тактильной обратной связью. Пакет включает готовые компоненты для быстрой сборки интерфейсов в стиле «неоморфизм» с акцентом на глубину, свет и движение.

Установка #

Добавьте зависимость в pubspec.yaml вашего проекта:

dependencies:
  puls_design:
    path: ../path/to/puls_design  # локальный путь

Или используйте версию из pub.flutter-io.cn (если опубликовано):

dependencies:
  puls_design: ^1.0.1

Затем выполните:

flutter pub get

Пакет пока не опубликован на pub.flutter-io.cn, но доступен через Git-репозиторий. Для использования напрямую из Git укажите git: зависимость (см. документацию Flutter).

Импорт #

import 'package:puls_design/puls_design.dart';

Компоненты #

1. PulsTheme #

Центральный узел конфигурации, содержащий цвета, типографику, тени и анимационные константы.

Основные цвета

PulsTheme.bgDeepBlack      // Глубокий OLED‑черный фон
PulsTheme.accentOrange     // Оранжевый акцент (по умолчанию)
PulsTheme.accentGreen      // Зелёный акцент (успех)
PulsTheme.accentRed        // Красный акцент (ошибка)
PulsTheme.glassWhite       // Полупрозрачный белый для стекла
PulsTheme.borderWhite      // Цвет границы

Типографика

PulsTheme.heading          // Заголовок (32pt, жирный)
PulsTheme.body             // Основной текст (16pt)
PulsTheme.bodyText         // Альтернативный основной текст
PulsTheme.labelText        // Метка (14pt, полужирный, широкий кернинг)

Тени и свечение

PulsTheme.glow(Color color, {bool active = false})
// Возвращает список BoxShadow с градиентным свечением.

Анимации

PulsTheme.animationFast    // Duration(milliseconds: 200)
PulsTheme.animationMedium  // Duration(milliseconds: 400)
PulsTheme.mainCurve        // Curves.easeOutCubic

2. PulsGlassCard #

Карточка с эффектом матового стекла, поддерживающая hover‑анимацию (приподнимание, пульсацию) и настраиваемый акцентный цвет.

Параметры

Параметр Тип По умолчанию Описание
child Widget обязательно Содержимое карточки
accentColor Color Colors.white12 Цвет свечения и границы
pulseOnHover bool false Включить пульсацию границы при наведении

Пример

PulsGlassCard(
  accentColor: PulsTheme.accentOrange,
  pulseOnHover: true,
  child: Text(
    "Это матовое стекло карточки",
    style: PulsTheme.bodyText,
  ),
)

3. PulsSystemInput #

Поле ввода с интеллектуальной цветовой индикацией состояния (нейтральное, фокус, успех, ошибка) и встроенной анимацией свечения.

Параметры

Параметр Тип По умолчанию Описание
hint String обязательно Текст‑подсказка
isValid bool? null null – нейтрально, true – успех, false – ошибка

Пример

const PulsSystemInput(
  hint: "Введите системный код",
  isValid: null, // Оранжевый цвет при фокусе
)

4. PulsGlassButton #

Кнопка с тактильной обратной связью (вибрация), анимацией масштаба и многослойным свечением. Меняет интенсивность тени и цвета в зависимости от состояния нажатия.

Параметры

Параметр Тип По умолчанию Описание
label String обязательно Текст на кнопке
accentColor Color обязательно Акцентный цвет (свечение, граница)
onTap VoidCallback обязательно Обработчик нажатия

Пример

PulsGlassButton(
  label: "ПОДТВЕРДИТЬ",
  accentColor: PulsTheme.accentGreen,
  onTap: () => print("Action success"),
)

5. PulsStepper #

Горизонтальный степпер с анимированным появлением шагов, настраиваемой длительностью, кривыми анимации и возможностью переключения состояния по тапу.

Класс PulsStep

PulsStep(
  title: "Ядро",
  description: "Загрузка модулей",
  isCompleted: true, // или false, или null (нейтрально)
)

Параметры PulsStepper

Параметр Тип По умолчанию Описание
steps List<PulsStep> обязательно Список шагов
duration Duration Duration(milliseconds: 1500) Длительность каскадной анимации
fadeCurve Curve Curves.easeIn Кривая затухания
slideCurve Curve Curves.easeOutCubic Кривая смещения
onStepTapped ValueChanged<int>? null Коллбэк при тапе на шаг (передаёт индекс)
indicatorHeight double 28 Высота индикатора
lineThickness double 2 Толщина соединительной линии

Пример

PulsStepper(
  steps: [
    PulsStep(title: "Ядро", description: "Загрузка модулей", isCompleted: true),
    PulsStep(title: "Интерфейс", description: "Рендеринг Puls Glass", isCompleted: null),
    PulsStep(title: "Безопасность", description: "Проверка протоколов", isCompleted: null),
  ],
  onStepTapped: (index) => print("Шаг $index tapped"),
)

6. Дополнительные компоненты (v1.0.0) #

Пакет также включает следующие компоненты, доступные через импорт package:puls_design/puls_design.dart:

  • PulsGlassListView – стеклянный список навигации с анимированным выбором.
  • PulsGlassTabs – стеклянные вкладки (горизонтальные и вертикальные).
  • PulsGlassSheet – стеклянные шторки (bottom sheet) с эффектом размытия.
  • PulsVoiceButton – кнопка голосового ввода с пульсирующей анимацией.
  • PulsNotification – универсальные уведомления (push и snackbar) в стиле Puls Glass.
  • PulsSearchBar – стеклянная строка поиска с поддержкой голосового ввода.
  • PulsGlassSpinner – спиннер загрузки с градиентным свечением.
  • PulsScanProgress – прогресс‑бар с бегущим лучом.

Все компоненты используют единую цветовую палитру PulsTheme и поддерживают эффекты матового стекла, анимации и тактильную обратную связь.

Полный пример приложения #

В пакете включена полная интерактивная галерея (lib/main.dart), демонстрирующая все компоненты с цветовыми вариантами. Ниже приведён сокращённый пример, использующий несколько ключевых компонентов:

import 'package:flutter/material.dart';
import 'package:puls_design/puls_design.dart';

void main() => runApp(const PulsApp());

class PulsApp extends StatelessWidget {
  const PulsApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        scaffoldBackgroundColor: PulsTheme.bgDeepBlack,
        brightness: Brightness.dark,
      ),
      home: const DemoScreen(),
    );
  }
}

class DemoScreen extends StatefulWidget {
  const DemoScreen({super.key});

  @override
  State<DemoScreen> createState() => _DemoScreenState();
}

class _DemoScreenState extends State<DemoScreen> {
  bool _isListening = false;

  void _toggleListening() => setState(() => _isListening = !_isListening);

  void _showNotification(bool isWarning) {
    PulsNotification.push(
      context,
      title: isWarning ? "ВНИМАНИЕ" : "УСПЕХ",
      message: isWarning
          ? "Обнаружена критическая ошибка."
          : "Операция выполнена успешно.",
      isWarning: isWarning,
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: SingleChildScrollView(
          padding: const EdgeInsets.all(30),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Text("Puls Design System v1.0.0", style: PulsTheme.heading),
              const SizedBox(height: 10),
              Text("Демонстрация ключевых компонентов", style: PulsTheme.bodyText),

              const SizedBox(height: 40),
              // Карточка
              PulsGlassCard(
                accentColor: PulsTheme.accentOrange,
                pulseOnHover: true,
                child: Text("Карточка с эффектом стекла", style: PulsTheme.bodyText),
              ),

              const SizedBox(height: 25),
              // Поле ввода
              const PulsSystemInput(hint: "Введите запрос", isValid: null),

              const SizedBox(height: 25),
              // Поисковая строка
              PulsSearchBar(
                hint: "ПОИСК...",
                onChanged: (value) => print(value),
                onVoiceClick: _toggleListening,
              ),

              const SizedBox(height: 25),
              // Кнопки
              Wrap(
                spacing: 15,
                children: [
                  PulsGlassButton(
                    label: "УСПЕШНОЕ УВЕДОМЛЕНИЕ",
                    accentColor: PulsTheme.accentGreen,
                    onTap: () => _showNotification(false),
                  ),
                  PulsGlassButton(
                    label: "ОШИБКА",
                    accentColor: PulsTheme.accentRed,
                    onTap: () => _showNotification(true),
                  ),
                ],
              ),

              const SizedBox(height: 25),
              // Кнопка голосового ввода
              PulsVoiceButton(
                accentColor: PulsTheme.accentOrange,
                onTap: _toggleListening,
                isListening: _isListening,
                size: 100,
              ),

              const SizedBox(height: 25),
              // Индикаторы загрузки
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: [
                  PulsGlassSpinner(color: PulsTheme.accentOrange, size: 50),
                  PulsScanProgress(color: PulsTheme.accentGreen),
                ],
              ),

              const SizedBox(height: 40),
              // Степпер
              PulsStepper(
                steps: [
                  PulsStep(title: "Шаг 1", description: "Инициализация", isCompleted: true),
                  PulsStep(title: "Шаг 2", description: "Загрузка данных", isCompleted: null),
                  PulsStep(title: "Шаг 3", description: "Завершение", isCompleted: null),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Полную галерею со всеми компонентами можно найти в файле lib/main.dart внутри пакета.

Поддержка #

Пакет находится в активной разработке. Планируется добавление новых компонентов:

  • Навигация с эффектом стекла
  • Диалоговые окна
  • Индикаторы загрузки
  • Адаптивные сетки

Лицензия #

MIT

0
likes
110
points
13
downloads

Documentation

Documentation
API reference

Publisher

unverified uploader

Weekly Downloads

Puls Glass Design System for Flutter with frosted glass effect and dynamic animations.

Repository

Topics

#flutter #design-system #ui #glass-morphism #material-design

License

MIT (license)

Dependencies

flutter, google_fonts

More

Packages that depend on puls_design