Flutter动态主题切换插件easy_dynamic_theme的使用
Flutter动态主题切换插件easy_dynamic_theme的使用
Easy Dynamic Theme
这是一个新的、简单的Flutter主题处理方式。
它能自动获取操作系统定义的主题(动态),强制使用你偏好的主题(浅色/深色),并在设备上持久化你的选择。
Easy peasy, don’t you think? ;)
Demo
Getting Started
有关如何开始使用Flutter的帮助,请查看我们的在线文档,其中提供了教程、示例、移动开发指南和完整的API参考。
Minimum Requirements
- Dart SDK: >=2.12.0 <3.0.0
- Flutter: >= 1.20.0
Installation and Usage
熟悉Flutter后,可以通过在pubspec.yaml
文件中添加easy_dynamic_theme
来安装此包:
dependencies:
flutter:
sdk: flutter
easy_dynamic_theme: ^2.2.0
然后在控制台运行命令flutter packages get
。
Examples of Use
所有魔法都在你的main.dart
文件中发生:
import 'package:flutter/material.dart';
import 'package:easy_dynamic_theme/easy_dynamic_theme.dart';
import 'home.dart';
void main() async {
runApp(
EasyDynamicThemeWidget(
child: MyApp(),
),
);
}
class MyApp extends StatelessWidget {
final String title = 'EDT - Example';
@override
Widget build(BuildContext context) {
return MaterialApp(
title: title,
theme: ThemeData.light(),
darkTheme: ThemeData.dark(),
themeMode: EasyDynamicTheme.of(context).themeMode,
home: MyHomePage(title: title),
);
}
}
How to use predefined Themes
可以在themes.dart
文件中定义自己的主题:
import 'package:flutter/material.dart';
var lightThemeData = ThemeData(
primaryColor: Colors.blue,
textTheme: TextTheme(button: TextStyle(color: Colors.white70)),
brightness: Brightness.light,
accentColor: Colors.blue,
);
var darkThemeData = ThemeData(
primaryColor: Colors.blue,
textTheme: TextTheme(button: TextStyle(color: Colors.black54)),
brightness: Brightness.dark,
accentColor: Colors.blue,
);
然后在main.dart
文件中导入并使用这些主题:
import 'package:flutter/material.dart';
import 'package:easy_dynamic_theme/easy_dynamic_theme.dart';
import 'theme.dart';
import 'home.dart';
void main() async {
runApp(
EasyDynamicThemeWidget(
child: const MyApp(),
),
);
}
class MyApp extends StatelessWidget {
final String title = 'EDT - Example';
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: title,
debugShowCheckedModeBanner: false,
theme: lightThemeData,
darkTheme: darkThemeData,
themeMode: EasyDynamicTheme.of(context).themeMode,
home: MyHomePage(
title: title,
),
);
}
}
How to change the ThemeMode in your app
可以使用changeTheme
函数从应用程序的任何地方更改主题模式。该函数有两个可选参数:dynamic
和dark
。如果dynamic
的值为true
,则它优先于dark
。
EasyDynamicTheme.of(context).changeTheme();
How to get your app current theme
Current app ThemeMode
ThemeMode themeMode = EasyDynamicTheme.of(context).themeMode;
这将返回一个枚举值,对应于MaterialApp的ThemeMode,有以下几种可能:
system
:根据用户在系统设置中的选择使用浅色或深色主题。light
:始终使用浅色模式,不考虑系统偏好。dark
:始终使用深色模式(如果有),不考虑系统偏好。
Current Context brightness
Brightness brightness = Theme.of(context).brightness;
或者,如果你想判断你的widget是否基于深色模式,你可以这样做:
bool isDarkModeOn = Theme.of(context).brightness == Brightness.dark;
What about some out-of-the-box widgets?
目前我们有以下开箱即用的小部件:
- EasyDynamicThemeBtn:类似于
FlatButton
,根据应用当前主题显示图标,并允许你在它们之间切换。 - EasyDynamicThemeSwitch:基于上下文当前主题亮度的
Switch
小部件,允许你在浅色/深色主题之间切换。 - EasyDynamicThemeAutoSwitch:基于应用当前主题的
Switch
小部件,允许你优先(或不优先)操作系统定义的亮度。
以上是关于easy_dynamic_theme
插件的完整介绍和使用方法,希望对您有所帮助!
更多关于Flutter动态主题切换插件easy_dynamic_theme的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter动态主题切换插件easy_dynamic_theme的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用easy_dynamic_theme
插件来实现动态主题切换的示例代码。
首先,确保在你的pubspec.yaml
文件中添加easy_dynamic_theme
依赖:
dependencies:
flutter:
sdk: flutter
easy_dynamic_theme: ^latest_version # 请替换为最新的版本号
然后运行flutter pub get
来安装依赖。
接下来,我们需要设置我们的应用以支持动态主题切换。以下是一个完整的示例代码:
main.dart
import 'package:flutter/material.dart';
import 'package:easy_dynamic_theme/easy_dynamic_theme.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return EasyDynamicTheme(
defaultBrightness: Brightness.light, // 默认亮度
themes: {
// 定义你的主题
'light': ThemeData(
brightness: Brightness.light,
primarySwatch: Colors.blue,
backgroundColor: Colors.white,
// 其他主题配置
),
'dark': ThemeData(
brightness: Brightness.dark,
primarySwatch: Colors.blueGrey,
backgroundColor: Colors.black,
// 其他主题配置
),
},
initialTheme: 'light', // 初始主题
builder: (context, theme) {
return MaterialApp(
title: 'Flutter Dynamic Theme',
theme: theme,
home: HomeScreen(),
);
},
);
}
}
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
bool isDarkMode = false;
void toggleTheme() {
setState(() {
isDarkMode = !isDarkMode;
EasyDynamicTheme.of(context).setTheme(isDarkMode ? 'dark' : 'light');
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Dynamic Theme Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Current Theme: ${isDarkMode ? 'Dark' : 'Light'}',
style: TextStyle(fontSize: 24),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: toggleTheme,
child: Text('Toggle Theme'),
),
],
),
),
);
}
}
解释
- 依赖添加:在
pubspec.yaml
中添加easy_dynamic_theme
依赖。 - 应用入口:在
main.dart
中,使用EasyDynamicTheme
包裹你的MaterialApp
。EasyDynamicTheme
接受几个参数:defaultBrightness
:默认亮度。themes
:一个包含主题定义的Map。initialTheme
:初始主题。builder
:一个函数,它接收当前上下文和主题,并返回你的应用主体(通常是MaterialApp
)。
- 主题切换:在
HomeScreen
中,我们有一个toggleTheme
函数,用于在用户点击按钮时切换主题。使用EasyDynamicTheme.of(context).setTheme
来设置新的主题。
这个示例展示了如何使用easy_dynamic_theme
插件来实现动态主题切换。你可以根据需要进一步自定义和扩展这个示例。