flutter_wizard_kit 1.0.0 copy "flutter_wizard_kit: ^1.0.0" to clipboard
flutter_wizard_kit: ^1.0.0 copied to clipboard

A comprehensive Flutter package for multi-step form wizards with customizable steps, validation, and navigation controls.

Flutter Wizard Kit 🧙 #

A comprehensive Flutter package for multi-step form wizards with customizable steps, validation, and navigation controls.

Features ✨ #

  • 📋 Multi-Step Forms: Create complex multi-step forms with ease
  • 🎮 Smart Controller: Comprehensive state management and navigation
  • 📊 Progress Tracking: Visual progress indicators with multiple styles
  • 🎯 Navigation Controls: Previous, next, skip, and complete buttons
  • ✅ Validation Support: Built-in validation with error handling
  • 📱 Platform Adaptive: Automatically adapts to iOS and Android design patterns
  • 🎨 Highly Customizable: Colors, spacing, sizing, and styling options
  • ♿ Accessibility Ready: Proper semantic structure and screen reader support
  • 🌍 Localization Ready: All text is customizable for different languages
  • ⚡ Performance Optimized: Efficient step rendering and state management

Installation 📦 #

Add this to your package's pubspec.yaml file:

dependencies:
  flutter_wizard_kit: ^1.0.0

Then run:

flutter pub get

Usage 🚀 #

Basic Wizard Setup #

import 'package:flutter_wizard_kit/flutter_wizard_kit.dart';

class MyWizardScreen extends StatefulWidget {
  @override
  _MyWizardScreenState createState() => _MyWizardScreenState();
}

class _MyWizardScreenState extends State<MyWizardScreen> {
  late WizardController _controller;

  @override
  void initState() {
    super.initState();
    _controller = WizardController(
      steps: [
        WizardData(stepId: 'step1', title: 'Personal Information'),
        WizardData(stepId: 'step2', title: 'Contact Details'),
        WizardData(stepId: 'step3', title: 'Preferences'),
      ],
      onStepChanged: (index, data) => print('Step $index: ${data.title}'),
      onCompleted: () => _navigateToSuccessScreen(),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Setup Wizard')),
      body: WizardWidget(
        controller: _controller,
        steps: [
          WizardStep(
            data: WizardData(
              stepId: 'step1',
              title: 'Personal Information',
              subtitle: 'Tell us about yourself',
            ),
            content: PersonalInfoForm(),
          ),
          WizardStep(
            data: WizardData(
              stepId: 'step2',
              title: 'Contact Details',
              subtitle: 'How can we reach you?',
            ),
            content: ContactDetailsForm(),
          ),
          WizardStep(
            data: WizardData(
              stepId: 'step3',
              title: 'Preferences',
              subtitle: 'Customize your experience',
            ),
            content: PreferencesForm(),
          ),
        ],
        showProgress: true,
        showNavigation: true,
        allowSkip: true,
      ),
    );
  }

  void _navigateToSuccessScreen() {
    Navigator.pushReplacement(
      context,
      MaterialPageRoute(builder: (context) => SuccessScreen()),
    );
  }
}

Advanced Wizard with Custom Validation #

final controller = WizardController(
  steps: [
    WizardData(
      stepId: 'personal',
      title: 'Personal Info',
      isOptional: false,
      isSkippable: false,
    ),
    WizardData(
      stepId: 'contact',
      title: 'Contact Info',
      isOptional: false,
      isSkippable: true,
    ),
    WizardData(
      stepId: 'preferences',
      title: 'Preferences',
      isOptional: true,
      isSkippable: true,
    ),
  ],
  onStepChanged: (index, data) {
    print('Current step: ${data.title}');
  },
  onCompleted: () {
    print('Wizard completed!');
    _saveWizardData();
  },
  allowSkip: true,
  requireValidation: true,
);

// Update step data
controller.updateStepData('personal', {
  'firstName': 'John',
  'lastName': 'Doe',
  'email': 'john.doe@example.com',
});

// Update validation
controller.updateStepValidation('personal', true);

// Mark step as completed
controller.markStepCompleted('personal');

Custom Progress Indicator #

WizardProgress(
  controller: _controller,
  style: ProgressStyle.steps,
  color: Colors.blue,
  backgroundColor: Colors.grey.shade300,
  height: 12.0,
  showPercentage: true,
  showStepNumbers: true,
  borderRadius: 6.0,
)

