原文链接:http://www.fackyou.org/archives/flutter/2020062842.html
Fish-Redux的Adapter
不得不说,Fish-Redux的Adapter是个大坑,为什么这么说呢?倒不是因为这个Adapter有多不合理或者源代码多么辣鸡,当然阿里出品必属精品(如果阿里的HR少侠看到我在吹阿里,请务必给我发Offer),而是因为官方文档TM迟迟不更新!你闷头写代码,更新框架,不更新文档,我们怎么用啊?
三种Adapter类型
官方设置了三种Adapter类型(其实是四种,一种被删了)分别是:
1. StaticFlowAdapter
2. DynamicFlowAdapter
3. CustomAdapter
其中StaticFlowAdapter
是以Map数据类型驱动的,DynamicFlowAdapter
是以Model数组类型驱动的,而CustomAdapter
就厉害了,想怎么驱动就怎么驱动。
契机
为什么我要介绍一下SourceFlowAdapter
这种类型呢?是因为当我用的是Model数组类型,而当我在代码里敲上DynamicFlowAdapter
的时候它提示我:
'DynamicFlowAdapter' is deprecated and shouldn't be used.
Try replacing the use of the deprecated member with the replacement.
我可去TM的吧,删了也不在文档里说一下!然后根据提示我就得换成SourceFlowAdapter
,那么问题来了,这个SourceFlowAdapter
文档里提都没提,我该怎么写?
翻遍谷歌度娘,实在不容易,让我找到了一篇教程,不过写的不是很透彻,我略补一下,基本上照着我下面的方法就可以复现出来。坐好了,我要 开车 开始了!
使用方法(里面涉及了我项目里的命名,请换成你的)
新建一个adapter.dart文件,然后按照格式
class FollowAdapter extends SourceFlowAdapter {
static const friendItem = 'friend';
FollowAdapter()
: super(pool: >{
friendItem: FollowItemComponent()
});
}
这里是定义一个FollowAdapter,子项对应一个组件(component),这个子项的格式是
接下来修改state.dart文件。
在你的State类里面扩展一个MutableSource,写法如下:
extends MutableSource
写哪用我教吗?
然后补足几个覆写方法:
1. getItemData
2. getItemType
3. itemCount
4. setItemData
能直接生成的就直接生成哈!
挨个说一下作用:
1. getItemData
获取list的item数据的方法,需要返回值,返回值必须是component的state
2. getItemType
获取list的item类型,以便对应到component。这里推荐直接返回FollowAdapter.friendItem
这个就是刚刚adapter.dart里的公共变量,省得写错找半天问题找不到!
3. itemCount
这里返回list的行数,直接返回数组的length就可以了。
4. setItemData
这个没啥用,就是如果子集修改了数据可以修改state里的数据(可能是,我没用到,瞎理解的,你用到了麻烦给我讲一下)
然后修改component.dart。这里就简单了,在adapter里面加上一条NoneConn
从名字上看就能看出怎么修改成你自己项目的了。
最后在view.dart里加入listview,这个比较固定,我直接贴代码了:
ListView.builder(
itemBuilder: viewService.buildAdapter().itemBuilder,
itemCount: viewService.buildAdapter().itemCount,
)
只要你数据两边一致,就可以重现我的成功案例,如果你无法重现,请到原链接留言!