1 為什么用Riverpod冰单?
Riverpod是什么?
Riverpod(Provider的字謎)是用于Flutter/Dart的一種反應式緩存框架。
通過使用聲明性和反應式編程软棺,Riverpod能夠為您的應用程序處理大部分邏輯。它可以執(zhí)行帶有內(nèi)置錯誤處理和緩存的網(wǎng)絡請求尤勋,并在必要時自動重新獲取數(shù)據(jù)喘落。
動機:
現(xiàn)代應用程序很少隨著渲染其用戶界面所需的所有信息而來茵宪。相反,數(shù)據(jù)通常是從服務器異步獲取的瘦棋。
問題在于稀火,處理異步代碼是困難的。雖然Flutter提供了一些方法來創(chuàng)建狀態(tài)變量并在更改時刷新UI赌朋,但仍然相當有限凰狞。仍然存在許多未解決的挑戰(zhàn):
異步請求需要在本地進行緩存,因為每當UI更新時重新執(zhí)行它們是不合理的沛慢。
由于我們有一個緩存赡若,如果不小心處理,我們的緩存可能會變得過時团甲。
我們還需要處理錯誤和加載狀態(tài)逾冬。
在大規(guī)模情況下解決這些問題可能會很困難,并且它們受到許多功能的影響躺苦,例如:
下拉刷新
無限列表/滾動獲取
邊輸入邊搜索
防抖動的異步請求
在不再使用時取消異步請求
樂觀的UI
離線模式
這些功能可能很難實現(xiàn)粉渠,但對于良好的用戶體驗至關(guān)重要。
然而圾另,很少有軟件包直接嘗試解決這些問題霸株,很多工作必須手動完成。
這就是Riverpod的用武之地集乔。
Riverpod嘗試通過提供一種受到Flutter小部件啟發(fā)的全新的編寫業(yè)務邏輯的方式來解決這些問題去件。在許多方面,Riverpod類似于小部件扰路,但用于狀態(tài)管理尤溜。
通過使用這種新方法,這些復雜的功能大部分都是默認完成的汗唱。剩下的就是專注于您的用戶界面宫莱。
持懷疑態(tài)度嗎?以下是一個示例哩罪。以下代碼片段是使用Riverpod實現(xiàn)的Pub.dev客戶端應用程序的簡化版本授霸。
代碼鏈接:
https://github.com/rrousselGit/riverpod/blob/master/examples/pub/lib/search.dart#L19
這個代碼片段包含了您需要的所有業(yè)務邏輯,用于實現(xiàn)"邊輸入邊搜索"际插、"下拉刷新"和"無限列表"碘耳,同時處理錯誤和加載狀態(tài)。
2 開始:
在深入了解Riverpod的內(nèi)部機制之前框弛,讓我們從基礎開始:安裝Riverpod辛辨,然后編寫一個"Hello World"示例。
需要安裝的插件包說明:
在開始之前,您需要知道Riverpod分布在多個包中斗搞,其使用方式略有不同指攒。您想要安裝的Riverpod變體取決于您正在制作的應用程序。您可以參考以下表格僻焚,以幫助您決定使用哪個包:
插件包截圖
安裝riverpod插件
在pubspec.yaml安裝這個插件包:
安裝插件包
執(zhí)行dart pub get命令允悦,這樣插件riverpod插件包就安裝到程序上了
寫一個helloworld例子:
程序截圖
日志截圖