Flutter文本安全处理插件safe_text的使用

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

Flutter文本安全处理插件safe_text的使用

Safe Text 是一个Flutter包,旨在从应用程序中的文本输入中过滤出冒犯性和侮辱性语言。通过其易于使用的界面,您可以集成强大的脏话过滤功能,以确保更安全和更具包容性的用户体验。只需将 BadWordFilter 集成到您的Flutter项目中,即可自动检测并用星号(*)替换不适当的语言,或者根据您应用程序的需求进行自定义。

Features

  • Profanity Filtering: 自动检测并过滤掉文本输入中的冒犯性语言。
  • Customizable: 自定义过滤行为和替换字符,以满足您应用程序的要求。
  • Easy Integration: 与Flutter项目的简单集成,使实现脏话过滤功能变得无缝。
  • Enhanced User Experience: 通过从文本输入中移除不适当的语言,促进更安全和更具包容性的用户体验。

Getting Started

添加依赖

要使用 SafeText 类来过滤掉文本输入中的脏话,请按照以下步骤操作:

  1. BadWordFilter 包添加到您的 pubspec.yaml 文件中:

    dependencies:
      safe_text: ^1.0.7 # 替换为最新版本
    
  2. 在Dart文件中导入该包:

    import 'package:safe_text/safe_text.dart';
    
  3. 使用 filterText 方法来过滤掉文本输入中的脏话。下面是如何使用它的示例:

    String filteredText = SafeText.filterText(
      text: "Your input text here",
      extraWords: ["extra", "bad", "words"],
      excludedWords: ["exclude", "these"],
      useDefaultWords: true,
      fullMode: true,
      obscureSymbol: "*",
    );
    
  4. 参数说明:

    • text (必填): 要过滤的文本。
    • extraWords (可选): 要过滤掉的额外脏话列表(默认为标准脏话列表)。
    • excludedWords (可选): 不应被过滤掉的脏话列表。
    • useDefaultWords (可选): 是否使用默认的脏话列表(默认为 true)。
    • fullMode (可选): 是否完全过滤掉脏话,或仅模糊中间部分,保留首尾字符可见(默认为 true)。
    • obscureSymbol (可选): 用于模糊脏话的符号(默认为 *)。
  5. 使用 containsBadWord 方法检查文本是否包含任何脏话。此方法在单独的线程中运行,以避免阻塞主线程。

    Future<void> checkTextForBadWords() async {
      bool containsBadWord = await SafeText.containsBadWord(
        text: "Your input text here",
        extraWords: ["extra", "bad", "words"], // Optional
        excludedWords: ["exclude", "these"], // Optional
        useDefaultWords: true, // Defaults to true
      );
      
      if (containsBadWord) {
        print("The text contains inappropriate content.");
      } else {
        print("The text is clean.");
      }
    }
    
  6. 使用 containsPhoneNumber 方法检查文本是否包含任何电话号码,无论是数字、单词还是混合格式。你还可以指定电话号码的最小和最大长度。

    void detectPhoneNumbers() {
      String text1 = "Call me at 987 six 543210";
      String text2 = "My number is nine eight seven six five four three two one zero";
      String text3 = "Contact: 1234 five six seven eight nine";
    
      bool containsPhone1 = SafeText.containsPhoneNumber(
        text: text1,
        minLength: 7, // Minimum length for a valid phone number
        maxLength: 15, // Maximum length for a valid phone number
      );
    
      bool containsPhone2 = SafeText.containsPhoneNumber(
        text: text2,
        minLength: 7,
        maxLength: 15,
      );
    
      bool containsPhone3 = SafeText.containsPhoneNumber(
        text: text3,
        minLength: 7,
        maxLength: 15,
      );
    
      print(containsPhone1); // true, detects "9876543210"
      print(containsPhone2); // true, detects "9876543210"
      print(containsPhone3); // true, detects "123456789"
    }
    
  7. 通过过滤掉应用程序文本输入中的冒犯性语言,享受更安全和更具包容性的用户体验!

Example

下面是一个如何将 SafeText 类集成到Flutter应用中的示例:

import 'package:flutter/material.dart';
import 'package:safe_text/safe_text.dart'; // 导入 safe_text 包

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'BadWordFilter Demo',
      home: SafeTextDemo(), // 设置主页为 SafeTextDemo 组件
    );
  }
}

