Um widget de texto que você pode usar para exibir inicialmente apenas um número definido de linhas de um texto provavelmente longo. Ele também suporta menções @ clicáveis.
Orientação gerada a partir de informações públicas. Apenas para referência.
ExpandableRichText é um widget do Flutter que exibe texto com altura inicial limitada, permitindo que os usuários expandam para ver o conteúdo completo. Ele suporta formatação de texto rico e inclui tratamento integrado para menções clicáveis (@mentions), tornando-o ideal para interfaces de chat ou pré-visualizações de conteúdo longo. O widget foi projetado para interação fluida em múltiplas plataformas, incluindo dispositivos móveis, web e desktop. Integra-se perfeitamente em cartões ou tiles expansíveis onde eficiência de espaço e interatividade são essenciais.
Casos de uso
Visualizações de mensagens de bate-papo
Resumos de conteúdo longo
Seções de comentários dos usuários
Exibições interativas de texto rico
Expansão dinâmica de texto em listas
Visualizações de postagens no estilo redes sociais
Principais recursos
Exibição inicial limitada de linhas
Expansão automática ao toque
@menções clicáveis
Suporte a texto rico
Compatibilidade multiplataforma
Comportamento personalizável de expansão/diminuição
Indicado para
Desenvolvedores de aplicativos de bate-papo
Designers de UI que precisam de componentes de texto compactos
Aplicativos com comprimento de conteúdo dinâmico
Projetos que exigem elementos de texto interativos
Equipes usando texto rico com menções
Aplicações multiplataforma do Flutter
Considerações
Pode exigir estilos adicionais para layouts complexos
Impacto no desempenho com textos muito longos
Requer manipulação cuidadosa de widgets aninhados
Limitado a interações baseadas em texto
Não adequado para conteúdo não interativo
Requer contexto adequado para análise de menções
README original
Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.
Expandable RichText
A text widget that you can use to initially only show a defined number of lines of a probably long
text. It also supports clickable @mention, #hashtag, and hyperlinks. You can define styles
for @mention, #hashtag, and hyperlinks and apply custom styles on text segments.
Features
Collapse and Expand text
Configure text to show to Expand text (expandText) and to Collapse text (collapseText)
Control whether the ellipsis (showEllipsis) is part of the Expand/Collapse text
Expand and Collapse animation
Callback for expanded changed event (onExpandedChanged)
Apply different style at @mention, #hashtag, hyperlinks and text segments
Handle click on @mention, #hashtag, hyperlinks and text segments
Widgetbuild(BuildContext context) {
returnExpandableRichText(
text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.",
expandText: 'show more',
collapseText: 'show less',
maxLines: 2,
linkColor: Colors.blue,
);
}
If text have @mention, #hashtag, hyperlinks and text segments:
Widgetbuild(BuildContext context) {
returnExpandableRichText(
"Lorem ipsum dolor sit amet..., #consetetur @sadipscing elitr, <tag1>I am Admin1</tag1> tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. <tag2>I am employee1</tag2> At vero eos et accusam et justo duo dolores et ea rebum Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum www.galley.com dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, <tag1>I am Admin2</tag1> diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. <tag2>I am employee2</tag2> Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
expandText: 'show more',
collapseText: 'show less',
maxLines: 1,
linkColor: Colors.blue,
mentionStyle: constTextStyle(
color: Colors.blueAccent, fontSize: 16, fontWeight: FontWeight.bold),
hashtagStyle: constTextStyle(
fontSize: 16, color: Colors.white, backgroundColor: Colors.black87),
urlStyle: constTextStyle(
color: Colors.lightBlueAccent, decoration: TextDecoration.underline),
customTagStyle: constTextStyle(fontWeight: FontWeight.bold,
fontStyle: FontStyle.italic,
fontSize: 16,
color: Colors.white,
backgroundColor: Colors.lightBlueAccent,
decoration: TextDecoration.underline)
);
}
Advance Usage
Widgetbuild(BuildContext context) {
returnExpandableRichText(
"Lorem ipsum dolor sit amet..., #consetetur @sadipscing elitr, <tag1>I am Admin1</tag1> tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. <tag2>I am employee1</tag2> At vero eos et accusam et justo duo dolores et ea rebum Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum www.galley.com dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, <tag1>I am Admin2</tag1> diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. <tag2>I am employee2</tag2> Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
expandText: 'show more',
collapseText: 'show less',
expanded: false,
onExpandedChanged: (flag) => {},
toggleTextColor: Colors.black,
showEllipsis: true,
toggleTextStyle: constTextStyle(
fontSize: 12, color: Colors.blue, decoration: TextDecoration.underline),
urlStyle: constTextStyle(color: Colors.lightBlueAccent, decoration: TextDecoration.underline),
onUrlTap: (url) => {},
hashtagStyle: constTextStyle(
fontSize: 16, color: Colors.white, backgroundColor: Colors.black87),
mentionStyle: constTextStyle(
color: Colors.blueAccent, fontSize: 16, fontWeight: FontWeight.bold),
onMentionTap: (mention) => {},
customTagStyle: constTextStyle(fontWeight: FontWeight.bold,
fontStyle: FontStyle.italic,
fontSize: 16,
color: Colors.white,
backgroundColor: Colors.lightBlueAccent,
decoration: TextDecoration.underline),
onCustomTagTap: (tag) => {},
expandOnTextTap: true,
collapseOnTextTap: true,
style: constTextStyle(color: Colors.black, fontSize: 24),
textDirection: TextDirection.ltr,
textAlign: TextAlign.start,
textScaleFactor: 1.0,
maxLines: 2,
animation: true,
animationDuration: constDuration(milliseconds: 200),
animationCurve: Curves.fastLinearToSlowEaseIn,
);
}
Bugs and feature requests
Have a bug or a feature request? Please first search for existing and closed issues. If your problem
or idea is not addressed
yet, please open a new issue.