原文鏈接:http://www.fackyou.org/archives/flutter/2020062842.html
Fish-Redux的Adapter
不得不說艰额,F(xiàn)ish-Redux的Adapter是個大坑枉侧,為什么這么說呢?倒不是因?yàn)檫@個Adapter有多不合理或者源代碼多么辣雞,當(dāng)然阿里出品必屬精品(如果阿里的HR少俠看到我在吹阿里授翻,請務(wù)必給我發(fā)Offer),而是因?yàn)楣俜轿臋nTM遲遲不更新襟衰!你悶頭寫代碼兔辅,更新框架,不更新文檔氓扛,我們怎么用翱莘摇?
三種Adapter類型
官方設(shè)置了三種Adapter類型(其實(shí)是四種采郎,一種被刪了)分別是:
1. StaticFlowAdapter
2. DynamicFlowAdapter
3. CustomAdapter
其中StaticFlowAdapter
是以Map數(shù)據(jù)類型驅(qū)動的千所,DynamicFlowAdapter
是以Model數(shù)組類型驅(qū)動的,而CustomAdapter
就厲害了蒜埋,想怎么驅(qū)動就怎么驅(qū)動淫痰。
契機(jī)
為什么我要介紹一下SourceFlowAdapter
這種類型呢?是因?yàn)楫?dāng)我用的是Model數(shù)組類型整份,而當(dāng)我在代碼里敲上DynamicFlowAdapter
的時候它提示我:
'DynamicFlowAdapter' is deprecated and shouldn't be used.
Try replacing the use of the deprecated member with the replacement.
我可去TM的吧待错,刪了也不在文檔里說一下!然后根據(jù)提示我就得換成SourceFlowAdapter
烈评,那么問題來了火俄,這個SourceFlowAdapter
文檔里提都沒提,我該怎么寫讲冠?
翻遍谷歌度娘瓜客,實(shí)在不容易,讓我找到了一篇教程,不過寫的不是很透徹谱仪,我略補(bǔ)一下玻熙,基本上照著我下面的方法就可以復(fù)現(xiàn)出來。坐好了芽卿,我要 開車 開始了揭芍!
使用方法(里面涉及了我項(xiàng)目里的命名,請換成你的)
新建一個adapter.dart文件卸例,然后按照格式
class FollowAdapter extends SourceFlowAdapter<FollowState> {
static const friendItem = 'friend';
FollowAdapter()
: super(pool: <String, Component<Object>>{
friendItem: FollowItemComponent()
});
}
這里是定義一個FollowAdapter称杨,子項(xiàng)對應(yīng)一個組件(component),這個子項(xiàng)的格式是<String, Component<Object>的筷转,組件要預(yù)先建好姑原!怎么建你心里沒點(diǎn)數(shù)嗎?這里為什么要定一個公共變量呢呜舒,后面會用到锭汛。
接下來修改state.dart文件。
在你的State類里面擴(kuò)展一個MutableSource袭蝗,寫法如下:
extends MutableSource
寫哪用我教嗎唤殴?
然后補(bǔ)足幾個覆寫方法:
1. getItemData
2. getItemType
3. itemCount
4. setItemData
能直接生成的就直接生成哈!
挨個說一下作用:
1. getItemData
獲取list的item數(shù)據(jù)的方法到腥,需要返回值朵逝,返回值必須是component的state
2. getItemType
獲取list的item類型,以便對應(yīng)到component乡范。這里推薦直接返回FollowAdapter.friendItem
這個就是剛剛adapter.dart里的公共變量配名,省得寫錯找半天問題找不到!
3. itemCount
這里返回list的行數(shù)晋辆,直接返回數(shù)組的length就可以了渠脉。
4. setItemData
這個沒啥用,就是如果子集修改了數(shù)據(jù)可以修改state里的數(shù)據(jù)(可能是瓶佳,我沒用到芋膘,瞎理解的,你用到了麻煩給我講一下)
然后修改component.dart霸饲。這里就簡單了索赏,在adapter里面加上一條NoneConn<FollowState>() + FollowAdapter()
從名字上看就能看出怎么修改成你自己項(xiàng)目的了。
最后在view.dart里加入listview贴彼,這個比較固定,我直接貼代碼了:
ListView.builder(
itemBuilder: viewService.buildAdapter().itemBuilder,
itemCount: viewService.buildAdapter().itemCount,
)
只要你數(shù)據(jù)兩邊一致埃儿,就可以重現(xiàn)我的成功案例器仗,如果你無法重現(xiàn),請到原鏈接留言!