Platform Adaptive Widgets

MIT License

A spiritual rewrite and continuation of flutter_platform_widgets library.

Platform-adaptive widgets that automatically render Material widgets on Android and Cupertino widgets on iOS — with zero platform checks in your app code.


Widgets Catalog

Dialogs

Widget / Function Material Cupertino Data Classes
showPlatformDatePicker() showDatePicker CupertinoDatePicker + showCupertinoModalPopup MaterialDatePickerData, CupertinoDatePickerData
showPlatformTimePicker() showTimePicker CupertinoDatePicker (time mode) + showCupertinoModalPopup MaterialTimePickerData, CupertinoDatePickerData
PlatformMenuPicker<T> DropdownMenu + DropdownMenuEntry PullDownButton / PullDownMenuItem (≤5 items) or CupertinoPicker + showCupertinoModalPopup (>5 items) MaterialMenuPickerData, CupertinoMenuPickerData
showPlatformDialog<T>() showDialog + Dialog / Dialog.fullscreen showCupertinoDialog PlatformDialogData, MaterialDialogData
showPlatformAlertDialog<T>() + PlatformAlertDialogActionButton AlertDialog + TextButton CupertinoAlertDialog + CupertinoDialogAction MaterialAlertDialogData, CupertinoAlertDialogData
showPlatformModalBottomSheet<T>() showModalBottomSheet showCupertinoModalPopup
showPlatformSimpleAlert() SnackBar via ScaffoldMessenger CupertinoAlertDialog via showCupertinoDialog PlatformDialogData

Interaction

Widget Material Cupertino Data Classes
PlatformButton TextButton, ElevatedButton, OutlinedButton, FilledButton (via MaterialButtonVariant) CupertinoButton, CupertinoButton.filled, CupertinoButton.tinted (via CupertinoButtonVariant) MaterialButtonData, CupertinoButtonData
PlatformCheckbox Checkbox CupertinoCheckbox PlatformCheckboxData, MaterialCheckboxData, CupertinoCheckboxData
PlatformExpansionTile ExpansionTile CupertinoExpansionTile MaterialExpansionTileData, CupertinoExpansionTileData
PlatformRadioGroup<T> RadioGroup + Radio RadioGroup + CupertinoRadio PlatformRadioGroupData<T>, PlatformRadioData<T>, MaterialRadioData<T>, CupertinoRadioData<T>
PlatformScrollbar Scrollbar CupertinoScrollbar MaterialScrollbarData, CupertinoScrollbarData
PlatformSearchBar SearchBar CupertinoSearchTextField PlatformSearchBarData, MaterialSearchBarData, CupertinoSearchBarData
PlatformSegmentButton<T> SegmentedButton + ButtonSegment CupertinoSlidingSegmentedControl MaterialSegmentButtonData<T>, CupertinoSegmentButtonData<T>
PlatformSlider Slider CupertinoSlider PlatformSliderData, MaterialSliderData
PlatformSwitch Switch CupertinoSwitch PlatformSwitchData, MaterialSwitchData, CupertinoSwitchData
PlatformTextField TextField CupertinoTextField PlatformTextFieldData, MaterialTextFieldData, CupertinoTextFieldData

Layout

Widget Material Cupertino Data Classes
PlatformApp / PlatformApp.router MaterialApp / MaterialApp.router CupertinoApp / CupertinoApp.router AppData, PlatformAppRouterData, MaterialAppData, MaterialAppRouterData, CupertinoAppData, CupertinoAppRouterData
PlatformAppBar AppBar CupertinoNavigationBar MaterialAppBarData, CupertinoNavigationBarData
PlatformScaffold Scaffold CupertinoPageScaffold MaterialScaffoldData, CupertinoScaffoldData
PlatformTabScaffold Scaffold + NavigationBar + NavigationDestination CupertinoTabScaffold + CupertinoTabBar + CupertinoTabView MaterialTabScaffoldData, CupertinoTabScaffoldData, TabDestinationData, PlatformTabController

Painting

Widget Material Cupertino Data Classes
PlatformListTile ListTile CupertinoListTile / CupertinoListTile.notched MaterialListTileData, CupertinoListTileData
PlatformProgressIndicator CircularProgressIndicator CupertinoActivityIndicator MaterialProgressIndicatorData, CupertinoProgressIndicatorData

Utilities

Generic Platform Widgets

