Flutter日夜主题切换插件day_night_switcher的使用
Flutter日夜主题切换插件day_night_switcher的使用
DayNightSwitcher
是一个用纯 Dart 编写的简单日夜模式切换小部件。它允许你快速为用户提供一个漂亮的暗模式切换器。
如何使用?
使用这个插件非常直接。你有两个小部件:DayNightSwitcher
和 DayNightSwitcherIcon
。
DayNightSwitcher 示例代码:
DayNightSwitcher(
isDarkModeEnabled: isDarkModeEnabled,
onStateChanged: (isDarkModeEnabled) {
setState(() {
this.isDarkModeEnabled = isDarkModeEnabled;
});
},
),
DayNightSwitcherIcon 示例代码:
DayNightSwitcherIcon(
isDarkModeEnabled: isDarkModeEnabled,
onStateChanged: (isDarkModeEnabled) {
setState(() {
this.isDarkModeEnabled = isDarkModeEnabled;
});
},
),
示例代码
以下是一个完整的示例代码,展示了如何在 Flutter 应用程序中使用 DayNightSwitcher
和 DayNightSwitcherIcon
。
import 'package:day_night_switcher/day_night_switcher.dart';
import 'package:flutter/material.dart';
/// 主应用入口点。
void main() => runApp(_DayNightSwitcherExample());
/// 主应用类。
class _DayNightSwitcherExample extends StatefulWidget {
[@override](/user/override)
State<StatefulWidget> createState() => _DayNightSwitcherExampleState();
}
/// 主应用状态类。
class _DayNightSwitcherExampleState extends State<_DayNightSwitcherExample> {
/// 是否启用暗模式。
bool isDarkModeEnabled = false;
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: '日夜切换示例',
theme: ThemeData.light(),
darkTheme: ThemeData.dark().copyWith(
appBarTheme: AppBarTheme(color: const Color(0xFF253341)),
scaffoldBackgroundColor: const Color(0xFF15202B),
),
themeMode: isDarkModeEnabled ? ThemeMode.dark : ThemeMode.light,
home: Scaffold(
appBar: AppBar(title: Text('日夜切换示例')),
body: SizedBox.expand(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [
// 使用 DayNightSwitcher 小部件
DayNightSwitcher(
isDarkModeEnabled: isDarkModeEnabled,
onStateChanged: onStateChanged,
),
// 添加一些间距
Padding(
padding: EdgeInsets.only(top: 2),
child: // 使用 DayNightSwitcherIcon 小部件
DayNightSwitcherIcon(
isDarkModeEnabled: isDarkModeEnabled,
onStateChanged: onStateChanged,
),
),
// 显示当前是否启用暗模式
Padding(
padding: EdgeInsets.only(top: 10),
child: Text('暗模式是 ' +
(isDarkModeEnabled ? '启用' : '禁用') +
'.'),
),
],
),
),
),
);
}
/// 当状态(日/夜)发生变化时调用的方法。
void onStateChanged(bool isDarkModeEnabled) {
setState(() {
this.isDarkModeEnabled = isDarkModeEnabled;
});
}
}
更多关于Flutter日夜主题切换插件day_night_switcher的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter日夜主题切换插件day_night_switcher的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用day_night_switcher
插件来实现日夜主题切换的代码示例。这个插件可以帮助你轻松地在应用中实现日夜模式切换功能。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加day_night_switcher
的依赖:
dependencies:
flutter:
sdk: flutter
day_night_switcher: ^latest_version # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置主题
在你的lib
目录下,打开main.dart
文件,并配置主题数据。这里我们将创建两个主题:一个是明亮主题(日间模式),另一个是黑暗主题(夜间模式)。
import 'package:flutter/material.dart';
import 'package:day_night_switcher/day_night_switcher.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return DayNightSwitcher(
builder: (context, themeMode) {
return MaterialApp(
title: 'Flutter Day Night Switcher Demo',
theme: ThemeData(
brightness: themeMode == ThemeMode.light ? Brightness.light : Brightness.dark,
primarySwatch: Colors.blue,
// 其他日间主题配置
),
darkTheme: ThemeData(
brightness: Brightness.dark,
primarySwatch: Colors.indigo,
// 其他夜间主题配置
),
themeMode: themeMode,
home: HomeScreen(),
);
},
initialThemeMode: ThemeMode.system, // 可以使用 ThemeMode.light 或 ThemeMode.dark 来设置初始主题
);
}
}
3. 创建切换按钮
接下来,在你的HomeScreen
中创建一个按钮来切换主题。
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:day_night_switcher/day_night_switcher.dart';
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final themeMode = Provider.of<ThemeMode>(context);
return Scaffold(
appBar: AppBar(
title: Text('Day Night Switcher Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Current Theme Mode: ${themeMode == ThemeMode.light ? 'Light' : 'Dark'}',
style: TextStyle(fontSize: 24),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
DayNightSwitcher.of(context).setThemeMode(
themeMode == ThemeMode.light ? ThemeMode.dark : ThemeMode.light,
);
},
child: Text('Switch Theme'),
),
],
),
),
);
}
}
4. 使用Provider管理状态(可选)
为了简化状态管理,你可以使用provider
包来管理主题模式的状态。首先,在pubspec.yaml
中添加provider
依赖:
dependencies:
provider: ^latest_version # 请替换为最新版本号
然后,在你的项目中创建一个theme_provider.dart
文件来管理主题模式:
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:day_night_switcher/day_night_switcher.dart';
class ThemeProvider with ChangeNotifier {
ThemeMode _themeMode = ThemeMode.system;
ThemeMode get themeMode => _themeMode;
setThemeMode(ThemeMode mode) {
_themeMode = mode;
notifyListeners();
}
}
// 在MyApp中提供ThemeProvider
void main() {
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => ThemeProvider()),
],
child: MyApp(),
),
);
}
并在HomeScreen
中使用Provider.of<ThemeMode>(context)
来获取当前主题模式。
完整代码结构
pubspec.yaml
main.dart
theme_provider.dart
(如果需要Provider管理状态)
这样,你就可以在你的Flutter应用中实现日夜主题切换功能了。希望这个示例对你有帮助!