小说全本下载

大家好,如果您还对小说全本下载不太了解,没有关系,今天就由本站为大家分享小说全本下载的知识,包括flutter小说app实现全本下载 界面卡顿 解决方案的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

flutter是单线程模型,即使有异步队列操作,但是一本小说最少也有几百章节,所以大量任务堆积会造成界面卡顿。在此需求中单线程已经无法满足程序需求,由此引出dart的多线程isolate。

但是由于dart中的Isolate比较重量级,UI线程和Isolate中的数据的传输比较复杂,因此flutter为了简化用户代码,在foundation库中封装了一个轻量级compute操作.

要使用compute,必须注意的有两点,一是我们的compute中运行的函数,必须是顶级函数或者是static函数,二是compute传参,只能传递一个参数,返回值也只有一个。

首先声明一个static返回值为Future的下载函数,返回章节内容

staticFuture<String>requestDataWithCompute(Stringid)async{ntry{nvarurl=Common.bookContentUrl+'/$id';nvarclient=newHttpClient();nvarrequest=awaitclient.getUrl(Uri.parse(url));nvarresponse=awaitrequest.close();nvarresponseBody=awaitresponse.transform(utf8.decoder).join();nvardataList=jsonDecode(responseBody);tnreturndataList['data']['content'].toString().trim();n}catch(e){nprint(e);n}n}

再返回内容缓存到本地

for(varchapterinbookTag.chapters){nStringid=chapter.id;nif(!SpUtil.haveKey(id)){nStringcontent=awaitcompute(requestDataWithCompute,id);nSpUtil.putString(chapter.id,content);nchapter.hasContent=2;n}nprint("download${chapter.name}ok");n}nToast.show("${bookInfo?.Name??""}下载完成");

由此利用flutter包装的轻量级compute可解决耗时任务,不造成界面卡顿。

详细代码flutter写的笔趣阁源app

好了,关于小说全本下载和flutter小说app实现全本下载 界面卡顿 解决方案的问题到这里结束啦,希望可以解决您的问题哈!