Flutter文本处理插件flutter_process_text的使用

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

Flutter文本处理插件flutter_process_text的使用

插件简介

Flutter Process Text Plugin 是一个用于在Android设备上处理文本数据的插件。它允许应用程序通过系统共享功能获取文本,并进行处理。

Flutter_Process_Text

兼容性

  • ✅ Android
  • ❌ iOS (存在问题:iOS支持尚未实现)

为什么使用Flutter Process Text?

Flutter Process Text Plugin以其以下特性著称:

  • 快速、高性能和兼容性强
  • 免费且开源
  • 生产环境就绪
  • 使应用响应更敏捷

特性

  • ✅ 监听文本处理流
  • ✅ 从文本处理意图活动打开应用
  • ✅ 获取待处理的意图文本

演示

以下是应用运行和未运行时的演示:

应用运行 应用未运行
App Running App Not Running

快速开始

第一步:将插件添加到项目中

pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter_process_text: <最新版本>

运行 flutter pub get 获取包。

第二步:创建新的Activity

android\app\src\main\AndroidManifest.xml 中添加以下代码:

<activity 
    android:name=".ProcessTextActivity" 
    android:label="Process_Text"
    android:theme="@android:style/Theme.NoDisplay">
        <intent-filter>
            <action android:name="android.intent.action.PROCESS_TEXT" />
            <data android:mimeType="text/plain"/>
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
</activity>

注意:可以根据需要更改 android:nameandroid:label 的值。

第三步:创建新的Activity类

创建一个新的Java/Kotlin文件,名称与第二步中的 android:name 相同。然后将以下代码粘贴到新文件中:

package com.divyanshushekhar.flutter_process_text_example;

import com.divyanshushekhar.flutter_process_text.FlutterProcessTextPlugin;
import io.flutter.embedding.android.FlutterActivity;
import android.os.Bundle;

public class ProcessTextActivity extends FlutterActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        boolean issAppRunning = MainActivity.getIsAppRunning();
        FlutterProcessTextPlugin.listenProcessTextIntent(issAppRunning);
    }
}

注意:不要忘记更改上述代码中的包名。

第四步:修改MainActivity

MainActivity 类中进行必要的更改:

package com.divyanshushekhar.flutter_process_text_example;

import io.flutter.embedding.android.FlutterActivity;

import android.app.ActivityManager;
import android.content.Context;
import android.os.Bundle;
import java.util.List;

public class MainActivity extends FlutterActivity {
   private static boolean isAppRunning;

   public static boolean getIsAppRunning() {
     return isAppRunning;
   }

   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
        isAppRunning = isAppRunning(this);
   }

    public static boolean isAppRunning(Context context) {
        final String packageName = context.getPackageName();
        final ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        final List<ActivityManager.RunningAppProcessInfo> processInfo = activityManager.getRunningAppProcesses();
        if (processInfo != null)
        {
            for (final ActivityManager.RunningAppProcessInfo info : processInfo) {
                if (info.processName.equals(packageName)) {
                    return true;
                }
            }
        }
        return false;
    }
}
第五步:连接到Flutter

在页面的 initState() 方法中调用 FlutterProcessText 类的初始化方法:

FlutterProcessText.initialize();

或者:

FlutterProcessText.initialize(
    showConfirmationToast: true,
    showRefreshToast: true,
    showErrorToast: true,
    confirmationMessage: "Text Added",
    refreshMessage: "Got all Text",
    errorMessage: "Some Error",
);
第六步:处理流

有两种方式可以处理流:创建 StreamSubscription 来监听传入的数据或存储 Stream 并在 StreamBuilder 中使用。

late final StreamSubscription _processText;
String text? = '';

[@override](/user/override)
void initState() {
  super.initState();
  FlutterProcessText.initialize(
    showToast: true,
    confirmationMessage: "Text Added",
    refreshMessage: "Got all Text",
    errorMessage: "Some Error",
  );

  _processText = FlutterProcessText.getProcessTextStream.listen((event) {
    setState(() {
      text = event;
    });
  });
}

[@override](/user/override)
void dispose() {
  super.dispose();
  _processText.cancel();
}

或者:

