Flutter文本识别插件ots的使用

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

Flutter 文本识别插件 ots 的使用

在本教程中,我们将介绍如何使用 Flutter 插件 ots 来展示加载器、通知、互联网连接变化等。以下是详细的步骤和代码示例。

安装

首先,在您的 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  flutter:
    sdk: flutter
  ...
  ots:
    git:
      url: git://github.com/fayaz07/ots.git

然后运行 flutter pub get 来安装该库。

如何使用

以下是一个基本的示例,展示了如何在 Flutter 应用程序中使用 ots 插件。

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:ots/ots.dart';
import 'package:ots/widgets/notification.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return OTS(
      showNetworkUpdates: true,
      persistNoInternetNotification: false,
      bottomInternetNotificationPadding: 16.0,
      child: CupertinoApp(
        title: 'OTS Test',
        home: Home(),
      ),
    );
  }
}

final textStyle = TextStyle(color: Colors.white);
final headerStyle = TextStyle(color: Colors.black, fontSize: 18.0);

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  NotificationWidgetState instance;

  Widget notifications() {
    return Wrap(
      direction: Axis.horizontal,
      runSpacing: 8.0,
      spacing: 8.0,
      children: [
        Row(
          children: [
            Expanded(child: Text("Notifications demo", style: headerStyle,)),
          ],
        ),
        ElevatedButton(
          child: Text('Success', style: textStyle),
          style: ButtonStyle(
              backgroundColor: MaterialStateProperty.all(Colors.green)
          ),
          onPressed: () {
            showNotification(
              message: 'Hello, this is success notification',
              title: 'Success',
              backgroundColor: Colors.green,
              autoDismissible: true,
              notificationDuration: 2500,
            );
          },
        ),
        ElevatedButton(
          child: Text('Error', style: textStyle),
          style: ButtonStyle(
              backgroundColor: MaterialStateProperty.all(Colors.red)
          ),
          onPressed: () {
            showNotification(
              message: 'Hello, this is error notification',
              title: 'Error',
              backgroundColor: Colors.red,
              autoDismissible: true,
              notificationDuration: 2500,
            );
          },
        ),
        ElevatedButton(
          child: Text('Warning', style: textStyle),
          style: ButtonStyle(
            backgroundColor: MaterialStateProperty.all(Colors.orange)
          ),
          onPressed: () {
            showNotification(
              message: 'Hello, this is warning notification',
              title: 'Warning',
              backgroundColor: Colors.orange,
              autoDismissible: true,
              notificationDuration: 2500,
            );
          },
        ),
        ElevatedButton(
          child: Text('Info', style: textStyle),
          style: ButtonStyle(
              backgroundColor: MaterialStateProperty.all(Colors.blue)
          ),
          onPressed: () {
            showNotification(
              message: 'Hello, this is info notification',
              title: 'Info',
              backgroundColor: Colors.blue,
              autoDismissible: true,
              notificationDuration: 2500,
            );
          },
        ),
        ElevatedButton(
          child: Text('Custom handler', style: textStyle),
          onPressed: () async {
            instance = await showNotification(
              message: 'Hello, this will persist until you call close function',
              title: 'Persisting',
              backgroundColor: Colors.blue,
              autoDismissible: false,
            );
            await Future.delayed(Duration(seconds: 3));
            print("Closing notification now");
            instance.close();
          },
        ),
      ],
    );
  }

  Widget loader() {
    return Wrap(
      direction: Axis.horizontal,
      runSpacing: 8.0,
      spacing: 8.0,
      children: [
        Row(
          children: [
            Expanded(child: Text("Loader", style: headerStyle,)),
          ],
        ),
        ElevatedButton(
          child: Text('Show Loader', style: textStyle),
          onPressed: () async {
            showLoader(
              isModal: true,
            );
            await Future.delayed(Duration(seconds: 3));
            hideLoader();
          },
        ),
        ElevatedButton(
          child: Text('Show modal Loader', style: textStyle),
          onPressed: () async {
            showLoader(
                isModal: true,
                modalColor: Colors.green.withOpacity(0.4),
                modalDismissible: false
            );
            await Future.delayed(Duration(seconds: 3));
            hideLoader();
          },
        ),
      ],
    );
  }

  Widget toast() {
    return Wrap(
      direction: Axis.horizontal,
      runSpacing: 8.0,
      spacing: 8.0,
      children: [
        Row(
          children: [
            Expanded(child: Text("Toast", style: headerStyle)),
          ],
        ),
        ElevatedButton(
          child: Text('Info', style: textStyle),
          style: ButtonStyle(
              backgroundColor: MaterialStateProperty.all(Colors.blue)
          ),
          onPressed: () async {
            bakeToast("This is informational!", type: ToastType.info);
          },
        ),
        ElevatedButton(
          child: Text('Normal', style: textStyle),
          style: ButtonStyle(
              backgroundColor: MaterialStateProperty.all(Colors.lightBlue)
          ),
          onPressed: () async {
            bakeToast("Downloading, please wait!", type: ToastType.normal);
          },
        ),
        ElevatedButton(
          child: Text('Error', style: textStyle),
          style: ButtonStyle(
              backgroundColor: MaterialStateProperty.all(Colors.red)
          ),
          onPressed: () async {
            bakeToast("Password is incorrect!", type: ToastType.error);
          },
        ),
        ElevatedButton(
          child: Text('Warning', style: textStyle),
          style: ButtonStyle(
              backgroundColor: MaterialStateProperty.all(Colors.orange)
          ),
          onPressed: () async {
            bakeToast("Password is weak!", type: ToastType.warning);
          },
        ),
        ElevatedButton(
          child: Text('Success', style: textStyle),
          style: ButtonStyle(
              backgroundColor: MaterialStateProperty.all(Colors.green)
          ),
          onPressed: () async {
            bakeToast("Registration successful!", type: ToastType.success);
          },
        ),
      ],
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.blue.shade100,
      body: Padding(
        padding: const EdgeInsets.symmetric(vertical: 32.0, horizontal: 8.0),
        child: Align(
          alignment: Alignment.bottomCenter,
          child: Column(
            mainAxisAlignment: MainAxisAlignment.end,
            children: <Widget>[
              notifications(),
              Divider(height: 32.0),
              loader(),
              Divider(height: 32.0),
              toast(),
            ],
          ),
        ),
      ),
    );
  }
}

