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

A Flutter widget that recreates the macOS dock with smooth scaling animations, hover effects, and customizable parameters for a native-like experience.

example/lib/main.dart

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'MacOS Dock Example',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(
          seedColor: Colors.blue,
        ),
        useMaterial3: true,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});
  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  double scaleFactor = 1.5;
  double translateFactor = 1.5;
  double radiusFactor = 5;
  double iconSpacing = 8.0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.end,
        children: [
          // Dock
          MacosDock(
            scaleFactor: scaleFactor,
            translateFactor: translateFactor,
            radiusFactor: radiusFactor,
            iconSpacing: iconSpacing,
            children: (scale) => [
              Image.asset('assets/Finder.png'),
              Image.asset('assets/App_Store.png'),
              Image.asset('assets/Calendar.png'),
              Image.asset('assets/Apple_Music.png'),
              Image.asset('assets/Apple_TV.png'),
              Image.asset('assets/Brave.png'),
              Image.asset('assets/vscode.png'),
              Image.asset('assets/Spotify.png'),
              Image.asset('assets/discord.png'),
              Image.asset('assets/Control.png'),
              Image.asset('assets/blender.png'),
            ],
          ),

          // Control panel
          Card(
            margin: const EdgeInsets.all(16),
            child: Padding(
              padding: const EdgeInsets.all(16),
              child: Column(
                mainAxisSize: MainAxisSize.min,
                children: [
                  _buildSlider(
                    "Scale Factor",
                    scaleFactor,
                    (value) => setState(
                      () => scaleFactor = value,
                    ),
                    max: 5,
                  ),
                  _buildSlider(
                    "Translate Factor",
                    translateFactor,
                    (value) => setState(
                      () => translateFactor = value,
                    ),
                    max: 5,
                  ),
                  _buildSlider(
                    "Radius Factor",
                    radiusFactor,
                    (value) => setState(
                      () => radiusFactor = value,
                    ),
                    max: 15,
                  ),
                  _buildSlider(
                    "Icon Spacing",
                    iconSpacing,
                    (value) => setState(
                      () => iconSpacing = value,
                    ),
                    max: 30,
                  ),
                ],
              ),
            ),
          ),
        ],
      ),
    );
  }

  Widget _buildSlider(
    String label,
    double value,
    ValueChanged<double> onChanged, {
    double max = 15.0,
  }) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Text(
          '$label: ${value.toStringAsFixed(2)}',
          style: const TextStyle(fontWeight: FontWeight.bold),
        ),
        Row(
          children: [
            Expanded(
              child: Slider(
                value: value,
                min: 0.1,
                max: max,
                onChanged: onChanged,
              ),
            ),
          ],
        ),
      ],
    );
  }
}
17
likes
0
points
41
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter widget that recreates the macOS dock with smooth scaling animations, hover effects, and customizable parameters for a native-like experience.

Repository (GitHub)
View/report issues

Funding

Consider supporting this project:

www.buymeacoffee.com

License

unknown (license)

Dependencies

flutter

More

Packages that depend on macos_dock