late final Stream<String> _processText;
_processText = FlutterProcessText.getProcessTextStream;

现在可以在 StreamBuilder 中使用该流:

StreamBuilder<String?>(
  stream: _processText,
  builder: (context, snapshot) {
    return Text('Fetched Data: ${snapshot.data}');
  },
),

获取待处理的数据:

String? text = await FlutterProcessText.refreshProcessText;

完整示例代码

以下是一个完整的示例代码,展示了如何使用 flutter_process_text 插件:

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

import 'package:flutter_process_text/flutter_process_text.dart';

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

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({
    Key? key,
  }) : super(key: key);

  [@override](/user/override)
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  late final Stream<String> _processText;
  String? refreshedData = '';

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化插件
    FlutterProcessText.initialize(
      showConfirmationToast: true,
      showRefreshToast: true,
      showErrorToast: true,
      confirmationMessage: "Text Added",
      refreshMessage: "Got all Text",
      errorMessage: "Some Error",
    );
    // 获取文本处理流
    _processText = FlutterProcessText.getProcessTextStream;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Flutter Process Text Plugin'),
        actions: [
          // 刷新按钮
          refreshedData != null
              ? IconButton(
                  icon: Icon(Icons.refresh),
                  onPressed: () async {
                    dynamic result =
                        await FlutterProcessText.refreshProcessText;
                    setState(() {
                      refreshedData = result;
                    });
                  },
                )
              : SizedBox(),
        ],
      ),
      body: Column(
        children: [
          SizedBox(height: 100),
          Center(
            child: StreamBuilder<String?>(
              stream: _processText,
              builder: (context, snapshot) {
                // 显示从流中获取的数据
                return Text('Fetched Data: ${snapshot.data}');
              },
            ),
          ),
          SizedBox(height: 150),
          // 显示刷新后的数据
          Text("Refreshed Data: ${refreshedData.toString()}"),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何使用Flutter文本处理插件flutter_process_text的代码案例。这个插件提供了一些文本处理功能,比如文本高亮、关键词提取等。为了演示,我们将创建一个简单的Flutter应用,展示如何使用该插件进行文本高亮。

首先,确保在pubspec.yaml文件中添加flutter_process_text依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_process_text: ^x.y.z  # 请替换为最新版本号

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

接下来,我们编写Flutter应用代码。

main.dart

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

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

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

class TextProcessingScreen extends StatefulWidget {
  @override
  _TextProcessingScreenState createState() => _TextProcessingScreenState();
}

class _TextProcessingScreenState extends State<TextProcessingScreen> {
  final String text = "Flutter is an open-source UI software development kit created by Google.";
  final List<String> keywords = ["Flutter", "open-source", "Google"];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Text Processing 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),
            ),
            SizedBox(height: 8),
            Text(text),
            SizedBox(height: 24),
            Text(
              "Processed Text (Highlighted Keywords):",
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            SizedBox(height: 8),
            _buildProcessedText(),
          ],
        ),
      ),
    );
  }

  Widget _buildProcessedText() {
    return ProcessText(
      text: text,
      textStyle: TextStyle(fontSize: 16),
      highlight: keywords,
      highlightStyle: TextStyle(color: Colors.red, backgroundColor: Colors.yellow),
      matchCase: false, // 是否区分大小写
      wholeWord: true,  // 是否匹配整个单词
    );
  }
}

解释

  1. 依赖添加:在pubspec.yaml中添加flutter_process_text依赖。
  2. MaterialApp:创建一个基本的Flutter应用。
  3. TextProcessingScreen:定义一个有状态的Widget,用于显示原始文本和处理后的文本。
  4. _buildProcessedText:使用ProcessText小部件来处理文本并高亮关键词。ProcessText的参数包括:
    • text:要处理的原始文本。
    • textStyle:原始文本的样式。
    • highlight:需要高亮的关键词列表。
    • highlightStyle:高亮关键词的样式。
    • matchCase:是否区分大小写。
    • wholeWord:是否匹配整个单词。

运行这个应用,你将看到原始文本和处理后的文本,其中关键词被高亮显示。

这个示例展示了flutter_process_text插件的基本用法,可以根据需要进行扩展和修改。

回到顶部