adaptive_kit 1.1.0 copy "adaptive_kit: ^1.1.0" to clipboard
adaptive_kit: ^1.1.0 copied to clipboard

The Tailwind CSS of Flutter. Zero-config adaptive UI toolkit with responsive breakpoints, adaptive widgets, design tokens, and utility extensions.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:adaptive_kit/adaptive_kit.dart';
import 'package:url_launcher/url_launcher.dart';

import 'theme/premium_theme.dart';
import 'widgets/premium_widgets.dart';
import 'pages/home_page.dart';
import 'pages/breakpoints_demo_page.dart';
import 'pages/layout_demo_page.dart';
import 'pages/grid_demo_page.dart';
import 'pages/widgets_demo_page.dart';
import 'pages/tokens_demo_page.dart';
import 'pages/visibility_demo_page.dart';
import 'pages/extensions_demo_page.dart';

void main() {
  runApp(const AdaptiveKitDemoApp());
}

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

  @override
  Widget build(BuildContext context) {
    return SmartUi(
      child: MaterialApp(
        title: 'adaptive_kit',
        debugShowCheckedModeBanner: false,
        themeMode: ThemeMode.dark,
        theme: createPremiumLightTheme(),
        darkTheme: createPremiumTheme(),
        home: const MainNavigation(),
      ),
    );
  }
}

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

  @override
  State<MainNavigation> createState() => _MainNavigationState();
}

class _MainNavigationState extends State<MainNavigation> {
  int _selectedIndex = 0;

  static const _navItems = [
    _NavItem(Icons.home_rounded, Icons.home_outlined, 'Home'),
    _NavItem(Icons.devices_rounded, Icons.devices_outlined, 'Breakpoints'),
    _NavItem(Icons.view_quilt_rounded, Icons.view_quilt_outlined, 'Layout'),
    _NavItem(Icons.grid_view_rounded, Icons.grid_view_outlined, 'Grid'),
    _NavItem(Icons.widgets_rounded, Icons.widgets_outlined, 'Widgets'),
    _NavItem(Icons.palette_rounded, Icons.palette_outlined, 'Tokens'),
    _NavItem(Icons.visibility_rounded, Icons.visibility_outlined, 'Visibility'),
    _NavItem(Icons.extension_rounded, Icons.extension_outlined, 'Extensions'),
  ];

  @override
  Widget build(BuildContext context) {
    final pages = [
      const HomePage(),
      const BreakpointsDemoPage(),
      const LayoutDemoPage(),
      const GridDemoPage(),
      const WidgetsDemoPage(),
      const TokensDemoPage(),
      const VisibilityDemoPage(),
      const ExtensionsDemoPage(),
    ];

    return SmartScaffold(
      selectedIndex: _selectedIndex,
      onDestinationSelected: (index) {
        setState(() => _selectedIndex = index);
      },
      destinations: _navItems
          .map((item) => SmartDestination(
                icon: GradientIcon(
                  item.outlinedIcon,
                  size: 24,
                ),
                selectedIcon: GradientIcon(
                  item.filledIcon,
                  size: 24,
                ),
                label: item.label,
              ))
          .toList(),
      appBar: AppBar(
        backgroundColor: PremiumColors.surface,
        surfaceTintColor: Colors.transparent,
        title: Row(
          mainAxisSize: MainAxisSize.min,
          children: [
            Container(
              padding: const EdgeInsets.all(8),
              decoration: BoxDecoration(
                gradient: PremiumGradients.primary,
                borderRadius: BorderRadius.circular(10),
                boxShadow: [
                  BoxShadow(
                    color: PremiumColors.gradientStart.withAlpha(77),
                    blurRadius: 12,
                    offset: const Offset(0, 4),
                  ),
                ],
              ),
              child: const Icon(
                Icons.auto_awesome_rounded,
                size: 18,
                color: Colors.white,
              ),
            ),
            const HGap.md(),
            const GradientText(
              'adaptive_kit',
              style: TextStyle(
                fontSize: 20,
                fontWeight: FontWeight.w700,
                letterSpacing: -0.5,
              ),
            ),
          ],
        ),
        actions: [
          PremiumChip(
            label: 'v1.0.3',
            color: PremiumColors.gold,
            icon: Icons.verified_rounded,
          ),
          const HGap.sm(),
          const BreakpointIndicator(),
          const HGap.sm(),
          const PlatformBadge(),
          const HGap.md(),
        ],
      ),
      drawerHeader: _buildDrawerHeader(context),
      body: AnimatedSwitcher(
        duration: const Duration(milliseconds: 300),
        child: pages[_selectedIndex],
      ),
    );
  }

