Flutter主题管理插件material_themes_manager的使用
Flutter主题管理插件material_themes_manager的使用
material_themes_manager简介
material_themes_manager 是一个用于在 Flutter 应用中轻松管理主题的插件。它允许开发者快速切换主题模式(如深色模式和浅色模式),并支持自定义主题配置。
使用步骤
1. 添加依赖
在 pubspec.yaml 文件中添加 material_themes_manager 依赖:
dependencies:
material_themes_manager: ^版本号
然后运行以下命令以安装依赖:
flutter pub get
2. 初始化插件
在 main.dart 文件中初始化 MaterialThemesManager 并将其作为 ChangeNotifierProvider 提供给整个应用。
示例代码
// ignore_for_file: depend_on_referenced_packages
import 'package:flutter/material.dart';
import 'package:material_themes_manager/material_themes_manager.dart';
import 'package:provider/provider.dart';
void main() {
runApp(
// Providers 是在 [MyApp] 外部定义的,以便测试时可以模拟 [MyApp]
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => MaterialThemesManager()),
],
child: MyApp(),
),
);
}
3. 配置应用主题
在 MaterialApp 中使用 MaterialThemesManager 来动态设置主题模式、主题和深色主题。
示例代码
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Consumer<MaterialThemesManager>(
builder: (context, themeManager, child) {
return MaterialApp(
title: "Theme Manager Demo",
home: MyHomePage(),
debugShowCheckedModeBanner: themeManager.isDarkModeEnabled,
themeMode: themeManager.getThemeMode(), // 自动根据用户偏好设置主题模式
theme: themeManager.getPrimaryLightTheme(), // 浅色主题
darkTheme: themeManager.getPrimaryDarkTheme(), // 深色主题
);
},
);
}
}
4. 实现主题切换功能
在应用中添加一个按钮,用于切换深色模式。
示例代码
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: context.watch<MaterialThemesManager>().getTheme(ThemeGroupType.POM).appBarTheme.backgroundColor,
title: const Text('Example'),
),
body: Center(
child: Stack(
children: <Widget>[
context.watch<MaterialThemesManager>().getBackgroundGradient(BackgroundGradientType.MAIN_BG), // 设置背景渐变
Center(
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text('是否启用深色模式:'),
DarkModeEnabledText(), // 显示当前深色模式状态
Container(
width: 150,
height: 150,
decoration: context.watch<MaterialThemesManager>().getBoxDecorationShadow(
shadowIntensity: ShadowIntensity.DARK, // 设置阴影强度
),
),
],
),
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () => context.read<MaterialThemesManager>().toggleDarkModeEnabled(), // 切换深色模式
tooltip: '切换深色模式',
child: const Icon(Icons.add),
),
);
}
}
5. 自定义主题组件
可以通过 MaterialThemesManager 提供的方法来自定义主题组件,例如背景渐变、阴影效果等。
示例代码
class DarkModeEnabledText extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Text(
'${context.watch<MaterialThemesManager>().isDarkModeEnabled.toString()}', // 动态显示深色模式状态
);
}
}
完整示例代码
以下是完整的示例代码,包含主题切换功能和自定义主题组件:
// ignore_for_file: depend_on_referenced_packages
import 'package:flutter/material.dart';
import 'package:material_themes_manager/material_themes_manager.dart';
import 'package:provider/provider.dart';
void main() {
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => MaterialThemesManager()),
],
child: MyApp(),
),
);
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Consumer<MaterialThemesManager>(
builder: (context, themeManager, child) {
return MaterialApp(
title: "Theme Manager Demo",
home: MyHomePage(),
debugShowCheckedModeBanner: themeManager.isDarkModeEnabled,
themeMode: themeManager.getThemeMode(),
theme: themeManager.getPrimaryLightTheme(),
darkTheme: themeManager.getPrimaryDarkTheme(),
);
},
);
}
}
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: context.watch<MaterialThemesManager>().getTheme(ThemeGroupType.POM).appBarTheme.backgroundColor,
title: const Text('Example'),
),
body: Center(
child: Stack(
children: <Widget>[
context.watch<MaterialThemesManager>().getBackgroundGradient(BackgroundGradientType.MAIN_BG),
Center(
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text('是否启用深色模式:'),
DarkModeEnabledText(),
Container(
width: 150,
height: 150,
decoration: context.watch<MaterialThemesManager>().getBoxDecorationShadow(
shadowIntensity: ShadowIntensity.DARK,
),
),
],
),
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () => context.read<MaterialThemesManager>().toggleDarkModeEnabled(),
tooltip: '切换深色模式',
child: const Icon(Icons.add),
),
);
}
}
class DarkModeEnabledText extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Text(
'${context.watch<MaterialThemesManager>().isDarkModeEnabled.toString()}',
);
}
}
更多关于Flutter主题管理插件material_themes_manager的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter主题管理插件material_themes_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
material_themes_manager 是一个用于管理 Flutter 应用中 Material 主题的插件。它可以帮助你轻松地切换和管理不同的主题,而不需要手动编写大量的代码。下面是如何使用 material_themes_manager 插件的步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml 文件中添加 material_themes_manager 插件的依赖:
dependencies:
flutter:
sdk: flutter
material_themes_manager: ^1.0.0 # 使用最新版本
然后运行 flutter pub get 来安装依赖。
2. 创建主题
你可以通过继承 MaterialTheme 类来创建自定义主题。例如:
import 'package:material_themes_manager/material_themes_manager.dart';
class MyCustomTheme extends MaterialTheme {
@override
ThemeData get lightTheme => ThemeData(
primaryColor: Colors.blue,
accentColor: Colors.blueAccent,
// 其他自定义样式
);
@override
ThemeData get darkTheme => ThemeData(
primaryColor: Colors.indigo,
accentColor: Colors.indigoAccent,
// 其他自定义样式
);
}
3. 初始化主题管理器
在你的 main.dart 文件中,初始化 MaterialThemesManager 并设置默认主题:
import 'package:flutter/material.dart';
import 'package:material_themes_manager/material_themes_manager.dart';
import 'my_custom_theme.dart'; // 导入你自定义的主题
void main() {
// 初始化主题管理器并设置默认主题
MaterialThemesManager.initialize(
defaultTheme: MyCustomTheme(),
);
runApp(MyApp());
}
4. 使用主题管理器
在你的应用中使用 MaterialThemesManager 来获取当前主题,并在需要时切换主题:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Theme Demo',
theme: MaterialThemesManager.instance.currentTheme.lightTheme,
darkTheme: MaterialThemesManager.instance.currentTheme.darkTheme,
themeMode: ThemeMode.system, // 可以根据系统设置自动切换主题
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@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: ${MaterialThemesManager.instance.currentTheme.runtimeType}',
),
ElevatedButton(
onPressed: () {
// 切换主题
MaterialThemesManager.instance.setTheme(MyCustomTheme());
},
child: Text('Switch Theme'),
),
],
),
),
);
}
}
5. 切换主题
你可以通过调用 MaterialThemesManager.instance.setTheme() 方法来切换主题,如上例所示。
6. 保存和加载主题
material_themes_manager 还提供了保存和加载主题的功能,你可以使用 MaterialThemesManager.instance.saveTheme() 和 MaterialThemesManager.instance.loadTheme() 来持久化主题设置。
// 保存当前主题
MaterialThemesManager.instance.saveTheme();
// 加载保存的主题
MaterialThemesManager.instance.loadTheme();

