Flutter主题定制插件elegant_theme的使用

Flutter主题定制插件elegant_theme的使用

特性

轻松管理您的应用程序主题
在提供的主题之间切换

开始使用

TODO: 列出先决条件并提供或指向如何开始使用该软件包的信息。

使用方法

import 'package:elegant_theme/elegant_theme.dart';
import 'package:flex_color_scheme/flex_color_scheme.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    /// 创建ElegantTheme
    return ElegantTheme(
      themes: [
        // 使用ThemeData
        ElegantThemeData.fromThemeData(name: "ThemeData", description: "My Elegant ThemeData", light: ThemeData.light(), dark: ThemeData.light()),

        // 使用ColorScheme
        ElegantThemeData.fromColorScheme(
          name: "Color Scheme",
          lightColorScheme: ColorScheme.fromSwatch(), // 设置为浅色主题
          darkColorScheme: ColorScheme.fromSwatch(), // 设置为深色主题
        ),

        // 使用Material3: 默认情况下useMaterial3为true
        ElegantThemeData.fromFlexScheme(name: "FlexScheme1", flexScheme: FlexScheme.aquaBlue),
        ElegantThemeData.fromFlexScheme(name: "FlexScheme2", flexScheme: FlexScheme.aquaBlue, useMaterial3: true),
      ],
      builder: (context, theme, themeMode) {
        /// 将ElegantTheme设置为您的应用主题
        return MaterialApp(
          title: 'Elegant Theme 示例',
          debugShowCheckedModeBanner: false,
          theme: theme,
          themeMode: themeMode,
          home: const MyHomePage(),
        );
      },
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("主页"),
        centerTitle: true,
      ),
      body: const Center(
        child: ElegantDemoPage(),
      ),
    );
  }
}

/// 示例
/// 更改到下一个主题
class ElegantDemoPage extends StatelessWidget {
  const ElegantDemoPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("更改主题页面"),
        centerTitle: true,
      ),
      body: Center(
        child: Wrap(
          children: [
            ElevatedButton(
              onPressed: () {
                /// 更改为下一个主题
                ElegantTheme.nextTheme(context);
              },
              child: const Text("下一个主题"),
            ),
            ElevatedButton(
              onPressed: () {
                /// 更改使用上下文
                context.nextTheme();
              },
              child: const Text("下一个主题"),
            ),
            ElevatedButton(
              onPressed: () {
                /// 设置为暗色主题模式
                ElegantTheme.switchToDarkThemeMode(context);
              },
              child: const Text("暗色主题"),
            ),
            ElevatedButton(
              onPressed: () {
                /// 更改使用上下文
                context.switchToDarkThemeMode();
              },
              child: const Text("暗色主题"),
            ),
            ElevatedButton(
              onPressed: () {
                /// 设置为亮色主题模式
                ElegantTheme.switchToLightThemeMode(context);
              },
              child: const Text("亮色主题"),
            ),
            ElevatedButton(
              onPressed: () {
                /// 更改使用上下文
                context.switchToLightThemeMode();
              },
              child: const Text("亮色主题"),
            ),
            ElevatedButton(
              onPressed: () {
                /// 更改为名为[FlexScheme1]的主题,如构造函数中声明
                /// ElegantThemeData.fromFlexScheme(name: "FlexScheme1", flexScheme: FlexScheme.aquaBlue),
                context.switchToThemeByName("FlexScheme1");
              },
              child: const Text("通过名称切换主题"),
            ),
          ],
        ),
      ),
    );
  }
}

使用BuildContext

// 现在可以调用
context.elegantTheme; // 返回ElegantTheme,等同于ElegantTheme.of(context)

context.elegantThemeData; // 返回ThemeData

context.elegantThemeMode; // 返回ThemeMode

context.nextTheme(); // 更改为列表中的下一个优雅主题

context.switchToThemeByName(String themeName)

context.switchThemeMode()

context.switchToSystemThemeMode()

context.switchToDarkThemeMode()

context.switchToLightThemeMode()

elegantThemeNameAndDescriptionRecordList

currentElegantThemeNameAndDescriptionRecord

更多关于Flutter主题定制插件elegant_theme的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter主题定制插件elegant_theme的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用elegant_theme插件进行主题定制的示例代码。elegant_theme插件允许你轻松地在Flutter应用中实现主题切换功能。

首先,确保你已经在pubspec.yaml文件中添加了elegant_theme依赖:

dependencies:
  flutter:
    sdk: flutter
  elegant_theme: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

接下来,让我们编写一些代码来展示如何使用elegant_theme进行主题定制。

1. 创建一个主题数据类

首先,定义一个包含应用主题数据的类:

import 'package:flutter/material.dart';

class MyThemes {
  static final ThemeData lightTheme = ThemeData(
    brightness: Brightness.light,
    primarySwatch: Colors.blue,
    scaffoldBackgroundColor: Colors.white,
    textTheme: TextTheme(
      bodyText1: TextStyle(color: Colors.black),
    ),
    // 添加其他需要的主题配置
  );

  static final ThemeData darkTheme = ThemeData(
    brightness: Brightness.dark,
    primarySwatch: Colors.blueGrey,
    scaffoldBackgroundColor: Colors.black,
    textTheme: TextTheme(
      bodyText1: TextStyle(color: Colors.white),
    ),
    // 添加其他需要的主题配置
  );
}

2. 使用ElegantTheme包装应用

接下来,在你的MaterialApp外使用ElegantTheme包装应用,并配置主题数据:

import 'package:flutter/material.dart';
import 'package:elegant_theme/elegant_theme.dart';
import 'my_themes.dart'; // 导入之前定义的主题数据类

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ElegantTheme(
      data: (brightness) {
        return brightness == Brightness.light
            ? MyThemes.lightTheme
            : MyThemes.darkTheme;
      },
      child: MaterialApp(
        title: 'Flutter Elegant Theme Demo',
        themeMode: ThemeMode.system, // 你可以根据需要设置为 ThemeMode.light, ThemeMode.dark 或 ThemeMode.system
        home: MyHomePage(),
      ),
    );
  }
}

3. 创建一个切换主题的按钮

在你的主页(或其他页面)上添加一个按钮来切换主题:

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:elegant_theme/elegant_theme.dart';

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final themeProvider = Provider.of<ElegantThemeProvider>(context);

    return Scaffold(
      appBar: AppBar(
        title: Text('Theme Switcher'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Current Theme: ${themeProvider.brightness == Brightness.light ? 'Light' : 'Dark'}',
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                themeProvider.setBrightness(
                  themeProvider.brightness == Brightness.light
                      ? Brightness.dark
                      : Brightness.light,
                );
              },
              child: Text('Switch Theme'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 确保你的应用使用了Provider

由于ElegantTheme依赖于Provider来管理状态,你需要在MaterialApp上方包裹一个MultiProvider

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:elegant_theme/elegant_theme.dart';
import 'my_themes.dart';

void main() {
  runApp(
    MultiProvider(
      providers: [
        Provider<ElegantThemeProvider>(
          create: (_) => ElegantThemeProvider(),
        ),
      ],
      child: MyApp(),
    ),
  );
}

以上代码展示了如何在Flutter应用中使用elegant_theme插件进行主题定制。通过定义不同的主题数据并在ElegantTheme中根据亮度返回相应的主题,你可以轻松实现应用内主题切换功能。

回到顶部