Widget Description
PlatformWidget Takes materialBuilder and cupertinoBuilder callbacks to render any custom widget per platform.
PlatformWidgetBuilder Same as PlatformWidget but also passes a shared child widget to both builders.

Platform Theme

PlatformTheme.of(context) — provides unified access to theme properties across platforms:

Property Material Cupertino
barBackgroundColor Theme.of(context).appBarTheme.backgroundColor CupertinoTheme.of(context).barBackgroundColor
primaryColor Theme.of(context).primaryColor CupertinoTheme.of(context).primaryColor
primaryContrastingColor Theme.of(context).colorScheme.onPrimary CupertinoTheme.of(context).primaryContrastingColor
scaffoldBackgroundColor Theme.of(context).scaffoldBackgroundColor CupertinoTheme.of(context).scaffoldBackgroundColor
selectionHandleColor Theme.of(context).colorScheme.onSurface CupertinoTheme.of(context).selectionHandleColor

Context Extensions

Extensions on BuildContext for inline platform-specific values:

Extension Description
platformValue<T>(material:, cupertino:) Returns the value matching the current platform.
platformValueNullable<T>(material:, cupertino:) Nullable variant of platformValue.
platformLazyValue<T>(material:, cupertino:) Lazily evaluates only the callback for the current platform.
platformLazyNullable<T>(material:, cupertino:) Nullable variant of platformLazyValue.
platformIcon(material:, cupertino:) Convenience for selecting platform-specific IconData.

Other Extensions

Extension Description
DateTimeExtensions.toDate() Converts DateTimeDate.
TimeOfDayExtensions.toDateTime() Converts TimeOfDayDateTime.

Models

Model Description
Date An immutable gregorian calendar date (year, month, day) with comparison, arithmetic, and conversion utilities.
PlatformAdaptiveIcons A class that provides adaptive icons based on the current platform.

Base Classes

All platform widgets extend one of these base classes, which use compile-time defaultTargetPlatform resolution:

Base Class Description
PlatformWidgetBase Core abstract StatelessWidget with buildMaterial() and buildCupertino().
PlatformWidgetKeyedBase Adds an optional widgetKey for the underlying platform widget.
PlatformWidgetBuilderBase Adds a required child widget passed through to the platform builder.
PlatformWidgetKeyedBuilderBase Combines both widgetKey and child.

Contributors

Contributors

Made with contrib.rocks.

Authors

Used By

This project is used by the following companies:

  • Didata Automatisering B.V
  • Dimerce B.V

License

MIT

Libraries

extensions/context_extensions
extensions/date_time_extensions
extensions/time_of_day_extensions
models/date
models/dialogs/const_values
models/dialogs/platform_alert_dialog_data
models/dialogs/platform_date_picker_data
models/dialogs/platform_dialog_data
models/dialogs/platform_menu_picker_data
models/dialogs/platform_time_picker_data
models/interaction/platform_button_data
models/interaction/platform_checkbox_data
models/interaction/platform_expansion_tile_data
models/interaction/platform_radio_group_data
models/interaction/platform_scrollbar_data
models/interaction/platform_search_bar_data
models/interaction/platform_segment_button_data
models/interaction/platform_slider_data
models/interaction/platform_switch_data
models/interaction/platform_text_field_data
models/layout/platform_app_bar_data
models/layout/platform_app_data
models/layout/platform_scaffold_data
models/layout/platform_tab_scaffold_data
models/painting/platform_list_tile_data
models/painting/platform_progress_indicator_data
models/painting/platform_theme
models/platform_adaptive_icons
models/platform_widget_base
platform_adaptive_widgets
utils/target_platform
widgets/dialogs/platform_date_picker
widgets/dialogs/platform_dialog
widgets/dialogs/platform_menu_picker
widgets/dialogs/platform_modal_bottom_sheet
widgets/dialogs/platform_simple_alert
widgets/dialogs/platform_time_picker
widgets/interaction/platform_button
widgets/interaction/platform_checkbox
widgets/interaction/platform_expansion_tile
widgets/interaction/platform_radio_group
widgets/interaction/platform_scrollbar
widgets/interaction/platform_segment_button
widgets/interaction/platform_slider
widgets/interaction/platform_switch
widgets/interaction/platform_text_field
widgets/layout/platform_app
widgets/layout/platform_app_bar
widgets/layout/platform_scaffold
widgets/layout/platform_tab_scaffold
widgets/layout/platform_tab_scaffold_original
widgets/painting/platform_list_tile
widgets/painting/platform_progress_indicator
widgets/platform_widget