Adaptive UI Kit
A powerful Flutter package for building beautiful **platform-adaptive user interfaces** with a single API.
✨ Overview
Adaptive UI Kit automatically renders the correct UI for each platform.
| Platform | Design |
|---|---|
| iOS | Apple-inspired Glass UI |
| macOS | Apple-inspired Glass UI |
| Android | Material 3 |
| Web | Material |
| Windows | Material |
| Linux | Material |
No platform checks. No duplicate widgets.
🎬 Demo
Features
- Automatic platform adaptation
- Adaptive Dialog
- Adaptive Action Sheet
- Adaptive Date Picker
- Adaptive Time Picker
- Adaptive Multi Select
- Adaptive Navigation Bar
- Global theme configuration
- Force UI Kit support
- Custom resolver support
Integration Guide
To integrate Adaptive UI Kit into your Flutter project:
- Add the package to
pubspec.yaml:
dependencies:
adaptive_ui_kit: ^0.0.9
- Import the package:
import 'package:adaptive_ui_kit/adaptive_ui_kit.dart';
- Optionally configure global theming before
runApp:
AdaptiveUiKitConfig.glass = AdaptiveUiKitConfig.glass.copyWith(
tintColor: Colors.indigo,
destructiveColor: Colors.red,
);
AdaptiveUiKitConfig.forceUiKit = AdaptiveUiKit.glass;
- Replace or add UI calls using the adaptive API. Examples:
await AdaptiveDialog.showConfirm(
context: context,
// either pass plain text:
title: 'Confirm',
message: 'Proceed?'
// or pass widgets instead:
titleWidget: Row(children: [Icon(Icons.info), Text('Confirm')]),
);
await AdaptiveActionSheet.show(
context: context,
titleWidget: Text('Options'),
items: [ActionSheetItem(label: 'Edit', icon: Icons.edit, onTap: () {})],
);
final selected = await AdaptiveMultiSelect.show(
context: context,
titleWidget: Text('Choose'),
options: [MultiSelectOption(id: '1', label: 'One', child: Text('One'))],
);
// Adaptive bottom navigation bar example
Widget build(BuildContext context) {
return Scaffold(
bottomNavigationBar: AdaptiveNavigationBar(
currentIndex: currentIndex,
onTap: (index) => setState(() => currentIndex = index),
items: const [
AdaptiveNavItem(icon: Icons.home_outlined, activeIcon: Icons.home, label: 'Home'),
AdaptiveNavItem(icon: Icons.search_outlined, activeIcon: Icons.search, label: 'Search'),
AdaptiveNavItem(icon: Icons.person_outline, activeIcon: Icons.person, label: 'Profile'),
],
),
body: _pages[currentIndex],
);
}
Notes:
- For Material date/time pickers you can pass
helpText,cancelText,confirmText, and abuilderfor custom theme wrapping. - Widgets take precedence: if
titleWidget/messageWidget/childare provided they'll be used instead of string fallbacks.
Components
| Component | Description |
|---|---|
| AdaptiveDialog | Platform adaptive dialog |
| AdaptiveActionSheet | Adaptive action sheet |
| AdaptiveDateTimePicker | Adaptive date picker |
| AdaptiveTimePicker | Adaptive time picker |
| AdaptiveMultiSelect | Adaptive multi select |
| AdaptiveNavigationBar | Platform adaptive bottom navigation bar |
Architecture
Adaptive Widgets
│
▼
Platform Resolver
│
┌───────────────┐
│ │
▼ ▼
Glass UI Material UI
│
▼
Shared Themes
📸 Screenshots
Overview
Adaptive Dialog
| iOS (Glass) | Android (Material) |
|---|
Date Picker
|
|
|
Time Picker
|
|
|
Example
cd example
flutter run
Roadmap
- Adaptive Snackbar
- Adaptive Toast
- Adaptive Dropdown
- Adaptive Navigation Components
- Adaptive Form Controls
- Adaptive Search Bar
Why Adaptive UI Kit?
Instead of maintaining separate widgets for every platform, write your UI once and let Adaptive UI Kit deliver the native experience automatically.
Contributing
Contributions, bug reports and feature requests are always welcome.
License
MIT License
Made with ❤️ using Flutter.