显示和隐藏加载器

要显示和隐藏加载器,您可以使用以下方法:

showLoader(
  isModal: true,
);
/// Your network operation
hideLoader();

显示和隐藏通知

要显示和隐藏通知,您可以使用以下方法:

showNotification(
  title: 'Test',
  message: 'Hello, this is notification',
  backgroundColor: Colors.green,
  autoDismissible: true,
  notificationDuration: 2500,
);

// 使用仅当 `autoDismissible` 为 `false` 时
hideNotification();

显示 Toast

要显示不同类型的 Toast,您可以使用以下方法:

bakeToast("Hey toast!");

bakeToast("Hey info!", type: ToastType.info);

bakeToast("Hey success!", type: ToastType.success);

bakeToast("Hey error!", type: ToastType.error);

bakeToast("Hey warning!", type: ToastType.warning);

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用ots(Optical Text Recognition,光学字符识别)插件的示例代码。ots插件可以帮助你从图片中提取文本。需要注意的是,Flutter本身并没有一个官方的ots插件,所以这里我将使用一个比较流行的OCR插件,例如google_ml_kit,因为它提供了强大的文本识别功能。

首先,你需要在pubspec.yaml文件中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  google_ml_kit: ^0.14.0  # 请注意版本号,这里使用的是0.14.0版本,请根据需要更新到最新版本

然后运行flutter pub get来安装依赖。

接下来,你可以编写一个Flutter应用来演示如何使用这个插件进行文本识别。以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:google_ml_kit/google_ml_kit.dart';
import 'dart:typed_data';
import 'dart:ui' as ui;

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

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

class OcrScreen extends StatefulWidget {
  @override
  _OcrScreenState createState() => _OcrScreenState();
}

class _OcrScreenState extends State<OcrScreen> {
  final _controller = TextEditingController();
  String _recognizedText = '';

  Future<void> _pickImageAndRecognizeText() async {
    final pickedFile = await ImagePicker().pickImage(source: ImageSource.gallery);
    if (pickedFile != null) {
      final Uint8List imageBytes = await pickedFile.readAsBytes();
      final inputImage = InputImage.fromBytes(
        imageBytes: imageBytes,
        size: Size(pickedFile.width, pickedFile.height),
      );

      final TextRecognizer recognizer = GoogleMlKit.vision.textRecognizer();
      final RecognizedText result = await recognizer.processImage(inputImage);

      setState(() {
        _recognizedText = result.text;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter OCR Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _pickImageAndRecognizeText,
              child: Text('Pick Image and Recognize Text'),
            ),
            SizedBox(height: 20),
            TextField(
              controller: _controller,
              decoration: InputDecoration(
                border: OutlineInputBorder(),
                labelText: 'Recognized Text',
              ),
              enabled: false,
              maxLines: null,
              expands: true,
              textAlign: TextAlign.left,
              readOnly: true,
            ),
            if (_recognizedText.isNotEmpty)
              Text(
                _recognizedText,
                style: TextStyle(fontSize: 18),
                maxLines: null,
              ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们使用了google_ml_kit插件来进行OCR识别。以下是关键步骤:

  1. 使用ImagePicker插件从相册中选择一张图片。
  2. 将选择的图片转换为Uint8List格式。
  3. 使用InputImage.fromBytes方法将图片数据封装成InputImage对象。
  4. 使用GoogleMlKit.vision.textRecognizer()获取文本识别器。
  5. 调用processImage方法对图片进行文本识别。
  6. 将识别结果显示在界面上。

请确保你已经添加了必要的权限,例如在AndroidManifest.xml中添加读取存储权限(如果你从相册选择图片):

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

同时,在iOS项目中,你可能需要在Info.plist中添加相应的权限说明。

这个示例应该能帮助你理解如何在Flutter应用中使用OCR插件进行文本识别。如果有进一步的问题或需要更详细的解释,请随时提问。

回到顶部