Flutter智能文本处理插件smart_text_widget的使用

Flutter智能文本处理插件smart_text_widget的使用

smart_text_widget 是一个Flutter包,提供了高度可定制的 RTText 小部件。它设计用于处理各种场景,如空值、空字符串、数字、列表和映射等。该小部件还包括滚动、截断和动态文本显示等功能。

特性

  • 支持多种数据类型:支持空值、空字符串、数字、列表和映射。
  • 动态截断:设置最大宽度并动态截断文本。
  • 滚动支持:自动滚动以适应长字符串或列表。
  • 自定义列表分隔符:选择如何分隔列表项(逗号 , 或竖线 |)。
  • 错误处理:在出现问题时显示默认或自定义错误文本。

截图

开始使用

要使用此包,将其添加到您的项目中,在 pubspec.yaml 文件中包含以下依赖:

dependencies:
  smart_text_widget: ^0.0.3

处理空值

RTText 小部件可以优雅地处理空值。当传递空值时,您可以显示自定义错误消息。以下是有效处理空值的方法:

const RTText(
  text: null,
  errorTrue: true,
  errorValue: "Null Value Encountered!",
  truncateEnable: true,
  truncateSize: 10,
  customEllipsis: "-->",
  maxWidth: true,
),

处理空字符串

如果输入为空字符串,您可以显示占位符或自定义消息以通知用户:

const RTText(
  text: "",
  errorTrue: true,
  errorValue: "No content available!",
  maxWidth: true,
),

显示数字值

您可以传递包括整数和浮点数在内的数字值给 RTText 小部件。该小部件会自动将它们转换为字符串。

const RTText(
  text: 42,
  maxWidth: true,
),

处理列表

RTText 小部件可以显示字符串列表。如果列表很长,可以使用 scroll 参数允许滚动。

const RTText(
  text: ["Apple", "Banana", "Cherry"],
  scroll: true,
  listSeparator: " | ",
  textAlign: TextAlign.center,
  maxWidth: true,
),

处理映射

您还可以传递映射来显示键值对作为文本。如有必要,可以自定义错误消息。

const RTText(
  text: {"name": "John", "age": 30},
  errorTrue: false,
  maxWidth: true,
),

截断长文本

如果文本超过特定长度,您可以启用截断。小部件将在指定长度后显示省略号。

const RTText(
  text: "This is a very long text that needs to be truncated after a certain length.",
  truncateEnable: true,
  truncateSize: 12,
  customEllipsis: "...",
  maxWidth: true,
),

可滚动的长字符串

对于需要在特定宽度内显示的长字符串,启用滚动以增强用户体验。

const RTText(
  text: "This is a long string that should be scrollable within its container.",
  scroll: true,
  maxWidth: true,
),

完整代码示例

以下是如何在Flutter应用中使用SmartText的小示例:

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