Custom Navigation Controls #

WizardNavigation(
  controller: _controller,
  allowSkip: true,
  previousText: 'Back',
  nextText: 'Continue',
  skipText: 'Skip This Step',
  completeText: 'Finish Setup',
  color: Colors.blue,
  height: 55.0,
  borderRadius: 16.0,
  previousIcon: Icons.arrow_back_ios,
  nextIcon: Icons.arrow_forward_ios,
  completeIcon: Icons.check_circle,
)

Step with Custom Content #

WizardStep(
  data: WizardData(
    stepId: 'custom_step',
    title: 'Custom Step',
    subtitle: 'This step has custom content',
  ),
  content: Column(
    children: [
      Text('Custom step content'),
      ElevatedButton(
        onPressed: () => _handleCustomAction(),
        child: Text('Custom Action'),
      ),
    ],
  ),
  onDataChanged: (data) => print('Step data changed: $data'),
  onValidationChanged: (isValid) => print('Validation: $isValid'),
  onCompleted: (data) => print('Step completed: $data'),
)

Customization 🎨 #

Wizard Styling #

WizardWidget(
  controller: _controller,
  steps: _steps,
  showProgress: true,
  showNavigation: true,
  progressPosition: ProgressPosition.top,
  navigationPosition: NavigationPosition.bottom,
  padding: EdgeInsets.all(24),
  stepSpacing: 32,
  progressSpacing: 20,
  navigationSpacing: 20,
  backgroundColor: Colors.white,
  stepBackgroundColor: Colors.grey.shade50,
  progressColor: Colors.blue,
  navigationColor: Colors.blue,
  borderRadius: 16,
  elevation: 4,
  shadowColor: Colors.black.withOpacity(0.1),
)

Progress Indicator Styles #

// Linear progress
WizardProgress(
  style: ProgressStyle.linear,
  color: Colors.blue,
  backgroundColor: Colors.grey.shade300,
  height: 8.0,
  borderRadius: 4.0,
  showPercentage: true,
)

// Circular progress
WizardProgress(
  style: ProgressStyle.circular,
  color: Colors.blue,
  backgroundColor: Colors.grey.shade300,
  height: 6.0,
  width: 120.0,
  showPercentage: true,
)

// Steps progress
WizardProgress(
  style: ProgressStyle.steps,
  color: Colors.blue,
  backgroundColor: Colors.grey.shade300,
  height: 10.0,
  showStepNumbers: true,
)
WizardNavigation(
  controller: _controller,
  previousText: 'Previous',
  nextText: 'Next',
  skipText: 'Skip',
  completeText: 'Complete',
  color: Colors.blue,
  textColor: Colors.white,
  backgroundColor: Colors.white,
  borderColor: Colors.blue,
  height: 50.0,
  borderRadius: 12.0,
  buttonSpacing: 16.0,
  previousIcon: Icons.arrow_back,
  nextIcon: Icons.arrow_forward,
  skipIcon: Icons.skip_next,
  completeIcon: Icons.check,
  iconSize: 20.0,
  iconSpacing: 8.0,
)

Widgets 📱 #

WizardWidget #

Main wizard container that manages step rendering, progress, and navigation.

WizardStep #

Individual wizard step with customizable content and validation.

WizardController #

Controller for managing wizard state, navigation, and data.

WizardProgress #

Progress indicator with multiple styles (linear, circular, steps).

WizardNavigation #

Navigation controls with previous, next, skip, and complete buttons.

WizardData #

Data model for wizard step information and state.

Dependencies 📋 #

  • flutter: SDK
  • flutter_platform_widgets: Platform-adaptive widgets

Contributing 🤝 #

Contributions are welcome! Please feel free to submit a Pull Request.

License 📄 #

This project is licensed under the MIT License - see the LICENSE file for details.

Support 💬 #

If you encounter any problems or have suggestions, please file an issue at the GitHub repository.


Made with ❤️ by seifmoustafa

0
likes
110
points
132
downloads

Publisher

unverified uploader

Weekly Downloads

A comprehensive Flutter package for multi-step form wizards with customizable steps, validation, and navigation controls.

Topics

#flutter #wizard #multi-step #form #navigation

Documentation

API reference

License

MIT (license)

Dependencies

flutter, flutter_platform_widgets

More

Packages that depend on flutter_wizard_kit