Flutter文本折叠展开插件read_more_less的使用

发布于 1周前 作者 gougou168 来自 Flutter

Flutter文本折叠展开插件read_more_less的使用

read_more_less

read_more_less 提供了一个在文本超过所提供的 maxHeight 时显示更多/更少按钮的小部件。

Getting Started

Basic usage

基本用法很简单。你提供一个文本,小部件会根据提供的 maxHeight 决定是否应该显示更多/更少按钮。 可以将 maxHeight(默认为70)作为 ReadMoreLess 的参数进行编辑。

ReadMoreLess(
    text: '''
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur et lobortis erat. Sed vulputate elit lacinia justo tincidunt varius. Nam convallis semper magna, a volutpat turpis feugiat sed. Morbi ac ligula suscipit, lobortis arcu at, ornare justo. Maecenas vestibulum, eros et imperdiet egestas, tellus enim porttitor risus, sit amet tincidunt est neque nec arcu. Pellentesque egestas dolor vitae nisl varius, ut hendrerit nisl auctor. Morbi eget ex sapien. Donec congue sagittis ante, ac fermentum felis molestie at. Integer pharetra nec est at blandit. Nullam vestibulum at est id sollicitudin. Etiam maximus ipsum orci, nec placerat ligula pharetra vel. Curabitur rutrum justo et mauris eleifend, in tristique dolor molestie. Nullam ut sem quis orci dictum vestibulum eu ac sem. Nam eu consectetur lacus. Nulla ut elit sed urna condimentum efficitur.
        ''',
),

Screenshots

Example

Parameters

Parameter Type Description
text String 要显示的主要文本。
readLessText String? 当文本展开时按钮上的文本,在文本溢出的情况下
readMoreText String? 当文本折叠时按钮上的文本,在文本溢出的情况下
animationDuration Duration 在“阅读更多”和“阅读更少”之间转换时动画的持续时间。
maxHeight double 文本容器在折叠状态下的最大高度。
textStyle TextStyle? [text] 使用的主要文本样式
textAlign TextAlign 如何水平对齐 [text]
iconCollapsed Widget 允许一个小部件替换读取更多/更少按钮中的图标在折叠状态下。
iconExpanded Widget 允许一个小部件替换读取更多/更少按钮中的图标在展开状态下。
iconColor Color 读取更多/更少按钮中图标的颜色。当指定了 [iconCollapsed] 或 [iconExpanded] 时不工作。
buttonTextStyle TextStyle “阅读更多/更少”按钮使用的文本样式

示例demo

import 'package:flutter/material.dart';
import 'package:read_more_less/read_more_less.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

