国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

flutter開(kāi)發(fā)實(shí)戰(zhàn)-Theme主題切換

這篇具有很好參考價(jià)值的文章主要介紹了flutter開(kāi)發(fā)實(shí)戰(zhàn)-Theme主題切換。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

flutter開(kāi)發(fā)實(shí)戰(zhàn)-Theme主題切換

之前做的應(yīng)用中有用到Theme主題切換,一直沒(méi)有整理,這里整理一下。
使用的是Android studio

一、效果圖

flutter開(kāi)發(fā)實(shí)戰(zhàn)-Theme主題切換,flutter開(kāi)發(fā)實(shí)戰(zhàn),flutter,移動(dòng)開(kāi)發(fā),flutter,主題切換,theme

flutter開(kāi)發(fā)實(shí)戰(zhàn)-Theme主題切換,flutter開(kāi)發(fā)實(shí)戰(zhàn),flutter,移動(dòng)開(kāi)發(fā),flutter,主題切換,theme

二、創(chuàng)建ThemeModel

// 提供五套可選主題色

const _themes = <MaterialColor>[
  Colors.blue,
  Colors.cyan,
  Colors.teal,
  Colors.green,
  Colors.red,
];

class Global {
  static late SharedPreferences _prefs;
  static Session session = Session();

  // 可選的主題列表
  static List<MaterialColor> get themes => _themes;

  // 是否為release版
  static bool get isRelease => bool.fromEnvironment("dart.vm.product");

  //初始化全局信息,會(huì)在APP啟動(dòng)時(shí)執(zhí)行
  static Future init() async {
    WidgetsFlutterBinding.ensureInitialized();
    _prefs = await SharedPreferences.getInstance();
    var _profile = _prefs.getString("session");
    if (_profile != null) {
      try {
        session = Session.fromJson(jsonDecode(_profile));
      } catch (e) {
        LoggerManager().debug("e:${e.toString()}");
      }
    } else {
      // 默認(rèn)主題索引為0,代表藍(lán)色
      session = Session()..theme = 0;
    }
  }

  // 持久化Profile信息
  static saveProfile() {
    _prefs.setString("session", jsonEncode(session.toJson()));
  }
}
class Session {
  int? _theme;
}
// 共享狀態(tài)
class SessionChangeNotifier with ChangeNotifier {
  Session get session => Global.session;

  String? get getToken => Global.session.token;

  
  void notifyListeners() {
    // 保存Profile變更
    Global.saveProfile();

    //通知依賴的Widget更新
    super.notifyListeners();
  }
}
class ThemeModel extends SessionChangeNotifier {
  // 獲取當(dāng)前主題,如果為設(shè)置主題,則默認(rèn)使用藍(lán)色主題
  MaterialColor get theme => Global.themes
      .firstWhere((e) => e.value == session.theme, orElse: () => Colors.blue);

  // 主題改變后,通知其依賴項(xiàng),新主題會(huì)立即生效
  set theme(MaterialColor color) {
    if (color != theme) {
      session.theme = color[500]?.value;
      notifyListeners();
    }
  }
}

在Main.dart入口的MaterialApp

MaterialApp(
      theme: ThemeData(
        fontFamily: "PingFang SC",
        primarySwatch: themeModel.theme,
      ),
 ...

三、主題切換頁(yè)面

當(dāng)主題切換后,Provider會(huì)通知到對(duì)應(yīng)的頁(yè)面Build,就會(huì)顯示對(duì)應(yīng)的主題。

主題切換頁(yè)面

class ThemePage extends StatefulWidget {
  const ThemePage({Key? key, this.arguments}) : super(key: key);

  final Object? arguments;

  
  State<ThemePage> createState() => _ThemePageState();
}

class _ThemePageState extends State<ThemePage> {
  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: MyAppBar(
        onPressed: () {
          navigatorBack();
        },
        label: S.of(context).theme,
        isBackButton: true,
      ),
      body: ListView(
        //顯示主題色塊
        children: Global.themes.map<Widget>((e) {
          return GestureDetector(
            child: Padding(
              padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 16),
              child: Container(
                color: e,
                height: 40,
              ),
            ),
            onTap: () {
              //主題更新后,MaterialApp會(huì)重新build
              Provider.of<ThemeModel>(context, listen: false).theme = e;
            },
          );
        }).toList(),
      ),
    );
  }

  void navigatorBack() {
    NavigatorPageRouter.pop();
  }
}

四、小結(jié)

flutter開(kāi)發(fā)實(shí)戰(zhàn)-Theme主題切換,使用的是Android studio,使用Provider通知切換主題。

學(xué)習(xí)記錄,每天不停進(jìn)步。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-559008.html

