最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Flutter狀態(tài)管理Provider示例解析

 更新時間:2022年12月06日 09:37:11   作者:顧安  
這篇文章主要為大家介紹了Flutter狀態(tài)管理Provider示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

什么是狀態(tài)管理

狀態(tài)管理是一個十分廣泛的概念,因為狀態(tài)無處不在。從廣義角度講狀態(tài)管理就是頁面跟代碼、跟服務(wù)器進行數(shù)據(jù)同步。例如:你在某購物應(yīng)用內(nèi),添加了一件商品,你需要在購物車頁面進行展示。這就是一種狀態(tài)。相反的,你在商品頁面點擊了添加到購物車,卻在購物車頁面沒有發(fā)現(xiàn)或者過段時間它才展示了,這就是狀態(tài)管理沒有做好。這就是我所理解的狀態(tài)管理。

官方給出的解釋:狀態(tài)管理就是當(dāng)某個狀態(tài)發(fā)生改變的時候,告知使用該狀態(tài)的狀態(tài)監(jiān)聽者,讓狀態(tài)所監(jiān)聽的屬性隨之改變,從而達到聯(lián)動效果。

常見的狀態(tài)管理框架有哪些

Provider

Provider是官方文檔的例子用的方法,Google 比較推薦的用法,也是今天的主角。Provider的實現(xiàn)在內(nèi)部還是利用了InheritedWidget,它就是用于提供數(shù)據(jù),可以很方便的管理狀態(tài)。

Redux

Redux是一種單向數(shù)據(jù)流架構(gòu),可以輕松開發(fā),維護和測試應(yīng)用程序,也是google推薦的狀態(tài)管理方式。所有的狀態(tài)都存儲在Store里,View拿到Store的狀態(tài)數(shù)據(jù)會映射成視圖渲染。Redux不直接讓view操作數(shù)據(jù),通過dispatch一個action通知Reducer,狀態(tài)變更(類似于vue中的vuex)。

GetX

GetX包含很多功能,各種彈出widget、路由管理、國際化、Utils、狀態(tài)管理等所以我覺得它不單單是一個狀態(tài)管理器,更像是一個框架(類似于vue cli)。關(guān)于GetX的爭論也很多,今天我們不討論。我的建議是,對于像我一樣的小白,還是從Provider開始,打好基礎(chǔ)再說。

Provider 使用

添加依賴

  • 使用命令行方式
flutter pub add provider
  • pubspec.yaml 添加這樣一行(并運行隱式flutter pub get):
dependencies:
provider: ^6.0.4

導(dǎo)入應(yīng)用

import 'package:provider/provider.dart';

定義需要共享的數(shù)據(jù)

class ProviderData with ChangeNotifier {
  int count = 0;
  void increment() {
    count++;
    notifyListeners();
  }
}

在應(yīng)用程序入口初始化

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import './provider/index.dart';
import './page/HomePage.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (_) => CountNotifier(),
      child: MaterialApp(
        debugShowCheckedModeBanner: false,
         home: const Scaffold(
            body: HomePage(),
          ),
      ),
    );
  }
}

使用共享數(shù)據(jù)

import 'package:flutter/material.dart';
import 'package:flutter_provider_example/provider_count_example/count_notifier.dart';
import './provider/provider.dart';
class ProviderExample extends StatefulWidget {
  const ProviderExample({Key? key}) : super(key: key);
  @override
  State<ProviderExample> createState() => _ProviderExampleState();
}
class _ProviderExampleState extends State<ProviderExample> {
  final counter = Provider.of<ProviderData>(context);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("InheritedWidget"),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: (){
          counter.increment();
        },
        child: const Icon(Icons.add),
      ),
      body: Center(
        child: Text(counter.count.toString(),
          style: const TextStyle(
              color: Colors.red,
              fontSize: 50
          ),
        ),
      ),
    );
  }
}