void main() => runApp(const MyApp());

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'RTText Widget Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: const Text('RTText Widget Showcase'),
        ),
        body: const SingleChildScrollView(
          child: Padding(
            padding: EdgeInsets.all(12.0),
            child: RTTextShowcase(),
          ),
        ),
      ),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        const Text(
          'ResearchThinker Smart Text Widget: Handles Null, Empty, List, and Map values.',
          style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
        ),
        const SizedBox(height: 10),
        // Null Value Example
        const RTText(
          text: null,
          errorTrue: true,
          errorValue: "Null Value Encountered!",
          truncateEnable: true,
          truncateSize: 10,
          customEllipsis: "-->",
          maxWidth: true,
        ),
        const SizedBox(height: 10),
        const RTText(  // Empty String Example
          text: "",
          errorTrue: true,
          errorValue: "Empty String!",
          maxWidth: true,
        ),
        const SizedBox(height: 10),
        const RTText( // Zero Value Example
          text: "0.0",
          truncateEnable: true,
          truncateSize: 4,
          textAlign: TextAlign.center,
          maxWidth: true,
          customEllipsis: " ==> ",
        ),
        const SizedBox(height: 10),
        const RTText( // List Example with Separator
          text: ["Apple", "Banana", "Cherry"],
          scroll: true,
          listSeparator: " | ",
          textAlign: TextAlign.center,
          textStyle: TextStyle(fontSize: 16, color: Colors.blue, fontWeight: FontWeight.bold),
        ),
        const SizedBox(height: 10),
        const RTText(
          text: ["Apple", "Banana", "Cherry"],
          scroll: true,
          listSeparator: " , ",
          textAlign: TextAlign.center,
          textStyle: TextStyle(fontSize: 16, color: Colors.blue, fontWeight: FontWeight.bold),
        ),
        const SizedBox(height: 10),
        const RTText(
          text: ["Apple", "Banana", "Cherry"],
          scroll: true,
          listSeparator: " - ",
          textAlign: TextAlign.center,
          textStyle: TextStyle(fontSize: 16, color: Colors.blue, fontWeight: FontWeight.bold),
        ),
        const SizedBox(height: 10),
        const RTText( // Map Example
          text: {"name": "ResearchThinker", "website": "https://researchthinker.com"},
          errorTrue: false,
          maxWidth: true,
          emptyPlaceholder: "No data available",
          textAlign: TextAlign.right,
        ),
        const SizedBox(height: 10),
        const RTText(  // Dynamic Value Example
          text: 120,
          textStyle: TextStyle(color: Colors.green, fontSize: 18),
          textAlign: TextAlign.left,
          maxWidth: true,
        ),
        const SizedBox(height: 10),
        const RTText(  // Large String with Scroll and Max Width
          text: "This is a very long text that might not fit in a single line and needs to be scrolled or truncated.",
          scroll: true,
          maxWidth: true,
          truncateSize: 62,
          truncateEnable: true,
          textStyle: TextStyle(fontSize: 16, fontWeight: FontWeight.w400),
          textAlign: TextAlign.justify,
        ),
      ],
    );
  }
}

更多关于Flutter智能文本处理插件smart_text_widget的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter智能文本处理插件smart_text_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


smart_text_widget 是一个 Flutter 插件,用于在应用中处理智能文本显示。它可以帮助开发者轻松地识别和处理文本中的链接、电子邮件、电话号码等内容,并自动将其转换为可点击的链接或执行其他操作。

安装 smart_text_widget

首先,你需要在 pubspec.yaml 文件中添加 smart_text_widget 依赖:

dependencies:
  flutter:
    sdk: flutter
  smart_text_widget: ^最新版本

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

基本使用

smart_text_widget 提供了一个 SmartText 组件,你可以像使用普通的 Text 组件一样使用它。它会自动识别文本中的链接、电子邮件和电话号码,并将其转换为可点击的链接。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('SmartText Widget Example'),
        ),
        body: Center(
          child: SmartText(
            'Visit our website at https://example.com or email us at info@example.com.',
            style: TextStyle(fontSize: 16),
            onLinkTap: (url) {
              print('Link tapped: $url');
              // 你可以在这里处理链接点击事件,例如打开浏览器
            },
          ),
        ),
      ),
    );
  }
}

自定义行为

SmartText 组件允许你自定义链接的点击行为。你可以通过 onLinkTap 回调来处理链接的点击事件。

SmartText(
  'Call us at +1234567890 or visit https://example.com.',
  style: TextStyle(fontSize: 16),
  onLinkTap: (url) {
    if (url.startsWith('tel:')) {
      // 处理电话号码
      print('Calling: $url');
    } else if (url.startsWith('mailto:')) {
      // 处理电子邮件
      print('Sending email to: $url');
    } else {
      // 处理其他链接
      print('Opening link: $url');
    }
  },
)

自定义样式

你还可以自定义链接的样式,例如颜色、下划线等。

SmartText(
  'Visit https://example.com for more information.',
  style: TextStyle(fontSize: 16),
  linkStyle: TextStyle(
    color: Colors.blue,
    decoration: TextDecoration.underline,
  ),
  onLinkTap: (url) {
    print('Link tapped: $url');
  },
)

高级用法

SmartText 还支持更多高级功能,例如自定义正则表达式来识别特定的文本模式,或者自定义如何处理识别的文本。

SmartText(
  'Custom pattern: #1234',
  style: TextStyle(fontSize: 16),
  patterns: [
    SmartTextPattern(
      pattern: r'#\d+',
      style: TextStyle(color: Colors.red),
      onTap: (text) {
        print('Custom pattern tapped: $text');
      },
    ),
  ],
)
回到顶部