20200222
凌晨睡不着起来随便写点代码,大部分问题都解决了,但还有个绕不过去的问题。反正也很困了,就边听球边睡觉了(要不是地上太冷说不定我就直接拿抱枕当枕头在书房睡了)。中午快十二点才起来,其实还挺困,但还是吃了个饭。吃饭过后就不怎么困了,继续写一点代码。要做的功能是用户在做某些需要登陆的操作时如果没有登陆,就跳往登陆页,登陆后返回原页面继续原先的操作。我一开始就改成了基于bloc进行用户状态管理,但这么做似乎反而有问题。因为大部分组件都会依赖用户登录状态(当然也包括检查用户状态的组件),当用户在登陆页完成登陆后,就会导致原先的组件树被刷新,继续原先的操作通常要更改组件的状态,但这时所要更改的组件已经被废弃了……虽然只是个warning。如果不用bloc直接写存储的话似乎没有这样的问题,可是这个没理由不用bloc管理吧?功能写完倒是能正常工作,因为刷新后的组件树在查询时包含了新的状态,但这个有点凑巧不能保证。其他也有些绕过去的方案,但都属于需要手动对组件树状态进行判断的,有些tricky。想来想去,这可能最根本的还是因为目前的graphql库基本是模仿apollo写的,它管理状态的方式跟flutter尤其是bloc(其实跟redux差不多)不太一样,所以这些细枝末节会有些问题。比较好的方式是把graphql完全当成与后端的通信实现(类似于repository,刚好bloc里也有,虽然只有DI的功能),不在flutter的ui层面写,但就为解决一个warning有点小题大做?明天再弄吧。剩下的时间随便打打游戏啥的,今晚比赛还挺多……
发自我的iPad
评论
发表评论