v1.1.2light_dark_theme_toggle
Um widget Flutter animado e personalizável para alternar entre modos claro e escuro com um interruptor visualmente atraente.
O widget LightDarkThemeToggle é um interruptor de alternância de tema claro/escuro personalizável e animado para aplicativos Flutter. Ele oferece uma maneira visualmente atraente para os usuários alternarem entre os modos claro e escuro no seu aplicativo.
{"sdk":"flutter"}{"sdk":"flutter"}^5.0.0Texto original em inglês. Visite o GitHub para a versão atual.
The LightDarkThemeToggle widget is a customizable and animated light/dark theme toggle switch for
Flutter apps. It provides a visually appealing way for users to switch between light and dark modes
in your app.
CustomPainter for efficient rendering and better performance.LightDarkThemeToggle Demo
pubspec.yaml:dependencies:
light_dark_theme_toggle: ^1.1.2
import 'package:light_dark_theme_toggle/light_dark_theme_toggle.dart';
Here is an example of how to use the LightDarkThemeToggle widget:
import 'package:flutter/material.dart';
import 'package:light_dark_theme_toggle/light_dark_theme_toggle.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.light(),
darkTheme: ThemeData.dark(),
themeMode: ThemeMode.system,
home: Scaffold(
appBar: AppBar(title: Text('Light/Dark Theme Toggle')),
body: Center(
child: LightDarkThemeToggle(
value: false,
// Initial value (false for dark, true for light)
onChanged: (bool value) {
// Handle theme change here.
},
size: 48.0,
themeIconType: ThemeIconType.expand,
color: Colors.orange,
tooltip: 'Toggle Theme',
duration: Duration(milliseconds: 500),
curve: Curves.easeInOut,
),
),
),
);
}
}
| Property | Type | Default | Description |
|---|---|---|---|
value |
bool |
Required | Determines whether the toggle is in light (true) or dark (false) mode. |
onChanged |
ValueChanged<bool> |
Required | Callback when the toggle is pressed. |
themeIconType |
ThemeIconType |
ThemeIconType.expand |
Defines the style of the icon. |
color |
Color? |
ThemeData.colorScheme.onSurface |
Color of the icon. |
hoverColor |
Color? |
ThemeData.hoverColor |
Hover Color of the toggle. |
highlightColor |
Color? |
ThemeData.highlightColor |
Highlight Color of the toggle in pressed down state. |
focusColor |
Color? |
ThemeData.focusColor |
Focus Color of the toggle when it has input focus. |
splashColor |
Color? |
ThemeData.splashColor |
Splash Color of the toggle. |
tooltip |
String? |
null |
Tooltip displayed on long press or hover. |
padding |
EdgeInsetsGeometry? |
null |
Padding around the icon. |
size |
double? |
IconTheme.size ?? 24.0 |
Size of the icon. |
duration |
Duration |
Duration(milliseconds: 500) |
Duration of the animation. |
reverseDuration |
Duration |
Duration(milliseconds: 500) |
Duration of the reverse animation. |
curve |
Curve |
Curves.easeOutBack |
Animation curve for the forward animation. |
reverseCurve |
Curve |
Curves.easeOutBack |
Animation curve for the reverse animation. |
The widget supports the following icon types via the ThemeIconType enum:
To use an icon type, pass it to the themeIconType property. For example:
LightDarkThemeToggle(
themeIconType:ThemeIconType.eclipse,
...
)
You can adjust the animation by changing:
duration: Duration of the forward animation.reverseDuration: Duration of the reverse animation.curve: Curve for forward animation.reverseCurve: Curve for reverse animation.You can customize the icon's:
size: Adjust the size of the toggle.padding: Add padding around the icon.tooltip: Set a tooltip message for accessibility.color: Change the icon's color.hoverColor: Change the toggle's color in hovering state.focusColor: Change the toggle's color when it has the input focus.highlightColor: Change the toggle's color in pressed down state.splashColor: Change the toggle's splash color.This project is licensed under the MIT License.
Contributions, issues, and feature requests are welcome! Feel free to check out the issues page.
This package is inspired by toggles.dev created
by Alfie Jones.
Special thanks for providing inspiration and ideas that helped shape this package.