到了這里,關(guān)于flutter開(kāi)發(fā)實(shí)戰(zhàn)-Theme主題切換的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 博客搭建教程Github+Hexo+hexo-theme-matery主題

    博客搭建教程Github+Hexo+hexo-theme-matery主題

    前情提要 寫這篇文的目的 記錄自己搭建過(guò)程,便于以后快速?gòu)?fù)用 總結(jié)經(jīng)驗(yàn)和自己踩的坑,給其他小伙伴一些參考(由于是搭建后寫的,所以沒(méi)有參考圖片) 介紹 初步效果參考我的博客:hermia的個(gè)人博客 本博客基于Hexo框架,使用github托管 使用自定義域名: hermiablog.com hexo主題

    2024年02月19日
    瀏覽(31)
  • 【Android-JetpackCompose】11、主題設(shè)置:Theme、Colors、Typography、Shapes

    【Android-JetpackCompose】11、主題設(shè)置:Theme、Colors、Typography、Shapes

    首先,從下面的倉(cāng)庫(kù)克隆代碼: Material Design 定義了一些從語(yǔ)義上命名的顏色: primary 是主要品牌顏色,secondary 用于提供強(qiáng)調(diào)色。您可以為形成對(duì)比的區(qū)域提供顏色更深/更淺的變體。background 和 surface 這兩種顏色用于那些容納在概念上駐留在應(yīng)用“Surface”的組件的容器。此外

    2024年02月05日
    瀏覽(32)
  • flutter 五點(diǎn)一點(diǎn)一:MaterialApp Theme

    flutter 五點(diǎn)一點(diǎn)一:MaterialApp Theme

    platform 目標(biāo)平臺(tái) 貌似表示的是當(dāng)前Theme 的目標(biāo)平臺(tái) 枚舉值 例如 我將 platform 設(shè)置為ios 然后運(yùn)行到 android模擬器上 點(diǎn)擊跳轉(zhuǎn)頁(yè)面動(dòng)畫 為默認(rèn)動(dòng)畫 若改成 android 則動(dòng)畫效果如下 那么問(wèn)題來(lái)了 不同平臺(tái) 如何顯示不同效果? Platform 可獲取現(xiàn)在是那個(gè)平臺(tái) 可根據(jù)不通的平臺(tái)設(shè)置不

    2024年01月19日
    瀏覽(20)
  • vue2實(shí)現(xiàn)自定義主題webpack-theme-color-replacer

    vue2實(shí)現(xiàn)自定義主題webpack-theme-color-replacer

    需求:根據(jù)element的自定義主題色,之后改變element的全局所有顏色,解決頁(yè)面刷新后主題色失效問(wèn)題,這個(gè)需要把顏色存入到瀏覽器的存儲(chǔ)中,如果換個(gè)瀏覽器就得重新選擇了哈,如果需要在不同的瀏覽器保持一致的主題,需要跟后端溝通 之前還寫過(guò)一個(gè)簡(jiǎn)單的,有需要的可

    2024年02月07日
    瀏覽(31)
  • 【1】Pycharm 主題設(shè)置推薦Material Theme UI以及編輯環(huán)境配置(字體大小和顏色)

    【1】Pycharm 主題設(shè)置推薦Material Theme UI以及編輯環(huán)境配置(字體大小和顏色)

    File - Settings - Plugins插件,搜索Material Theme UI 安裝。 安裝后重啟pycharm設(shè)置自己喜歡的首選主題。 個(gè)人比較喜歡Oceanic主題。 :File - Settings - Editor - Font, Font: Source Code Pro,Size: 16, line-spacing: 1.0,應(yīng)用。個(gè)人覺(jué)得這個(gè)設(shè)置比較舒服 :File - Settings - Editor - Color Scheme Font - General,

    2024年02月16日
    瀏覽(16)
  • 前端項(xiàng)目review之修改element-ui全局主題顏色配置element-theme-chalk和gulp

    前端項(xiàng)目review之修改element-ui全局主題顏色配置element-theme-chalk和gulp

    每個(gè)公司的主題風(fēng)格肯定是不一樣的,比如現(xiàn)在的公司主題就是#00ab7a。在PC端TO-B的項(xiàng)目中少不了用 element-ui ,這個(gè)時(shí)候用 element-theme-chalk 直接本地編譯修改了element全局的主題色。 執(zhí)行 當(dāng)只有一個(gè)主題不需要切換的時(shí)候,使用 element-theme-chalk 就足夠了,但是當(dāng)主題很多的時(shí)候

    2023年04月09日
    瀏覽(31)
  • MidJourney筆記(9)-daily_theme-docs-describe

    MidJourney筆記(9)-daily_theme-docs-describe

    切換?#daily-theme?頻道更新的通知 。 但我發(fā)現(xiàn)在對(duì)話框那里,是沒(méi)有這個(gè)命令的: 但官網(wǎng)是有介紹,不知道是不是版本問(wèn)題還是這個(gè)命令已經(jīng)無(wú)效。 但后來(lái),我發(fā)現(xiàn)這個(gè)命令是要在Midjourney服務(wù)對(duì)話框那里才有,在我們后面添加的Mid

    2024年02月04日
    瀏覽(23)
  • IDEA 插件 Material Theme UI收費(fèi)后 免費(fèi)的辦法

    IDEA 插件 Material Theme UI收費(fèi)后 免費(fèi)的辦法

    使用手動(dòng)安裝的方式 1.在官網(wǎng)找到10之前的版本,下載插件 https://plugins.jetbrains.com/plugin/8006-material-theme-ui/versions 6點(diǎn)10以下的就可以 2.手動(dòng)在idea進(jìn)行插件導(dǎo)入 重啟idea即可使用主題了

    2024年02月13日
    瀏覽(25)
  • flutter開(kāi)發(fā)實(shí)戰(zhàn)-實(shí)現(xiàn)首頁(yè)分類目錄入口切換功能

    flutter開(kāi)發(fā)實(shí)戰(zhàn)-實(shí)現(xiàn)首頁(yè)分類目錄入口切換功能

    。 在開(kāi)發(fā)中經(jīng)常遇到首頁(yè)的分類入口,如美團(tuán)的美食團(tuán)購(gòu)、打車等入口,左右切換還可以分頁(yè)更多展示。 在pubspec.yaml引入 由于我這里按照一頁(yè)8條展示,兩行四列展示格式。 當(dāng)列表list傳入的控件時(shí)候,一共的頁(yè)數(shù)為 通過(guò)列表,一頁(yè)數(shù)量計(jì)算每一頁(yè)應(yīng)該展示多少個(gè)按鈕。 一

    2024年02月14日
    瀏覽(27)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包