Fish-Redux的SourceFlowAdapter用法

原文链接: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() + FollowAdapter()从名字上看就能看出怎么修改成你自己项目的了。

最后在view.dart里加入listview,这个比较固定,我直接贴代码了:

ListView.builder(
    itemBuilder: viewService.buildAdapter().itemBuilder,
    itemCount: viewService.buildAdapter().itemCount,
)

只要你数据两边一致,就可以重现我的成功案例,如果你无法重现,请到原链接留言!

你可能感兴趣的:(Fish-Redux的SourceFlowAdapter用法)