class SafeTextDemo extends StatefulWidget {
  const SafeTextDemo({super.key});

  @override
  State<SafeTextDemo> createState() => _SafeTextDemoState();
}

class _SafeTextDemoState extends State<SafeTextDemo> {
  String _textInput = ''; // 存储用户输入文本的变量

  // 过滤掉用户输入中的脏话的方法
  void _filterText() {
    setState(() {
      // 调用 SafeText 类中的 filterText 方法
      _textInput = SafeText.filterText(
        text: _textInput, // 传递用户输入的文本
        extraWords: [
          'extra',
          'bad',
          'words'
        ], // 额外的脏话列表
        excludedWords: [
          'exclude',
          'these',
          'words'
        ], // 排除的单词列表
        useDefaultWords: true, // 是否使用默认的脏话列表
        fullMode: true, // 是否完全过滤掉脏话,或仅模糊中间部分
        obscureSymbol: '*', // 用于模糊脏话的符号
      );
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('BadWordFilter Demo'),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              TextField(
                onChanged: (value) {
                  setState(() {
                    _textInput = value; // 更新用户输入的文本
                  });
                },
                decoration: const InputDecoration(
                  hintText: 'Enter your text here...', // TextField 的占位符文本
                ),
              ),
              const SizedBox(height: 20),
              ElevatedButton(
                onPressed: _filterText, // 按钮按下时调用 _filterText 方法
                child: const Text('Filter Bad Words'), // 按钮文本
              ),
              const SizedBox(height: 20),
              const Text(
                'Filtered Text:', // 显示在过滤后文本上方的文本
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
              Text(_textInput), // 显示过滤后的文本
            ],
          ),
        ),
      ),
    );
  }
}

这个完整的示例展示了如何创建一个简单的Flutter应用程序,允许用户输入文本,并使用 SafeText 包来过滤掉其中的脏话。用户可以实时看到过滤后的结果。


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

1 回复

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


当然,safe_text 是一个用于 Flutter 的文本安全处理插件,它可以帮助开发者在显示文本时避免潜在的安全风险,比如防止 XSS(跨站脚本攻击)等问题。虽然 safe_text 插件的具体实现细节和 API 可能会有所不同,但我可以基于一般的使用场景给出一个示例代码,展示如何在 Flutter 应用中使用该插件来处理文本。

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

dependencies:
  flutter:
    sdk: flutter
  safe_text: ^最新版本号  # 请替换为实际的最新版本号

然后运行 flutter pub get 来获取依赖。

接下来,在你的 Flutter 应用中,你可以这样使用 safe_text 插件来处理文本:

import 'package:flutter/material.dart';
import 'package:safe_text/safe_text.dart'; // 假设插件的导入路径是这样的

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Safe Text Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SafeTextDemo(),
    );
  }
}

class SafeTextDemo extends StatelessWidget {
  // 假设这是从某个不安全的来源获取的文本,可能包含恶意脚本
  String unsafeText = "<script>alert('XSS Attack!')</script>Hello, World!";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Safe Text Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            // 使用 SafeText 小部件来显示处理过的文本
            SafeText(
              text: unsafeText,
              options: SafeTextOptions(
                // 根据需要配置选项,比如是否允许特定的 HTML 标签
                allowedTags: ['b', 'i', 'u'], // 仅允许这些标签
              ),
            ),
            SizedBox(height: 20),
            // 未经处理的文本(仅作为对比展示,实际应用中应避免这样直接显示)
            Text(
              unsafeText,
              style: TextStyle(color: Colors.red), // 用红色表示这是不安全的文本
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个 SafeTextDemo 小部件,它包含一个从不安全来源获取的文本 unsafeText。我们使用 SafeText 小部件来显示这个文本,并通过 SafeTextOptions 配置允许的 HTML 标签。这样,任何不在 allowedTags 列表中的标签(如 <script>)都会被过滤掉,从而防止 XSS 攻击。

请注意,实际的 safe_text 插件可能有不同的 API 和配置选项,因此你需要参考该插件的官方文档来调整上述代码。如果 safe_text 插件提供了更多的安全处理功能(如 URL 编码、HTML 实体转换等),你也可以根据需求进行相应的配置和使用。

回到顶部