Flutter自定義主題並切換保存

您好,歡迎關注我,本文章是關於 Flutter 的系列文,從簡單的 Flutter 介紹開始,一步步帶你瞭解進入 Flutter 的世界。你最好有一定的移動開發經驗,如果沒有也不要擔心,在我的專欄底部給我留言,我會盡我的能力給你解答。

上一篇,是教大家如何發佈自己的Flutter庫到公共庫。本篇是我關於Flutter的第八篇文章,相信通過之前的學習,大家對Flutter開發需要掌握的小技巧都以及瞭解過了。從這篇專欄開始,我會更加偏向於介紹實際使用Flutter開發會遇到的問題以及解決方法,以及一些小技巧。

之前介紹過Flutter是一個完善的庫,它自身提供了很多成熟的控件以及架構思路可以直接拿來用,本篇要介紹的主題也是如此。

現在越來越多的應用程序支持黑/白主題切換了,在Flutter中更是簡單,Flutter庫中提供了ThemeData.dark和Theme.light兩個默認主題。在main.dart初始化MaterialApp的時候直接設置進去即可

MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData.light(),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );

一.自定義主題

知道怎麼設定主題了,我們再來看如何自定義主題。通過copyWith原始主題樣式之後,修改一些需要自定義的顏色到主題裏。

ThemeData _buildDarkTheme() {
  const Color primaryColor = Color(0xFF0175c2);
  final ThemeData base = new ThemeData.dark();
  return base.copyWith(
    primaryColor: primaryColor,
    buttonColor: primaryColor,
    indicatorColor: Colors.white,
    accentColor: const Color(0xFF13B9FD),
    canvasColor: const Color(0xFF202124),
    scaffoldBackgroundColor: const Color(0xFF202124),
    backgroundColor: const Color(0xFF202124),
    errorColor: const Color(0xFFB00020),
    buttonTheme: const ButtonThemeData(
      textTheme: ButtonTextTheme.primary,
    ),
    textTheme: _buildTextTheme(base.textTheme),
    primaryTextTheme: _buildTextTheme(base.primaryTextTheme),
    accentTextTheme: _buildTextTheme(base.accentTextTheme),
  );
}

二.使用自定義主題

擁有了自定義主題之後,我們就可以在最初的MaterialApp初始化的時候設置使用它。在一些需要特殊使用指定顏色的地方可以直接獲取到theme對象後再使用。

Text(widget.options.theme.toString(), 
     style: TextStyle(
     color: widget.options.theme.data.textTheme.body1.color),),

當需要動態改變主題的時候,使用StatefulWidget的setState(() {})方法可以直接切換。

三.保存主題

我們希望主題更改後下次啓動App還能保留最後一次修改後的主題,那麼我們就要用到shared_preferences存起來。

void putAppString(String key, String value) async {
    (await SharedPreferences.getInstance()).setString(key, value);
  }

當App啓動的時候從shared_preferences取出來,然後調用Widget刷新即可。

static Future<String> getAppString(String key) async {
    return (await SharedPreferences.getInstance()).getString(key);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章