Flutter主题共享插件shared_themes的使用

Flutter主题共享插件shared_themes的使用

shared_themes 是一个开源项目,它是由 Savannah Informatics Limited 开发并开源的众多共享库之一。

该插件用于 BeWell-ConsumerSladeAdvantage,主要负责定义和提供主题/样式指南。

安装说明

要将此插件作为库使用,您需要依赖它。请运行以下命令:

$ flutter pub add shared_themes

这将在您的包的 pubspec.yaml 文件中添加如下行(并隐式运行 dart pub get):

dependencies:
  shared_themes: ^0.2.0

另外,您可以检查编辑器是否支持 flutter pub get。请参阅您的编辑器文档以了解更多信息。

最后,导入该库:

import 'package:shared_themes/colors.dart';

使用

查看提供的示例以了解如何使用此插件。

Dart & Flutter版本

  • Dart 2: >= 2.12
  • Flutter: >= 2.0.0

开发与贡献

首先,感谢您花时间贡献!

请确保查阅详细的贡献指南 这里,并阅读我们的 行为准则

GPG签名: 作为贡献者,您需要签署您的提交。有关详细信息,请查阅 这里

许可证

此库在 LICENSE 文件中发布的 MIT 许可下分发。


示例代码

以下是使用 shared_themes 插件的示例代码:

import 'package:flutter/material.dart';
import 'package:shared_themes/colors.dart';
import 'package:shared_themes/spaces.dart';
import 'package:shared_themes/text_themes.dart';

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

class SharedThemesExample extends StatefulWidget {
  /// 这个小部件是您的应用程序的根。
  const SharedThemesExample({Key? key}) : super(key: key);

  [@override](/user/override)
  _SharedThemesExampleState createState() => _SharedThemesExampleState();
}

class _SharedThemesExampleState extends State<SharedThemesExample> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('调试日志示例'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text(
              '您已经按下了按钮很多次:',
            ),

            /// 使用 `spaces.dart` 中导出为双精度的大小
            const SizedBox(height: Sizing.size4),
            /// 使用 `text_themes.dart` 中定义的文本主题
            Text(
              '计数器值',
              style: TextThemes.normalSize20Text(),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {},
        tooltip: '递增',
        /// 使用 `colors.dart` 中导出的颜色常量
        backgroundColor: red,
        child: const Icon(Icons.add),
      ),
    );
  }
}

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

1 回复

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


shared_themes 是一个用于在 Flutter 应用中共享主题的插件。它允许你在应用中定义多个主题,并在不同的页面或组件之间轻松切换和应用这些主题。以下是如何使用 shared_themes 插件的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 shared_themes 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  shared_themes: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 定义主题

在你的应用中定义多个主题。你可以使用 ThemeData 来定义不同的主题:

import 'package:flutter/material.dart';

final ThemeData lightTheme = ThemeData(
  primarySwatch: Colors.blue,
  brightness: Brightness.light,
);

final ThemeData darkTheme = ThemeData(
  primarySwatch: Colors.blueGrey,
  brightness: Brightness.dark,
);

3. 使用 SharedTheme 包装应用

在你的 MaterialApp 中使用 SharedTheme 包装你的应用,以便在全局范围内共享主题:

import 'package:flutter/material.dart';
import 'package:shared_themes/shared_themes.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return SharedTheme(
      themes: {
        'light': lightTheme,
        'dark': darkTheme,
      },
      initialTheme: 'light',
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: SharedTheme.of(context).currentTheme,
        home: MyHomePage(),
      ),
    );
  }
}

4. 切换主题

你可以在应用的任何地方使用 SharedTheme.of(context).setTheme('dark') 来切换主题:

import 'package:flutter/material.dart';
import 'package:shared_themes/shared_themes.dart';

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Shared Themes Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Current Theme: ${SharedTheme.of(context).currentThemeName}',
            ),
            ElevatedButton(
              onPressed: () {
                SharedTheme.of(context).setTheme('dark');
              },
              child: Text('Switch to Dark Theme'),
            ),
            ElevatedButton(
              onPressed: () {
                SharedTheme.of(context).setTheme('light');
              },
              child: Text('Switch to Light Theme'),
            ),
          ],
        ),
      ),
    );
  }
}

5. 获取当前主题

你可以使用 SharedTheme.of(context).currentTheme 来获取当前的主题,并在需要的地方应用它:

ThemeData currentTheme = SharedTheme.of(context).currentTheme;

6. 监听主题变化

你可以使用 SharedTheme.of(context).addListener 来监听主题的变化,并在主题变化时更新 UI:

SharedTheme.of(context).addListener(() {
  // 主题变化时的操作
});

7. 移除监听器

如果你不再需要监听主题变化,记得移除监听器以避免内存泄漏:

SharedTheme.of(context).removeListener(yourListener);
回到顶部