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

1 回复

更多关于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(),
      ),
    );
  }
}
回到顶部