Flutter智能文本处理插件smart_text_flutter的使用
Flutter智能文本处理插件smart_text_flutter的使用
Smart Text Flutter
Smart Text Flutter
是一个用于在纯文本中查找链接的Flutter插件。它在iOS上使用 NSDataDetector ,在Android上使用 TextClassifier 。
平台支持
Android | iOS | |
---|---|---|
支持 | SDK 19+ | 11.0+ |
支持的链接类型
enum ItemSpanType { address, phone, email, datetime, url, text }
使用方法
要在项目中使用此插件,需要在 pubspec.yaml
文件中添加 smart_text_flutter
依赖。
示例代码
以下是一个完整的示例,展示了如何使用 smart_text_flutter
插件来处理包含多种类型链接的文本,并将这些链接高亮显示。
import 'package:flutter/material.dart';
import 'package:smart_text_flutter/smart_text_flutter.dart';
void main() {
runApp(const SmartTextFlutterExample());
}
class SmartTextFlutterExample extends StatefulWidget {
const SmartTextFlutterExample({super.key});
@override
State<SmartTextFlutterExample> createState() => _SmartTextFlutterExampleState();
}
class _SmartTextFlutterExampleState extends State<SmartTextFlutterExample> {
final List<String> messageTexts = [];
late final TextEditingController _messageController = TextEditingController();
@override
void dispose() {
_messageController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: const Text('Smart Text Flutter'),
),
body: Column(
children: [
Expanded(
child: ListView.builder(
itemCount: messageTexts.length,
itemBuilder: (context, index) => Align(
alignment: Alignment.centerLeft,
child: Container(
constraints: BoxConstraints(
maxWidth: MediaQuery.sizeOf(context).width * 0.8,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16),
color: Colors.blueGrey.shade50,
),
padding: const EdgeInsets.all(8),
margin: const EdgeInsets.all(8),
child: SmartText(
messageTexts[index],
config: const ItemSpanConfig(
textStyle: TextStyle(color: Colors.blue),
),
addressConfig: ItemSpanConfig(
textStyle: const TextStyle(color: Colors.red),
onClicked: (data) => print('Address clicked: $data'),
),
emailConfig: ItemSpanConfig(
textStyle: const TextStyle(color: Colors.green),
onClicked: (data) => print('Email clicked: $data'),
),
phoneConfig: ItemSpanConfig(
textStyle: const TextStyle(color: Colors.purple),
onClicked: (data) => print('Phone clicked: $data'),
),
urlConfig: ItemSpanConfig(
textStyle: const TextStyle(color: Colors.orange),
onClicked: (data) => print('URL clicked: $data'),
),
dateTimeConfig: ItemSpanConfig(
textStyle: const TextStyle(color: Colors.brown),
onClicked: (data) => print('DateTime clicked: $data'),
),
),
),
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
children: [
Expanded(
child: TextField(
controller: _messageController,
decoration: const InputDecoration(
hintText: 'Enter text',
contentPadding: EdgeInsets.all(8),
border: OutlineInputBorder(),
),
),
),
const SizedBox(width: 8),
ElevatedButton(
onPressed: () {
setState(() => messageTexts.add(_messageController.text));
_messageController.clear();
},
child: const Text('Send Message'),
),
],
),
),
const SizedBox(height: 40),
],
),
),
);
}
}
注意事项
- DateTime 不支持于 Android
- 地址不支持于 Android 8.1 (API 27) 及以下版本
- DateTime 点击没有默认实现(点击时会返回格式化后的日期)
属性说明
SmartText
的属性包括但不限于:
text
: 需要处理的文本内容。config
: 全局配置,影响整个文本的样式和点击事件。addressConfig
,phoneConfig
,emailConfig
,urlConfig
,dateTimeConfig
: 分别针对不同类型链接的配置。humanize
: 是否去除 URL 中的协议部分(如 http:// 或 https://)。- 其他属性与 Flutter 的
Text
组件相同,如strutStyle
,textAlign
,textDirection
等。
ItemSpanConfig
ItemSpanConfig
用于配置特定类型的链接样式和点击事件:
/// The [TextStyle] for the link
final TextStyle? textStyle;
/// The method called when a link is clicked
final void Function(String data)? onClicked;
完整的 SmartText 示例
SmartText(
text,
config: const ItemSpanConfig(
textStyle: TextStyle(color: Colors.blue),
),
addressConfig: ItemSpanConfig(
textStyle: const TextStyle(color: Colors.red),
onClicked: (data) => print('Address clicked: $data'),
),
emailConfig: ItemSpanConfig(
textStyle: const TextStyle(color: Colors.green),
onClicked: (data) => print('Email clicked: $data'),
),
phoneConfig: ItemSpanConfig(
textStyle: const TextStyle(color: Colors.purple),
onClicked: (data) => print('Phone clicked: $data'),
),
urlConfig: ItemSpanConfig(
textStyle: const TextStyle(color: Colors.orange),
onClicked: (data) => print('URL clicked: $data'),
),
dateTimeConfig: ItemSpanConfig(
textStyle: const TextStyle(color: Colors.brown),
onClicked: (data) => print('DateTime clicked: $data'),
),
)
Bug 和功能请求
如果遇到任何问题或有功能需求,请在 GitHub 上提交 issue 或 feature request。欢迎提交 Pull Request!
通过以上内容,您可以快速上手并使用 smart_text_flutter
插件,在您的 Flutter 应用中实现智能文本处理和链接识别功能。
更多关于Flutter智能文本处理插件smart_text_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter智能文本处理插件smart_text_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用Flutter智能文本处理插件smart_text_flutter
的代码示例。这个插件可以帮助你进行各种文本处理操作,比如文本格式化、链接提取、表情符号处理等。假设你已经将smart_text_flutter
添加到了你的pubspec.yaml
文件中。
首先,确保你的pubspec.yaml
包含以下依赖:
dependencies:
flutter:
sdk: flutter
smart_text_flutter: ^最新版本号 # 替换为当前最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中使用这个插件。以下是一个简单的示例,展示如何使用smart_text_flutter
来提取文本中的链接和表情符号:
import 'package:flutter/material.dart';
import 'package:smart_text_flutter/smart_text_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Smart Text Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: SmartTextDemo(),
);
}
}
class SmartTextDemo extends StatefulWidget {
@override
_SmartTextDemoState createState() => _SmartTextDemoState();
}
class _SmartTextDemoState extends State<SmartTextDemo> {
String _text =
"Hello! 👋 Check out this link: https://flutter.dev and this one too: http://example.com. 😊";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Smart Text Flutter Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Original Text:', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
Text(_text, style: TextStyle(fontSize: 16)),
SizedBox(height: 16),
Text('Extracted Links:', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
_buildLinks(),
SizedBox(height: 16),
Text('Extracted Emojis:', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
_buildEmojis(),
],
),
),
);
}
Widget _buildLinks() {
List<String> links = SmartTextParser(_text).extractLinks();
return Wrap(
spacing: 8,
runSpacing: 8,
children: links.map((link) => Chip(
label: Text(link),
backgroundColor: Colors.blue.shade100,
)).toList(),
);
}
Widget _buildEmojis() {
List<String> emojis = SmartTextParser(_text).extractEmojis();
return Wrap(
spacing: 8,
runSpacing: 8,
children: emojis.map((emoji) => Chip(
label: Text(emoji),
backgroundColor: Colors.yellow.shade100,
)).toList(),
);
}
}
在这个示例中,我们做了以下几件事:
- 定义了一个包含链接和表情符号的字符串
_text
。 - 使用
SmartTextParser
类来解析这个字符串,并提取其中的链接和表情符号。 - 使用
Wrap
和Chip
组件来显示提取出的链接和表情符号。
请注意,SmartTextParser
是假设smart_text_flutter
插件提供的一个类,用于解析文本。实际使用中,你需要根据插件的实际API文档进行调整。如果插件的API与假设不同,请查阅最新的官方文档并做相应修改。