Flutter字符串包含判断插件string_contains的使用
Flutter字符串包含判断插件string_contains的使用
简介
string_contains
是一个用于Flutter项目的Dart包,提供了对字符串进行多种内容检测和处理的功能。它能够帮助开发者轻松地检查字符串中是否包含特定的内容(如电话号码、URL、电子邮件地址等),并且可以对这些内容进行清理或隐藏。
以下是该插件的一些关键特性:
- 轻量级小部件:提供Linkify和Clean两个小部件。
- 字符串扫描扩展:为字符串添加了多种扩展方法,例如检测不良词汇、网址、链接、电子邮件地址、电话号码、话题标签和提及符号等。
安装步骤
1. 添加依赖
在项目的pubspec.yaml
文件中添加如下依赖项:
dependencies:
string_contains: ^2.4.0
2. 安装依赖
通过命令行工具安装所需的依赖包:
-
使用
pub
:$ dart pub add string_contains
-
或者使用
flutter
:$ flutter pub add string_contains
3. 导入库
在需要使用的Dart文件顶部导入此库:
import 'package:string_contains/string_contains.dart';
示例代码
以下是一个完整的Flutter应用示例,展示了如何使用string_contains
来检测和处理不同的字符串内容类型:
// 忽略未使用的import警告
// ignore_for_file: avoid_print
import 'package:flutter/material.dart';
import 'package:string_contains/string_contains.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: 'StringContains Example',
theme: ThemeData(
primarySwatch: Colors.blue,
useMaterial3: true,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final String? stringContainsBadWords = 'I am CEO, Bitch';
final String stringContainsUrl = 'Please visit our website : https://betterx.io/.';
final String stringContainsMultipleUrls =
'Please visit our website : https://betterx.io/ and you can search for any thing on google : google.com, I love Dart : https://dart.dev/, you can practice on : https://dartpad.dev/. Flutter uses Dart, you can create your own app with Flutter : https://flutter.dev/, this is a good example of Flutter : https://flutter.dev/docs/get-started/.';
final String stringContainsEmail =
"BetterX.io : Let's build something Better, User-centered & beautiful together\n for more info contact us at : info@betterx.io. My Personal Email : ravikumar2710999@gmail.com.\n A fake email : gedoye9446@roxoas.com.";
final String stringContainsPhoneNumber =
'''My Phone Number : +91-9000000001 and some of other eg. of phone numbers ->
/// 0. 9000000769
/// 1. (123) 456-7890
/// 2. (123)456-7890
/// 3. 123-456-7890
/// 4. 123.456.7890
/// 5. 1234567890
/// 6. +31636363634
/// 7. 075-63546725
''';
final String normalString = 'I love Dart and Flutter';
final String stringContainsHashtags =
'I love #dart and #flutter. @flutter is #awesome. #dart are #amazing.';
String? stringOfBadWords = 'I am ceo bitch';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('String Contains'),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: Center(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// 检测并显示包含不良词汇的结果
Text(
'$stringContainsBadWords contains bad-word/profane-word : ${stringContainsBadWords?.containsBadWord() == true ? 'Yes' : 'No'}\n clean bad words: ${stringContainsBadWords?.cleanBadWords()}',
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleLarge?.copyWith(
color: Theme.of(context).colorScheme.error,
),
),
const Divider(),
// 检测并显示包含单个URL的结果
Text(
'$stringContainsUrl contains url : ${stringContainsUrl.containsUrl() == true ? 'Yes' : 'No'}\n get all urls: ${stringContainsUrl.getUrls()}',
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleLarge?.copyWith(
color: Theme.of(context).colorScheme.error,
),
),
const Divider(),
// 检测并显示包含多个URL的结果
Text(
'$stringContainsMultipleUrls contain urls : ${stringContainsMultipleUrls.containsUrl() == true ? 'Yes' : 'No'}\n get all urls:\n${stringContainsMultipleUrls.getUrls().join('\n')}',
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleLarge?.copyWith(
color: Theme.of(context).colorScheme.error,
),
),
const Divider(),
// 检测并显示包含电子邮件地址的结果
Text(
'$stringContainsEmail contains email : ${stringContainsEmail.containsEmail() == true ? 'Yes' : 'No'}\n get all emails:\n${stringContainsEmail.getEmails().join('\n')}\n hide email: ${stringContainsEmail.hideEmails()}',
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleLarge?.copyWith(
color: Theme.of(context).colorScheme.error,
),
),
const Divider(),
// 检测并显示包含电话号码的结果
Text(
'$stringContainsPhoneNumber contains phone number : ${stringContainsPhoneNumber.containsPhoneNumber() == true ? 'Yes' : 'No'}\n get all phone numbers:\n${stringContainsPhoneNumber.getPhoneNumbers().join('\n')}\n hide phone numbers: ${stringContainsPhoneNumber.hidePhoneNumbers(obscuringCharacter: '\$')}',
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleLarge?.copyWith(
color: Theme.of(context).colorScheme.error,
),
),
const Divider(),
// 检测并显示普通字符串的结果
Text(
'$normalString contains dart, flutter : ${normalString.containsWords(['flutter', 'dart']) == true ? 'Yes' : 'No'}, cleaned string: ${normalString.cleanWords(['flutter', 'dart'])}',
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleLarge?.copyWith(
color: Theme.of(context).colorScheme.error,
),
),
const Divider(),
// 检测并显示包含话题标签的结果
Text(
'$stringContainsHashtags contains hashtags : ${stringContainsHashtags.containsHashtag() == true ? 'Yes' : 'No'}\n get all hashtags:\n${stringContainsHashtags.getHashtags().join('\n')}',
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleLarge?.copyWith(
color: Theme.of(context).colorScheme.error,
),
),
const Divider(),
// 检测并显示包含提及符号的结果
Text(
'$stringContainsHashtags contains mentions : ${stringContainsHashtags.containsMention() == true ? 'Yes' : 'No'}\n get all mentions:\n${stringContainsHashtags.getMentions().join('\n')}',
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleLarge?.copyWith(
color: Theme.of(context).colorScheme.error,
),
),
const Divider(),
// 清理并显示包含不良词汇的文本
Text(
stringOfBadWords.cleanBadWords(),
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleLarge?.copyWith(
color: Theme.of(context).primaryColor,
),
),
const Divider(),
// 使用CleanWidget清理并显示文本
CleanWidget(
isSelectable: true,
source:
'$stringContainsBadWords\n$stringContainsUrl\n$stringContainsMultipleUrls\n$stringContainsEmail\n$stringContainsPhoneNumber\n$normalString\n\n',
),
const Divider(),
// 使用StringContainsWidget高亮并显示不同类型的内容
StringContainsWidget(
isSelectable: true,
source:
'$stringContainsBadWords\n$stringContainsUrl\n$stringContainsMultipleUrls\n$stringContainsEmail\n$stringContainsPhoneNumber\n$normalString\n$stringContainsHashtags',
onTap: (element) {
print(
'element is a ${element.value} and type of ${element.type}');
if (element.type == StringContainsElementType.words) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'${element.value} is awesome!!',
),
duration: const Duration(seconds: 2),
dismissDirection: DismissDirection.horizontal,
),
);
} else if (element.type == StringContainsElementType.hashtag) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'${element.value} is a hashtag!!',
),
duration: const Duration(seconds: 2),
dismissDirection: DismissDirection.horizontal,
),
);
} else if (element.type == StringContainsElementType.mention) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'${element.value} is a mention!!',
),
duration: const Duration(seconds: 2),
dismissDirection: DismissDirection.horizontal,
),
);
} else if (element.type == StringContainsElementType.email) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'${element.value} is an email!!',
),
duration: const Duration(seconds: 2),
dismissDirection: DismissDirection.horizontal,
),
);
} else if (element.type == StringContainsElementType.url) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'${element.value} is a url!!',
),
duration: const Duration(seconds: 2),
dismissDirection: DismissDirection.horizontal,
),
);
} else if (element.type == StringContainsElementType.phoneNumber) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'${element.value} is a phone number!!',
),
duration: const Duration(seconds: 2),
dismissDirection: DismissDirection.horizontal,
),
);
}
},
highLightWords: const ['Flutter', 'Dart'],
caseSensitive: false,
highlightWordsStyle: const TextStyle(color: Colors.red),
types: const <StringContainsElementType>[
StringContainsElementType.email,
StringContainsElementType.url,
StringContainsElementType.phoneNumber,
StringContainsElementType.hashtag,
StringContainsElementType.mention,
StringContainsElementType.words,
],
),
],
),
),
),
),
);
}
}
这段代码创建了一个简单的Flutter应用程序,演示了如何使用string_contains
插件的各种功能来检测和处理不同类型的字符串内容。每个部分都包含了具体的用法示例,并且结果会直接展示在界面上。希望这个例子可以帮助您更好地理解和使用这个强大的工具!
更多关于Flutter字符串包含判断插件string_contains的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter字符串包含判断插件string_contains的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,虽然通常我们可以使用Dart语言内置的功能来进行字符串包含判断,但如果你确实想使用string_contains
这个插件(假设它存在,因为Flutter生态系统中并没有一个广泛认知的名为string_contains
的官方或广泛使用的插件,这里我将模拟一个类似的功能),你可以通过自定义逻辑或封装来实现类似的功能。
不过,为了展示如何在Flutter中进行字符串包含判断,我们可以直接使用Dart语言的功能,并模拟一个插件的使用方式。实际上,在Dart中,你可以使用contains
方法来检查一个字符串是否包含另一个字符串。
下面是一个简单的例子,展示了如何在Flutter中使用Dart的contains
方法来判断字符串是否包含另一个字符串:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('String Contains Example'),
),
body: Center(
child: StringContainsExample(),
),
),
);
}
}
class StringContainsExample extends StatefulWidget {
@override
_StringContainsExampleState createState() => _StringContainsExampleState();
}
class _StringContainsExampleState extends State<StringContainsExample> {
final String mainString = "Hello, Flutter community!";
String searchString = "";
bool contains = false;
void checkContains() {
setState(() {
contains = mainString.contains(searchString);
});
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextField(
decoration: InputDecoration(labelText: 'Search String'),
onChanged: (value) {
searchString = value;
checkContains();
},
),
SizedBox(height: 20),
Text(
'Does "$mainString" contain "$searchString"? ${contains ? 'Yes' : 'No'}',
style: TextStyle(fontSize: 20),
),
],
);
}
}
在这个例子中,我们创建了一个简单的Flutter应用,其中包含一个TextField
用于输入要搜索的字符串,和一个Text
组件用于显示主字符串是否包含搜索字符串的结果。
mainString
是我们要搜索的主字符串。searchString
是用户在TextField
中输入的字符串。contains
是一个布尔值,表示主字符串是否包含搜索字符串。checkContains
方法使用Dart的contains
方法来更新contains
的值,并在UI中反映出来。
虽然这个例子没有直接使用名为string_contains
的插件,但它展示了如何在Flutter中实现字符串包含判断的基本功能。如果你确实有一个特定的string_contains
插件,并且它提供了额外的功能或API,你应该参考该插件的文档来使用它。不过,在大多数情况下,Dart内置的contains
方法已经足够满足需求。