Widget customButtonBuilder(bool isCollapsed, VoidCallback onPressed) {
  return isCollapsed
      ? GestureDetector(
          onTap: onPressed,
          child: Container(
            color: Colors.red,
            height: 40,
            width: 400,
            child: const Text('Collapsed Container'),
          ),
        )
      : GestureDetector(
          onTap: onPressed,
          child: Container(
            color: Colors.red,
            height: 40,
            width: 400,
            child: const Text('Expanded Container'),
          ),
        );
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ReadMoreLess(
              text: '''
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur et lobortis erat. Sed vulputate elit lacinia justo tincidunt varius. Nam convallis semper magna, a volutpat turpis feugiat sed. Morbi ac ligula suscipit, lobortis arcu at, ornare justo. Maecenas vestibulum, eros et imperdiet egestas, tellus enim porttitor risus, sit amet tincidunt est neque nec arcu. Pellentesque egestas dolor vitae nisl varius, ut hendrerit nisl auctor. Morbi eget ex sapien. Donec congue sagittis ante, ac fermentum felis molestie at. Integer pharetra nec est at blandit. Nullam vestibulum at est id sollicitudin. Etiam maximus ipsum orci, nec placerat ligula pharetra vel. Curabitur rutrum justo et mauris eleifend, in tristique dolor molestie. Nullam ut sem quis orci dictum vestibulum eu ac sem. Nam eu consectetur lacus. Nulla ut elit sed urna condimentum efficitur.
''',
            ),
            SizedBox(height: 16),
            ReadMoreLess(
              customButtonBuilder: customButtonBuilder,
              text: '''
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur et lobortis erat. Sed vulputate elit lacinia justo tincidunt varius. Nam convallis semper magna, a volutpat turpis feugiat sed. Morbi ac ligula suscipit, lobortis arcu at, ornare justo. Maecenas vestibulum, eros et imperdiet egestas, tellus enim porttitor risus, sit amet tincidunt est neque nec arcu. Pellentesque egestas dolor vitae nisl varius, ut hendrerit nisl auctor. Morbi eget ex sapien. Donec congue sagittis ante, ac fermentum felis molestie at. Integer pharetra nec est at blandit. Nullam vestibulum at est id sollicitudin. Etiam maximus ipsum orci, nec placerat ligula pharetra vel. Curabitur rutrum justo et mauris eleifend, in tristique dolor molestie. Nullam ut sem quis orci dictum vestibulum eu ac sem. Nam eu consectetur lacus. Nulla ut elit sed urna condimentum efficitur.
''',
            ),
            SizedBox(height: 16),
            ReadMoreLess(
              text: '''
<Html>    
<Head>  
<title>  
Example of Paragraph tag  
</title>  
</Head>  
<Body>   
<p> <!-- It is a Paragraph tag for creating the paragraph -->  
<b> HTML </b> stands for <i> <u> Hyper Text Markup Language. </u> </i> It is used to create a web pages and applications. This language   
is easily understandable by the user and also be modifiable. It is actually a Markup language, hence it provides a flexible way for designing the  
web pages along with the text.   
</p>  
HTML file is made up of different elements. <b> An element </b> is a collection of <i> start tag, end tag, attributes and the text between them</i>.   
</p>  
</Body>  
</Html>  
''',
              readMoreText: 'show more HTML',
              readLessText: 'show less HTML',
            ),
          ],
        ),
      ),
    );
  }
}

以上代码展示了如何使用 read_more_less 插件来实现文本的折叠与展开功能,并提供了自定义按钮样式的示例。


更多关于Flutter文本折叠展开插件read_more_less的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文本折叠展开插件read_more_less的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter应用中使用read_more_less插件来实现文本折叠和展开功能的示例代码。这个插件可以帮助你轻松地在UI中显示可折叠的文本。

首先,确保你已经在pubspec.yaml文件中添加了read_more_less依赖:

dependencies:
  flutter:
    sdk: flutter
  read_more_less: ^x.y.z  # 请将 x.y.z 替换为最新版本号

然后运行flutter pub get来安装依赖。

接下来,你可以在你的Dart文件中使用ReadMoreText小部件来实现文本折叠和展开功能。以下是一个完整的示例:

import 'package:flutter/material.dart';
import 'package:read_more_less/read_more_less.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Read More Less Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String longText =
      "这是一个非常长的文本示例,用于展示Flutter中的read_more_less插件的功能。这个文本可以被折叠和展开,以便于用户阅读。这个插件非常适合用于新闻应用、博客文章或任何需要显示大量文本但希望保持界面简洁的场景。";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Read More Less Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: ReadMoreText(
          longText,
          trimLines: 3,  // 初始显示的行数
          trimMode: TrimMode.Line,  // 按行数折叠
          colorClickableText: Colors.blue,  // 展开/折叠按钮的文字颜色
          moreStyle: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),  // "更多"按钮的样式
          lessStyle: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),  // "更少"按钮的样式
          onMore: () {
            // 点击“更多”时的回调
            print("Read more clicked!");
          },
          onLess: () {
            // 点击“更少”时的回调
            print("Read less clicked!");
          },
        ),
      ),
    );
  }
}

在这个示例中:

  • longText 是你想要显示的长文本。
  • trimLines 指定了在文本折叠时初始显示的行数。
  • trimMode 设置为 TrimMode.Line 表示按行数来折叠文本。你也可以设置为 TrimMode.Character 来按字符数折叠。
  • colorClickableText 设置了展开/折叠按钮的文字颜色。
  • moreStylelessStyle 分别设置了“更多”和“更少”按钮的样式。
  • onMoreonLess 是点击“更多”和“更少”按钮时的回调,可以在这里添加你自己的逻辑。

这个示例展示了如何使用read_more_less插件来实现基本的文本折叠和展开功能。你可以根据自己的需求进一步自定义和扩展这个示例。

回到顶部