Home
Softono
y

yako-dev

Professional software vendor delivering innovative solutions on the Softono platform. Specialized in both open-source and proprietary software development.

Total Products
3

Software by yako-dev

flutter-settings-ui
Open Source

flutter-settings-ui

# Settings UI for Flutter [![Pub Version](https://img.shields.io/pub/v/settings_ui?color=blueviolet)](https://pub.dev/packages/settings_ui) [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE) [![Platform](https://img.shields.io/badge/platform-android%20%7C%20ios%20%7C%20web-lightgrey)](https://pub.dev/packages/settings_ui) A Flutter package for building settings screens that look native on **Android**, **iOS**, and **Web** — all from a single API. The UI automatically adapts to each platform's visual style: Material for Android, Cupertino for iOS, and a card-based Web layout. Also runs on macOS, Windows, Linux, and Fuchsia (macOS/Windows use the Cupertino style; Linux uses Material). <p align="center"> <img src="https://raw.githubusercontent.com/yako-dev/flutter-settings-ui/master/assets/v2/settings_ui_cover.png" height="560px"> </p> --- ## Contents - [Installing](#installing) - [Quick start](#quick-start) - [Tile types](#tile-types) - [Platform styles](#platform-styles) - [Theming](#theming) - [Advanced usage](#advanced-usage) - [API reference](#api-reference) --- ## Installing Add to your `pubspec.yaml`: ```yaml dependencies: settings_ui: ^3.0.1 ``` Then import: ```dart import 'package:settings_ui/settings_ui.dart'; ``` --- ## Quick start ```dart class SettingsScreen extends StatefulWidget { const SettingsScreen({super.key}); @override State<SettingsScreen> createState() => _SettingsScreenState(); } class _SettingsScreenState extends State<SettingsScreen> { bool _notificationsEnabled = true; bool _darkMode = false; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('Settings')), body: SettingsList( sections: [ SettingsSection( title: const Text('General'), tiles: [ SettingsTile.navigation( leading: const Icon(Icons.language), title: const Text('Language'), value: const Text('English'), onPressed: (context) { /* navigate */ }, ), ], ), SettingsSection( title: const Text('Appearance'), tiles: [ SettingsTile.switchTile( leading: const Icon(Icons.dark_mode), title: const Text('Dark mode'), initialValue: _darkMode, onToggle: (value) => setState(() => _darkMode = value), ), SettingsTile.switchTile( leading: const Icon(Icons.notifications), title: const Text('Notifications'), description: const Text('Alerts, sounds, badges'), initialValue: _notificationsEnabled, onToggle: (value) => setState(() => _notificationsEnabled = value), ), ], ), ], ), ); } } ``` --- ## Tile types ### `SettingsTile` — basic tile A tappable tile with optional leading icon, description, and trailing widget. ```dart SettingsTile( leading: const Icon(Icons.storage), title: const Text('Storage'), description: const Text('30% used — 5.60 GB free'), onPressed: (context) { /* ... */ }, ) ``` ### `SettingsTile.navigation` — navigation tile Adds a platform-appropriate trailing chevron. Right arrow in LTR, left arrow in RTL. ```dart SettingsTile.navigation( leading: const Icon(Icons.language), title: const Text('Language'), value: const Text('English'), titleDescription: const Text('Choose your preferred language'), onPressed: (context) { Navigator.of(context).push(/* language screen */); }, ) ``` ### `SettingsTile.switchTile` — switch tile Renders a `Switch` on Material platforms and a `CupertinoSwitch` on iOS/macOS. ```dart SettingsTile.switchTile( leading: const Icon(Icons.fingerprint), title: const Text('Use biometrics'), description: const Text('Unlock with fingerprint or Face ID'), initialValue: _biometricsEnabled, onToggle: (value) => setState(() => _biometricsEnabled = value), ) ``` ### `CustomSettingsTile` — any widget as a tile ```dart CustomSettingsTile( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), child: LinearProgressIndicator(value: 0.3), ), ) ``` ### `CustomSettingsSection` — any widget as a section ```dart CustomSettingsSection( child: Padding( padding: const EdgeInsets.all(16), child: Text( 'Signed in as Danny Yako', style: Theme.of(context).textTheme.bodySmall, ), ), ) ``` --- ## Platform styles `SettingsList` detects the platform automatically. You can override it: ```dart SettingsList( platform: DevicePlatform.iOS, // force Cupertino style sections: [ /* ... */ ], ) ``` <p align="center"> <img src="https://raw.githubusercontent.com/yako-dev/flutter-settings-ui/master/assets/v3/android_settings.png" width="30%"> &nbsp; <img src="https://raw.githubusercontent.com/yako-dev/flutter-settings-ui/master/assets/v3/ios_cupertino.png" width="30%"> &nbsp; <img src="https://raw.githubusercontent.com/yako-dev/flutter-settings-ui/master/assets/v3/web_chrome.png" width="30%"> </p> <p align="center"><em>Android (Material) &nbsp;•&nbsp; iOS (Cupertino) &nbsp;•&nbsp; Web</em></p> | `DevicePlatform` | Style | |---|---| | `device` *(default)* | Auto-detected at runtime | | `android`, `fuchsia`, `linux` | Material | | `iOS`, `macOS`, `windows` | Cupertino | | `web` | Web (card layout) | --- ## Theming ### Material 3 (v3.0.0+) On Android and Web, colors are automatically derived from your app's `ColorScheme`. No extra configuration needed — seed colors, light/dark mode, and custom `ColorScheme` all work out of the box. <p align="center"> <img src="https://raw.githubusercontent.com/yako-dev/flutter-settings-ui/master/assets/v3/android_material3.png" width="45%"> </p> ```dart MaterialApp( theme: ThemeData( colorSchemeSeed: Colors.indigo, useMaterial3: true, ), home: const SettingsScreen(), ) ``` ### Custom theme overrides Any field left `null` falls back to the platform default derived from your `ColorScheme`. ```dart SettingsList( lightTheme: const SettingsThemeData( settingsListBackground: Color(0xFFF2F2F7), settingsSectionBackground: Colors.white, titleTextColor: Colors.indigo, ), darkTheme: const SettingsThemeData( settingsListBackground: Color(0xFF1C1C1E), settingsSectionBackground: Color(0xFF2C2C2E), titleTextColor: Colors.indigoAccent, ), sections: [ /* ... */ ], ) ``` ### Custom text styles ```dart SettingsList( lightTheme: SettingsThemeData( tileTextStyle: const TextStyle(fontFamily: 'Roboto', fontSize: 16), tileDescriptionTextStyle: const TextStyle(fontSize: 12), titleTextStyle: const TextStyle( fontWeight: FontWeight.bold, fontSize: 13, letterSpacing: 0.5, ), ), sections: [ /* ... */ ], ) ``` ### Disabled tiles ```dart SettingsTile.switchTile( title: const Text('Feature'), initialValue: false, onToggle: null, // null disables interaction enabled: false, ) // Control the disabled switch color: SettingsList( lightTheme: const SettingsThemeData( inactiveSwitchColor: Colors.grey, ), sections: [ /* ... */ ], ) ``` --- ## Advanced usage ### Scroll controller ```dart final _controller = ScrollController(); SettingsList( scrollController: _controller, sections: [ SettingsSection( tiles: [ SettingsTile( title: const Text('Jump to bottom'), onPressed: (_) => _controller.animateTo( _controller.position.maxScrollExtent, duration: const Duration(milliseconds: 300), curve: Curves.easeOut, ), ), ], ), ], ) ``` ### Compact tiles ```dart SettingsTile( title: const Text('Option'), compact: true, // halves the vertical padding ) ``` ### Embedding inside another scroll view ```dart SettingsList( shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), sections: [ /* ... */ ], ) ``` ### Wide screen alignment On screens wider than 810 dp, the list auto-centers. To left-align: ```dart SettingsList( crossAxisAlignment: CrossAxisAlignment.start, sections: [ /* ... */ ], ) ``` ### CupertinoApp support ```dart // Pure CupertinoApp: SettingsList( applicationType: ApplicationType.cupertino, sections: [ /* ... */ ], ) // MaterialApp on Android, CupertinoApp on iOS: SettingsList( applicationType: ApplicationType.both, sections: [ /* ... */ ], ) ``` --- ## API reference ### `SettingsList` | Parameter | Type | Default | Description | |---|---|---|---| | `sections` | `List<AbstractSettingsSection>` | required | Sections to display | | `platform` | `DevicePlatform?` | `device` | Force a specific platform style | | `lightTheme` | `SettingsThemeData?` | — | Overrides for light mode | | `darkTheme` | `SettingsThemeData?` | — | Overrides for dark mode | | `brightness` | `Brightness?` | — | Override brightness detection | | `applicationType` | `ApplicationType` | `material` | `material`, `cupertino`, or `both` | | `scrollController` | `ScrollController?` | — | Programmatic scroll control | | `shrinkWrap` | `bool` | `false` | Shrink-wrap to content height | | `physics` | `ScrollPhysics?` | — | Custom scroll physics | | `contentPadding` | `EdgeInsetsGeometry?` | — | Override list padding | | `crossAxisAlignment` | `CrossAxisAlignment` | `center` | Horizontal alignment on wide screens | ### `SettingsSection` | Parameter | Type | Description | |---|---|---| | `tiles` | `List<AbstractSettingsTile>` | The tiles in this section | | `title` | `Widget?` | Section header | | `margin` | `EdgeInsetsDirectional?` | Override section margin | ### `SettingsTile` | Parameter | Type | Applies to | Description | |---|---|---|---| | `title` | `Widget` | all | Tile label | | `description` | `Widget?` | all | Secondary text below the title | | `leading` | `Widget?` | all | Icon or widget at the start | | `trailing` | `Widget?` | all | Widget at the end | | `enabled` | `bool` | all | Grays out and disables interaction | | `compact` | `bool` | all | Halves the vertical padding | | `onPressed` | `Function(BuildContext)?` | all | Tap callback | | `value` | `Widget?` | simple, navigation | Widget shown before the chevron | | `titleDescription` | `Widget?` | navigation | Text below title (iOS/macOS/Windows) | | `initialValue` | `bool?` | switchTile | Initial switch state | | `onToggle` | `Function(bool)?` | switchTile | Toggle callback; `null` disables the switch | | `activeSwitchColor` | `Color?` | switchTile | Active switch color override | ### `SettingsThemeData` | Field | Type | Description | |---|---|---| | `settingsListBackground` | `Color?` | Background of the whole list | | `settingsSectionBackground` | `Color?` | Background of each section card | | `dividerColor` | `Color?` | Divider color between tiles | | `tileHighlightColor` | `Color?` | Tile press highlight color | | `titleTextColor` | `Color?` | Section header text color | | `titleTextStyle` | `TextStyle?` | Section header text style | | `settingsTileTextColor` | `Color?` | Tile title text color | | `tileTextStyle` | `TextStyle?` | Tile title text style | | `tileDescriptionTextColor` | `Color?` | Description/value text color | | `tileDescriptionTextStyle` | `TextStyle?` | Description/value text style | | `leadingIconsColor` | `Color?` | Leading icon color | | `trailingTextColor` | `Color?` | Trailing text color | | `inactiveTitleColor` | `Color?` | Tile title color when disabled | | `inactiveSubtitleColor` | `Color?` | Description color when disabled | | `inactiveSwitchColor` | `Color?` | Switch color when disabled | --- ## License Apache License 2.0 — see the [LICENSE](LICENSE) file for details.

