Flutter Markdown“显示更多”按钮

Posted

技术标签:

【中文标题】Flutter Markdown“显示更多”按钮【英文标题】:Flutter Markdown "Show more" button 【发布时间】:2020-11-11 03:15:51 【问题描述】:

我在 LimitedBox 中使用来自 flutter_markdown 的 MarkdownBody。当按下“显示更多”按钮时,maxHeight 设置为 double.infinity 并显示全文:

                                             LimitedBox(
                                                maxHeight:
                                                    showMoreCommentsIds
                                                            .contains(
                                                                commentId)
                                                        ? double.infinity
                                                        : 100,
                                                child: Wrap(
                                                  direction:
                                                      Axis.horizontal,
                                                  children: <Widget>[
                                                    MarkdownBody(
                                                      data: showList[index]
                                                          .comment
                                                          .comment,
                                                    )
                                                  ],
                                                ),
                                              ),

但是如果有必要,我怎样才能找出文本的高度并只显示“显示更多”按钮?

【问题讨论】:

【参考方案1】:

您可以使用 text.length 查找文本的长度,并根据该信息确定是否需要“显示更多”按钮。例如:

if(text.length > 60) 
_showButton();

您可能需要对文本的长度进行一些测试,以找出您想要作为阈值的长度。我只是选择了 60 作为任意数字。

【讨论】:

感谢您的回答。问题是文本是降价格式的,所以它可以有不同的字体大小或包含图像。这就是为什么我使用文本小部件的最大高度而不是最大行数的原因。我正在寻找一种方法来获取 MarkdownBody 的高度,所以如果它高于 100,我只能显示按钮。 这有帮助吗? ***.com/questions/49307677/… 是的,这个问题的第二个答案对我有用 (***.com/a/60868972/7061265)。谢谢。 可以分享一下sn-p的代码吗?我无法正确显示有限的文本格式。 我不确定您所说的“我无法正确显示有限的文本格式”是什么意思。你能详细说明一下吗?格式不正确是什么意思?【参考方案2】:

我遇到了类似的问题,因为我必须知道小部件的大小才能应用一些逻辑。

我了解到您可以在 Offstage 小部件中预渲染小部件,在安装后使用小部件键确定它的大小。 你应该等待重建,所以你可以强制它,然后你用这样的函数获得大小:

Future.delayed(Duration(milliseconds:100)).then(
    final widgetSize = getWidgetSize(widgetKey);

    // You can make logic here to remove the Offstage, variables, and free its space.

    // Todo: apply the size in your code after this
)

...

Size getWidgetSize(GlobalKey key) 
  final RenderBox renderBox = key.currentContext.findRenderObject();
  return renderBox.size;

在我的例子中,我在点击某个地方后需要它,所以我在一个函数中使用它,但也许你会直接在 initState() 上应用它,在后帧回调中。

initState()
     super.initState();
     ServicesBinding.instance.addPostFrameCallback((_) async 
        // here
     );

【讨论】:

以上是关于Flutter Markdown“显示更多”按钮的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Dart 中的 SizedBox 或 Container

如何仅针对单击显示更多按钮的当前 div 显示动态元素

如何从屏幕阅读器中隐藏“显示更多”按钮?

调试显示更多显示更少按钮 - 缺少文本段落

markdown Flutter dio封装

markdown Flutter Container MaxWidth