Flutter主题管理插件flutter_theme_manager2的使用
Flutter主题管理插件flutter_theme_manager2的使用
简介
flutter_theme_manager2
是一个轻量且灵活的 Flutter 包,用于在 Flutter 应用程序中管理动态主题。该包支持浅色和深色主题切换、主题持久化以及实时主题更新,API 使用简单。
功能特性
- 动态主题切换:轻松切换浅色和深色主题。
- 主题持久化:自动保存并恢复用户的首选主题。
- 实时更新:只需少量配置即可通知应用主题更改。
- 预定义主题:提供可自定义的浅色和深色主题模板。
开始使用
1. 添加依赖
在 pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter_theme_manager2: ^1.0.0
然后运行 flutter pub get
安装依赖。
2. 初始化 ThemeManager
创建 ThemeManager
实例并在应用中使用它。
示例代码
import 'package:flutter/material.dart';
import 'package:flutter_theme_manager2/flutter_theme_manager2.dart';
void main() {
runApp(MyApp());
}
// 主应用类
class MyApp extends StatelessWidget {
final ThemeManager themeManager = ThemeManager();
@override
Widget build(BuildContext context) {
return AnimatedBuilder(
animation: themeManager,
builder: (context, _) {
return MaterialApp(
theme: themeManager.currentTheme, // 当前主题
home: HomePage(themeManager: themeManager), // 主页
);
},
);
}
}
3. 应用当前主题
使用 AnimatedBuilder
动态更新主题。
示例代码
class HomePage extends StatelessWidget {
final ThemeManager themeManager;
const HomePage({required this.themeManager});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter 主题管理器'),
),
body: Center(
child: ElevatedButton(
onPressed: themeManager.toggleTheme, // 切换主题
child: Text('切换主题'),
),
),
);
}
}
4. 切换主题
调用 toggleTheme()
方法可以在浅色和深色主题之间切换。
示例代码
// 切换主题
themeManager.toggleTheme();
5. 完整示例
以下是一个完整的示例代码,展示如何使用 flutter_theme_manager2
。
示例代码
import 'package:flutter/material.dart';
import 'package:flutter_theme_manager2/flutter_theme_manager2.dart';
void main() {
runApp(MyApp());
}
// 主应用类
class MyApp extends StatelessWidget {
final ThemeManager themeManager = ThemeManager();
@override
Widget build(BuildContext context) {
return AnimatedBuilder(
animation: themeManager,
builder: (context, _) {
return MaterialApp(
theme: themeManager.currentTheme, // 当前主题
home: HomePage(themeManager: themeManager), // 主页
);
},
);
}
}
// 主页类
class HomePage extends StatelessWidget {
final ThemeManager themeManager;
const HomePage({required this.themeManager});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter 主题管理器'),
),
body: Center(
child: ElevatedButton(
onPressed: themeManager.toggleTheme, // 切换主题
child: Text('切换主题'),
),
),
);
}
}
API 文档
ThemeManager 类
ThemeManager
是管理主题的核心类。
属性
currentTheme
: 获取当前活动的主题(浅色或深色)。
方法
toggleTheme()
: 在浅色和深色主题之间切换。
示例代码
ThemeManager themeManager = ThemeManager();
themeManager.toggleTheme(); // 切换主题
ThemeStorage 类
ThemeStorage
负责主题偏好的持久化。
方法
saveThemeMode(bool isDarkMode)
: 保存用户的主题偏好。getThemeMode()
: 获取保存的主题偏好。
示例代码
ThemeStorage storage = ThemeStorage();
storage.saveThemeMode(true); // 保存深色模式
bool isDarkMode = storage.getThemeMode(); // 获取主题偏好
更多关于Flutter主题管理插件flutter_theme_manager2的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter主题管理插件flutter_theme_manager2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_theme_manager2
是一个用于管理 Flutter 应用主题的插件。它允许你动态地切换应用的主题,支持亮色和暗色模式,并且可以自定义主题。以下是如何使用 flutter_theme_manager2
的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 flutter_theme_manager2
依赖:
dependencies:
flutter:
sdk: flutter
flutter_theme_manager2: ^1.0.0
然后运行 flutter pub get
来安装依赖。
2. 初始化主题管理器
在你的 main.dart
文件中,初始化 ThemeManager
并设置默认主题:
import 'package:flutter/material.dart';
import 'package:flutter_theme_manager2/flutter_theme_manager2.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return ThemeManager(
defaultTheme: ThemeData.light(), // 默认亮色主题
child: MaterialApp(
title: 'Flutter Theme Manager Demo',
theme: ThemeManager.of(context).theme, // 使用 ThemeManager 管理的主题
home: MyHomePage(),
),
);
}
}
3. 创建主题切换界面
在你的 MyHomePage
中,你可以创建一个按钮来切换主题:
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Theme Manager Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Current Theme:',
style: Theme.of(context).textTheme.headline4,
),
ElevatedButton(
onPressed: () {
// 切换主题
ThemeManager.of(context).toggleTheme();
},
child: Text('Toggle Theme'),
),
],
),
),
);
}
}
4. 自定义主题
你可以通过 ThemeManager
设置自定义主题。例如,你可以在 main.dart
中定义多个主题,并在需要时切换它们:
final ThemeData customLightTheme = ThemeData(
primarySwatch: Colors.blue,
brightness: Brightness.light,
);
final ThemeData customDarkTheme = ThemeData(
primarySwatch: Colors.red,
brightness: Brightness.dark,
);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return ThemeManager(
defaultTheme: customLightTheme, // 默认自定义亮色主题
child: MaterialApp(
title: 'Flutter Theme Manager Demo',
theme: ThemeManager.of(context).theme,
home: MyHomePage(),
),
);
}
}
然后在 MyHomePage
中,你可以通过 ThemeManager.of(context).setTheme()
方法来切换自定义主题:
ElevatedButton(
onPressed: () {
ThemeManager.of(context).setTheme(customDarkTheme);
},
child: Text('Set Dark Theme'),
),
ElevatedButton(
onPressed: () {
ThemeManager.of(context).setTheme(customLightTheme);
},
child: Text('Set Light Theme'),
),
5. 持久化主题
如果你希望在应用重启后保持用户选择的主题,你可以使用 SharedPreferences
来持久化主题设置。以下是一个简单的示例:
import 'package:shared_preferences/shared_preferences.dart';
class ThemeManager {
static const String _themeKey = 'theme';
ThemeData _theme;
final SharedPreferences _prefs;
ThemeManager(this._theme, this._prefs);
ThemeData get theme => _theme;
void setTheme(ThemeData theme) {
_theme = theme;
_prefs.setString(_themeKey, theme == customLightTheme ? 'light' : 'dark');
}
void toggleTheme() {
_theme = _theme == customLightTheme ? customDarkTheme : customLightTheme;
_prefs.setString(_themeKey, _theme == customLightTheme ? 'light' : 'dark');
}
static Future<ThemeManager> load() async {
final prefs = await SharedPreferences.getInstance();
final theme = prefs.getString(_themeKey) == 'dark' ? customDarkTheme : customLightTheme;
return ThemeManager(theme, prefs);
}
}
然后在 main.dart
中,你可以异步加载主题:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final themeManager = await ThemeManager.load();
runApp(MyApp(themeManager: themeManager));
}
class MyApp extends StatelessWidget {
final ThemeManager themeManager;
MyApp({required this.themeManager});
[@override](/user/override)
Widget build(BuildContext context) {
return ThemeManager(
defaultTheme: themeManager.theme,
child: MaterialApp(
title: 'Flutter Theme Manager Demo',
theme: ThemeManager.of(context).theme,
home: MyHomePage(),
),
);
}
}