Flutter主题管理插件at_theme_flutter的使用
Flutter主题管理插件at_theme_flutter的使用
at_theme_flutter
包为Flutter开发者提供了在他们的atPlatform应用中添加主题切换功能的能力。该开源包用Dart编写,支持Flutter,并遵循atPlatform的去中心化边缘计算模型。以下是其主要特性:
- 通过个人数据存储实现数据访问的加密控制
- 不需要应用程序后端
- 端到端加密,只有数据所有者拥有密钥
- 私有且无监控的连接
- 能够选择并切换主题
我们称之为“翻转互联网”,即赋予人们对其数据访问的控制权。更多详情可参阅 atPlatform概述。
开始使用
1. 快速开始 - 使用at_app
生成一个骨架应用
该包包含了一个在 Example
目录下的工作示例应用,你可以使用 at_app create
命令在四个步骤内创建一个个性化的副本。
$ flutter pub global activate at_app
$ at_app create --sample=<package ID> <app name>
$ cd <app name>
$ flutter run
注意:
- 只需运行一次
flutter pub global activate
- 对于Windows系统,使用
at_app.bat
2. 从GitHub克隆
你可以自由地从 GitHub仓库 克隆源码。其中的示例代码与 at_app
中使用的模板相同。
$ git clone https://github.com/atsign-foundation/at_widgets.git
3. 手动将包添加到项目中
有关如何手动将此包添加到项目的说明可以在 pub.dev 上找到。
如何工作
该包提供了一个UI屏幕来展示主题选择、预览和应用。它还支持自定义主题数据。
设置
主题服务需要初始化。必须指定根域。
initializeThemeService(rootDomain: AtEnv.rootDomain);
使用
获取保存的主题
AppTheme? appTheme = await getThemeData();
使用自定义主题
var appTheme = AppTheme.from();
var result = await setAppTheme(appTheme);
开源使用和贡献
这是一个开源代码,所以你可以自由使用它,提出修改建议或增强请求,甚至可以创建自己的版本。详细的指导请参阅 CONTRIBUTING.md。
完整示例
以下是一个完整的示例,展示了如何在Flutter应用中使用at_theme_flutter
插件。
import 'package:flutter/material.dart';
import 'package:at_theme_flutter/at_theme_flutter.dart';
void main() async {
// 初始化主题服务
initializeThemeService(rootDomain: AtEnv.rootDomain);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Theme Demo',
theme: ThemeData.light(),
darkTheme: ThemeData.dark(),
home: MyHomePage(title: 'Flutter Theme Switcher'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
AppTheme? _currentTheme;
[@override](/user/override)
void initState() {
super.initState();
// 获取当前主题
getThemeData().then((value) {
setState(() {
_currentTheme = value;
});
});
}
void _changeTheme(AppTheme theme) async {
// 切换主题
var result = await setAppTheme(theme);
if (result) {
setState(() {
_currentTheme = theme;
});
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'Current Theme: ${_currentTheme?.name ?? "None"}',
style: Theme.of(context).textTheme.headline4,
),
ElevatedButton(
onPressed: () {
// 切换到浅色主题
_changeTheme(AppTheme.light());
},
child: Text('Switch to Light Theme'),
),
ElevatedButton(
onPressed: () {
// 切换到深色主题
_changeTheme(AppTheme.dark());
},
child: Text('Switch to Dark Theme'),
),
],
),
),
);
}
}
更多关于Flutter主题管理插件at_theme_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter主题管理插件at_theme_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 at_theme_flutter
插件在 Flutter 中管理主题的代码示例。at_theme_flutter
是一个强大的主题管理插件,它允许开发者在应用内动态地切换主题。
首先,确保你的 pubspec.yaml
文件中已经添加了 at_theme_flutter
依赖:
dependencies:
flutter:
sdk: flutter
at_theme_flutter: ^最新版本号 # 请替换为实际的最新版本号
然后,运行 flutter pub get
来获取依赖。
接下来,在你的 Flutter 应用中实现主题管理。以下是一个简单的示例,展示如何设置和使用 at_theme_flutter
。
1. 创建主题数据
首先,定义一些主题数据。你可以在应用的某个地方(例如 main.dart
)中定义这些主题:
import 'package:flutter/material.dart';
import 'package:at_theme_flutter/at_theme_flutter.dart';
final List<ThemeData> themes = [
ThemeData(
brightness: Brightness.light,
primarySwatch: Colors.blue,
accentColor: Colors.amber,
backgroundColor: Colors.white,
scaffoldBackgroundColor: Colors.white,
textTheme: TextTheme(
bodyText1: TextStyle(color: Colors.black),
// 其他文本样式
),
),
ThemeData(
brightness: Brightness.dark,
primarySwatch: Colors.deepPurple,
accentColor: Colors.lime,
backgroundColor: Colors.black,
scaffoldBackgroundColor: Colors.black,
textTheme: TextTheme(
bodyText1: TextStyle(color: Colors.white),
// 其他文本样式
),
),
];
2. 使用 AtTheme
包裹你的应用
在 main.dart
中,使用 AtTheme
包裹你的 MaterialApp,并配置主题数据:
import 'package:flutter/material.dart';
import 'package:at_theme_flutter/at_theme_flutter.dart';
void main() {
runApp(AtTheme(
data: (brightness) {
// 根据亮度返回相应的主题
return brightness == Brightness.light ? themes[0] : themes[1];
},
initialBrightness: Brightness.light, // 初始亮度
child: MyApp(),
));
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Theme Management',
themeMode: AtTheme.of(context).brightness == Brightness.light
? ThemeMode.light
: ThemeMode.dark, // 根据 AtTheme 的亮度设置主题模式
home: HomeScreen(),
);
}
}
3. 在应用中切换主题
在你的 HomeScreen
或其他页面中,添加一个按钮来切换主题:
import 'package:flutter/material.dart';
import 'package:at_theme_flutter/at_theme_flutter.dart';
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Theme Switcher'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Current Theme: ${AtTheme.of(context).brightness == Brightness.light ? 'Light' : 'Dark'}',
style: TextStyle(fontSize: 24),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
AtTheme.of(context).setBrightness(
AtTheme.of(context).brightness == Brightness.light
? Brightness.dark
: Brightness.light,
);
},
child: Text('Switch Theme'),
),
],
),
),
);
}
}
这个示例展示了如何使用 at_theme_flutter
插件在 Flutter 应用中管理和切换主题。你可以根据需要进一步自定义和扩展这些主题。