FlutterでAndroid/iOSアプリをダークテーマ化する方法についてまとめました。
【ダークテーマ化①】dynamic_themeライブラリを使用
dynamic_themeライブラリでは以下の機能があります。
– | 主な機能 |
---|---|
1 | 動的にbrightness(明暗/ライトテーマとダークテーマ)を切り替え |
2 | 切り替え設定をshared_preferencesに保存するので、アプリを一度閉じてもテーマ設定が引き継がれる |
参考 | ■Flutterでカラーテーマを動的に変更する |
■main.dart
import 'package:dynamic_theme/dynamic_theme.dart'; import 'package:dynamic_theme/theme_switcher_widgets.dart'; import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return DynamicTheme( defaultBrightness: Brightness.light, data: (brightness) => ThemeData( primarySwatch: Colors.indigo, brightness: brightness, ), themedWidgetBuilder: (context, theme) { return MaterialApp( title: 'サンプル', theme: theme, home: MyHomePage(title: 'サンプル'), ); }); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text("設定画面"), actions: <Widget>[ // action button IconButton( icon: Icon(Icons.settings), onPressed: () { showSetting(); }, ), ]), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ RaisedButton( onPressed: changeTheme, child: const Text("Change Theme"), ), ], ), ), ); } // 設定ダイアログを表示 void showSetting() { showDialog<void>( context: context, builder: (context) { return BrightnessSwitcherDialog( onSelectedTheme: (brightness) { DynamicTheme.of(context).setBrightness(brightness); }, ); }); } // テーマ変更 void changeTheme() { DynamicTheme.of(context).setBrightness( Theme.of(context).brightness == Brightness.dark ? Brightness.light : Brightness.dark); } }
■pubspec.yaml
name: app depreion: サンプルアプリです。 version: 1.0.0+1 environment: sdk: ">=2.1.0 <3.0.0" dependencies: flutter: sdk: flutter cupertino_icons: ^0.1.2 shared_preferences: ^0.5.3+4 dynamic_theme: ^1.0.1 dev_dependencies: flutter_test: sdk: flutter flutter: uses-material-design: true
- | 関連記事 |
---|---|
1 | ■【Flutter入門】iOS、Android、Windowsアプリ開発 |
コメント