asjqkkkk / markdown_widget

📖Rendering markdown by flutter!Welcome for pr and issue.
MIT License
321 stars 93 forks source link

我正在使用大佬您的仓库渲染我的md,有些md超大,比如5M。 #112

Closed bawangse closed 10 months ago

bawangse commented 1 year ago

这个md渲染非常棒!

使用toc跳转的时候,跳到最下面的时候,会非常慢,一边滚动一边渲染,得半天才行。 是这个——》controller.scrollToIndex

我尝试每个item的高度,不过只有渲染出来才能计算高度,胎死腹中。

我应该怎么办?初始 scrollToIndex 到最后再跳到0?不用 ListView.builder 而是一把渲染?

bawangse commented 1 year ago

我看到了这个,好像没法解决,md本身就保证了不同高度 https://github.com/quire-io/scroll-to-index/issues/44

这里有可能的解决方案 https://github.com/quire-io/scroll-to-index/issues/38#issuecomment-737618221

https://pub.dev/packages/scrollable_positioned_list

但是如果用这个的话,需要更改好多。。。

我想做的功能是搜索md的内容,获取index,然后跳转。。。

其实我不明白的是,多看阅读和静读天下怎么做到跳转流畅的?

asjqkkkk commented 1 year ago

@bawangse 你好,早期其实markdown_widget就是使用的 scrollable_positioned_list,不过目前这个库不支持使用SelectionArea 组件,同时也不支持监听具体哪一个 index 的滚动,再加上它的更新比较缓慢,没办法解决我这边的一些需求,所以我就先把库迁移到了 scroll-to-index

不过话说回来,有大量输入源的时候,最好还是使用类似 scrollable_positioned_list 的方案,因为它不是全量渲染的,而是以initialIndex所对应的数据作为渲染起点,即便是海量数据,它的跳转速度也是一样的

不过在 scrollable_positioned_list 解决上面的那些问题前,我暂时不会考虑将它重新接入

但是你可以使用 MarkdownGenerator().buildWidgets(data)markdown 源数据转换为 widget list 然后使用 scrollable_positioned_list 去进行渲染和跳转,如果markdown 源数据过大,可以考虑分段渲染来解决一次性转换太多导致的性能问题

asjqkkkk commented 1 year ago

目前关于TOC跳转的相关代码实现的还是比较粗糙,后续我会考虑改进一下 如果你想通过scrollable_positioned_list 去实现跳转的话,可以参考一下 markdown_widget 2.0.0之前的代码