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

1 回复

更多关于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方法已经足够满足需求。

回到顶部