狀態(tài)管理的好處

  • 能有效分離 UI 層和數(shù)據(jù)處理層
  • 幫助前端應(yīng)用結(jié)構(gòu)化數(shù)據(jù)
  • 有效控制狀態(tài)的變化
  • 處理同步與異步
  • 實現(xiàn)一些日志打印,熱加,同構(gòu)應(yīng)用等功能
  • ...

結(jié)束語

關(guān)于flutter狀態(tài)管理的學(xué)習(xí)到這里就結(jié)束了,更多關(guān)于Flutter狀態(tài)管理Provider的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android中設(shè)置組件半透明和透明的效果示例

    Android中設(shè)置組件半透明和透明的效果示例

    這篇文章主要給大家介紹了Android中設(shè)置組件半透明和透明效果的相關(guān)資料,文中給出了詳細(xì)的介紹和示例代碼,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • Android仿新浪微博/QQ空間滑動自動播放視頻功能

    Android仿新浪微博/QQ空間滑動自動播放視頻功能

    相信用過新浪微博或者QQ空間的朋友都看到過滑動自動播放視頻的效果,那么這篇文章跟大家分享下如何利用Android實現(xiàn)這一個功能,有需要的朋友們可以參考借鑒。
    2016-09-09
  • Android pull解析xml的實現(xiàn)方法

    Android pull解析xml的實現(xiàn)方法

    這篇文章主要介紹了Android pull解析xml的實現(xiàn)方法的相關(guān)資料,希望通過本文能幫助到大家,謝謝大家對本站的支持!需要的朋友可以參考下
    2017-10-10
  • android 大圖片拖拽并縮放實現(xiàn)原理

    android 大圖片拖拽并縮放實現(xiàn)原理

    android 大圖片拖拽縮放有利于用戶體驗,在開發(fā)過程中經(jīng)常使用到,這篇圖片拖拽縮放也是我在項目中用到的,今天整理一下,將源碼奉獻給大家,希望對大家以后碰到相似的問題有幫助
    2013-01-01
  • android不同activity之間共享數(shù)據(jù)解決方法

    android不同activity之間共享數(shù)據(jù)解決方法

    最近做局域網(wǎng)socket連接問題,要在多個activity之間公用一個socket連接,就在網(wǎng)上搜了下資料,感覺還是application方法好用,帖出來需要的朋友可以參考下
    2012-11-11
  • ListView通用泛型適配器

    ListView通用泛型適配器

    今天小編就為大家分享一篇關(guān)于ListView通用泛型適配器,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • android 獲取屏幕尺寸

    android 獲取屏幕尺寸

    這篇文章主要介紹了android 獲取屏幕尺寸的方法,需要的朋友可以參考下
    2015-03-03
  • Android RecyclerView添加搜索過濾器的示例代碼

    Android RecyclerView添加搜索過濾器的示例代碼

    本篇文章主要介紹了Android RecyclerView添加搜索過濾器的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Android注冊廣播的兩種方法分析

    Android注冊廣播的兩種方法分析

    這篇文章主要介紹了Android注冊廣播的兩種方法,結(jié)合實例形式分析了Android注冊廣播的方法、步驟與相關(guān)注意事項,需要的朋友可以參考下
    2016-02-02
  • android應(yīng)用實現(xiàn)開機自動啟動方法

    android應(yīng)用實現(xiàn)開機自動啟動方法

    這篇文章主要介紹了android應(yīng)用實現(xiàn)開機自動啟動方法,本文講解了原理和編碼實例,需要的朋友可以參考下
    2015-05-05

最新評論

合作市| 涿鹿县| 榕江县| 监利县| 温州市| 通化县| 富锦市| 綦江县| 连云港市| 长丰县| 新乐市| 浦县| 吴桥县| 建湖县| 新田县| 镇康县| 大同县| 太仓市| 石城县| 玉林市| 金堂县| 横山县| 奉化市| 安新县| 玛纳斯县| 渭南市| 綦江县| 长沙市| 大田县| 兴化市| 浑源县| 铜梁县| 盘锦市| 崇文区| 潞西市| 松潘县| 舟山市| 平罗县| 南漳县| 三都| 文昌市|