Mobile Development Web Components & Widgets
955 Github Stars
flutter_badges
Open Source

flutter_badges

[![Pub Version](https://img.shields.io/pub/v/badges?color=blueviolet)](https://pub.dev/packages/badges) [![popularity](https://img.shields.io/pub/popularity/badges?logo=dart)](https://pub.dev/packages/badges/score) [![likes](https://img.shields.io/pub/likes/badges?logo=dart)](https://pub.dev/packages/badges/score) ![building](https://github.com/yako-dev/flutter_badges/actions/workflows/code-quality-tests.yml/badge.svg) [![style: flutter lints](https://img.shields.io/badge/style-flutter__lints-blue)](https://pub.dev/packages/flutter_lints) [![Package of the week](https://img.shields.io/badge/Package%20of-the%20week-orange)](https://youtu.be/_CIHLJHVoN8) <p align="center"> <img src="https://github.com/yako-dev/flutter_badges/blob/master/images/readme_header.png?raw=true"> </p> <p align="center"> <img src="https://github.com/yako-dev/flutter_badges/blob/master/images/showcase.gif?raw=true" height="400px"> </p> ## Installing: In your pubspec.yaml ```yaml dependencies: badges: ^3.2.0 ``` Attention! In Flutter 3.7 the Badge widget was introduced in the Material library, so to escape the ambiguous imports you need to import the package like this: **Option 1: namespace prefix** ```dart import 'package:badges/badges.dart' as badges; ``` and then use the "badges.Badge" widget instead of the "Badge" widget. The same for all the classes from this package. **Option 2: hide Flutter's Material Badge widget** ```dart import 'package:badges/badges.dart'; import 'package:flutter/material.dart' hide Badge; ``` <br> <br> ## Basic Usage: ```dart badges.Badge( badgeContent: Text('3'), child: Icon(Icons.settings), ) ``` ## Advanced usage ```dart badges.Badge( position: badges.BadgePosition.topEnd(top: -10, end: -12), showBadge: true, ignorePointer: false, onTap: () {}, badgeContent: Icon(Icons.check, color: Colors.white, size: 10), badgeAnimation: badges.BadgeAnimation.rotation( animationDuration: Duration(seconds: 1), colorChangeAnimationDuration: Duration(seconds: 1), loopAnimation: false, curve: Curves.fastOutSlowIn, colorChangeAnimationCurve: Curves.easeInCubic, ), badgeStyle: badges.BadgeStyle( shape: badges.BadgeShape.square, badgeColor: Colors.blue, padding: EdgeInsets.all(5), borderRadius: BorderRadius.circular(4), borderSide: BorderSide(color: Colors.white, width: 2), borderGradient: badges.BadgeGradient.linear( colors: [Colors.red, Colors.black]), badgeGradient: badges.BadgeGradient.linear( colors: [Colors.blue, Colors.yellow], begin: Alignment.topCenter, end: Alignment.bottomCenter, ), elevation: 0, ), child: Text('Badge'), ), ``` <br> --- ## Animations: <p align="center"> <img src="https://github.com/yako-dev/flutter_badges/blob/master/images/badge_animations_preview.gif?raw=true" height="200px"> </p> From left to right:<br> 1) Color change animation 2) BadgeAnimation.slide 3) BadgeAnimation.fade 4) BadgeAnimation.scale 5) BadgeAnimation.size 6) BadgeAnimation.rotation <br> Also, loop animation is available, this will loop the animation until you stop it. <br><br> --- ## Shapes: <p align="center"> <img src="https://github.com/yako-dev/flutter_badges/blob/master/images/badge_shapes_preview.png?raw=true" height="120px"> </p> From left to right:<br> 1) BadgeShape.circle 2) BadgeShape.square 3) BadgeShape.twitter 4) BadgeShape.instagram <br><br> --- ## Migration from Badges 2: <p align="center"> <img src="https://github.com/yako-dev/flutter_badges/blob/master/images/migration_guide.png?raw=true"> </p> ## Check out other Yako packages: [Badges](https://pub.dev/packages/badges) [Settings UI](https://pub.dev/packages/settings_ui) [Status Alert](https://pub.dev/packages/status_alert) [Full Screen Menu](https://pub.dev/packages/full_screen_menu) [Diagonal decoration](https://pub.dev/packages/diagonal_decoration) [Yako Yheme Switch](https://pub.dev/packages/yako_theme_switch) and more to come!

JavaScript Libraries & Components Mobile Development
736 Github Stars
flutter-status-alert
Open Source

flutter-status-alert

# Status Alert for Flutter [![Pub Version](https://img.shields.io/pub/v/status_alert?color=blueviolet)](https://pub.dev/packages/status_alert) [![CI](https://github.com/yako-dev/flutter-status-alert/actions/workflows/ci.yml/badge.svg)](https://github.com/yako-dev/flutter-status-alert/actions/workflows/ci.yml) <p align="center"> <img src="https://raw.githubusercontent.com/yako-dev/flutter-status-alert/master/assets/status_alert_logo.png" height="400px"> </p> Display Apple system-like self-hiding status alerts. Well suited for notifying users without interrupting their flow. ## Installing ```yaml dependencies: status_alert: ^2.0.0 ``` ```dart import 'package:status_alert/status_alert.dart'; ``` ## Basic Usage ```dart StatusAlert.show( context, duration: Duration(seconds: 2), title: 'Subscribed', subtitle: 'You will be notified of new posts', configuration: IconConfiguration(icon: Icons.done), maxWidth: 260, ); ``` ## Parameters | Parameter | Type | Default | Description | |---|---|---|---| | `title` | `String?` | `null` | Main text | | `subtitle` | `String?` | `null` | Secondary text | | `configuration` | `PopupMediaConfiguration?` | `null` | Icon or custom widget | | `duration` | `Duration` | `1300ms` | How long the alert stays visible | | `backgroundColor` | `Color?` | Theme-based | Alert background | | `blurPower` | `double` | `2.0` | Background blur sigma | | `maxWidth` | `double?` | `null` | Max width on large screens | | `alignment` | `Alignment` | `center` | Alert position on screen | | `margin` | `EdgeInsets` | `all(40)` | Outer spacing | | `padding` | `EdgeInsets` | `all(30)` | Inner spacing | | `borderRadius` | `BorderRadius` | `circular(10)` | Corner radius | | `dismissOnBackgroundTap` | `bool` | `false` | Dismiss when background is tapped | | `onComplete` | `VoidCallback?` | `null` | Called after dismiss animation ends | | `titleOptions` | `StatusAlertTextConfiguration?` | `null` | Title text styling | | `subtitleOptions` | `StatusAlertTextConfiguration?` | `null` | Subtitle text styling | ## Media Configurations ### Icon ```dart StatusAlert.show( context, title: 'Done', configuration: IconConfiguration( icon: Icons.check_circle, color: Colors.green, size: 60, ), ); ``` ### Custom Widget (e.g. Rive animation) ```dart StatusAlert.show( context, title: 'Loading', configuration: WidgetConfiguration( widget: RiveAnimation.asset('assets/animation.riv'), ), ); ``` ## Programmatic Control ```dart // Show StatusAlert.show(context, title: 'Saved'); // Hide manually StatusAlert.hide(); // Check visibility if (StatusAlert.isVisible) { ... } ``` ## `onComplete` Callback Called after the alert finishes its dismiss animation: ```dart StatusAlert.show( context, title: 'Uploaded', onComplete: () => Navigator.push(context, ...), ); ``` ## Migration from 1.x | 1.x | 2.x | |---|---| | `FlareConfiguration` | Use `WidgetConfiguration` with a Rive widget | | `textScaleFactor` in `StatusAlertTextConfiguration` | Use `textScaler` | | Dart SDK `<3.0.0` | Requires Dart `>=3.0.0` | <br> ## Apple Podcasts vs Status Alert <img src="https://raw.githubusercontent.com/yako-dev/flutter-status-alert/master/assets/apple_podcasts_subscribed_animation.gif" height="500px"> <img src="https://raw.githubusercontent.com/yako-dev/flutter-status-alert/master/assets/status_alert_subscribed_animation.gif" height="500px"> ## License This project is licensed under the Apache License 2.0 — see the [LICENSE](LICENSE) file for details.

Mobile Development
130 Github Stars