  Widget _buildDrawerHeader(BuildContext context) {
    return Container(
      padding: const EdgeInsets.all(SmartSpacing.lg),
      decoration: BoxDecoration(
        gradient: LinearGradient(
          begin: Alignment.topLeft,
          end: Alignment.bottomRight,
          colors: [
            PremiumColors.gradientStart.withAlpha(51),
            PremiumColors.gradientMiddle.withAlpha(26),
            Colors.transparent,
          ],
        ),
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Container(
            padding: const EdgeInsets.all(16),
            decoration: BoxDecoration(
              gradient: PremiumGradients.primary,
              borderRadius: BorderRadius.circular(16),
              boxShadow: [
                BoxShadow(
                  color: PremiumColors.gradientStart.withAlpha(102),
                  blurRadius: 20,
                  offset: const Offset(0, 8),
                ),
              ],
            ),
            child: const Icon(
              Icons.auto_awesome_rounded,
              size: 32,
              color: Colors.white,
            ),
          ),
          const VGap.lg(),
          const GradientText(
            'adaptive_kit',
            style: TextStyle(
              fontSize: 24,
              fontWeight: FontWeight.w800,
              letterSpacing: -0.5,
            ),
          ),
          const VGap.xs(),
          Text(
            'Build responsive Flutter apps',
            style: PremiumTypography.bodySmall,
          ),
          const VGap.lg(),
          Row(
            children: [
              _DrawerLink(
                icon: Icons.public_rounded,
                label: 'pub.dev',
                onTap: () => _launchUrl('https://pub.dev/packages/adaptive_kit'),
              ),
              const HGap.md(),
              _DrawerLink(
                icon: Icons.code_rounded,
                label: 'GitHub',
                onTap: () => _launchUrl('https://github.com/example/adaptive_kit'),
              ),
            ],
          ),
        ],
      ),
    );
  }

  Future<void> _launchUrl(String url) async {
    final uri = Uri.parse(url);
    if (await canLaunchUrl(uri)) {
      await launchUrl(uri, mode: LaunchMode.externalApplication);
    }
  }
}

class _NavItem {
  const _NavItem(this.filledIcon, this.outlinedIcon, this.label);
  final IconData filledIcon;
  final IconData outlinedIcon;
  final String label;
}

class _DrawerLink extends StatelessWidget {
  const _DrawerLink({
    required this.icon,
    required this.label,
    required this.onTap,
  });

  final IconData icon;
  final String label;
  final VoidCallback onTap;

  @override
  Widget build(BuildContext context) {
    return InkWell(
      onTap: onTap,
      borderRadius: BorderRadius.circular(8),
      child: Container(
        padding: const EdgeInsets.symmetric(
          horizontal: SmartSpacing.sm,
          vertical: SmartSpacing.xs,
        ),
        decoration: BoxDecoration(
          border: Border.all(color: PremiumColors.cardBorder),
          borderRadius: BorderRadius.circular(8),
        ),
        child: Row(
          mainAxisSize: MainAxisSize.min,
          children: [
            Icon(icon, size: 14, color: PremiumColors.textSecondary),
            const HGap.xs(),
            Text(
              label,
              style: PremiumTypography.labelSmall.copyWith(
                color: PremiumColors.textSecondary,
              ),
            ),
          ],
        ),
      ),
    );
  }
}
2
likes
0
points
323
downloads

Publisher

unverified uploader

Weekly Downloads

The Tailwind CSS of Flutter. Zero-config adaptive UI toolkit with responsive breakpoints, adaptive widgets, design tokens, and utility extensions.

Repository (GitHub)
View/report issues

Topics

#responsive #adaptive #ui #layout #widget

License

unknown (license)

Dependencies

flutter

More

Packages that depend on adaptive_kit