Flutter二维码扫描插件scanly的使用

Flutter二维码扫描插件scanly的使用

简单且全面的二维码插件

插件功能

  • 使用数据生成二维码。
  • 通过摄像头扫描二维码。
  • 从最近的照片或图库中扫描二维码,具有出色的用户界面。

安装

iOS

ios/Runner/info.plist 文件中添加以下内容:

<key>NSCameraUsageDescription</key>
<string>我们需要访问相机来扫描二维码。</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>我们需要访问图库来扫描二维码。</string>

Android

android/app/build.gradle 文件中设置 minSdkVersion 为 22:

minSdkVersion 22

android/app/src/main/AndroidManifest.xml 文件中添加以下权限:

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

同时,在 <application> 标签内添加 requestLegacyExternalStorage 属性:

<application
        android:requestLegacyExternalStorage="true">

使用

生成二维码小部件

使用 ScanlyQRGenerator 小部件来生成二维码。以下是一个简单的例子:

ScanlyQRGenerator(
  data: 'Scanly',
)

生成二维码

扫描二维码小部件(通过摄像头或图库)

使用 ScanlyQRScanner 小部件来扫描二维码。以下是一个简单的例子:

ScanlyQRScanner(
  onScanData: (data) {
    print('扫描到的数据: $data');
  },
)

扫描二维码

完整示例代码

下面是一个完整的示例代码,展示了如何使用 scanly 插件来生成和扫描二维码。

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Scanly Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Scanly Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: SizedBox(
        width: double.infinity,
        child: Padding(
          padding: const EdgeInsets.all(30),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: [
              ElevatedButton(
                child: const Text('Scan'),
                onPressed: () {
                  Navigator.push(context, MaterialPageRoute(builder: (context) => const ScanView()));
                },
              ),
              ElevatedButton(
                child: const Text('Generate'),
                onPressed: () {
                  Navigator.push(context, MaterialPageRoute(builder: (context) => const GenerateView()));
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

class ScanView extends StatelessWidget {
  const ScanView({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Scanly Scan Widget"),
      ),
      body: Center(
        child: ScanlyQRScanner(
          onScanData: (data) {
            print('扫描到的数据: $data');
          },
        ),
      ),
    );
  }
}

class GenerateView extends StatelessWidget {
  const GenerateView({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Scanly Generator Widget"),
      ),
      body: Center(
        child: ScanlyQRGenerator(
          data: 'Scanly',
        ),
      ),
    );
  }
}

更多关于Flutter二维码扫描插件scanly的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter二维码扫描插件scanly的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用scanly插件来实现二维码扫描功能的代码案例。请注意,scanly可能不是最流行或最新的二维码扫描插件,但在编写此回答时,我们假设它是一个可用的Flutter插件。如果scanly插件已经不再维护或推荐使用其他插件,请考虑使用如flutter_barcode_scanner等更流行和活跃的插件。

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

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

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

接下来,你可以按照以下步骤在你的Flutter应用中实现二维码扫描功能:

  1. 导入必要的包

在你的Dart文件中(例如main.dart),导入scanly包:

import 'package:flutter/material.dart';
import 'package:scanly/scanly.dart';
  1. 创建一个扫描页面

定义一个页面来触发二维码扫描并显示结果:

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

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

class ScanPage extends StatefulWidget {
  @override
  _ScanPageState createState() => _ScanPageState();
}

class _ScanPageState extends State<ScanPage> {
  String _result = '';

  Future<void> _scanQRCode() async {
    try {
      String result = await Scanly.scan();
      setState(() {
        _result = result;
      });
    } catch (e) {
      print('Error scanning QR code: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Scan QR Code'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              _result.isEmpty ? 'No QR code scanned yet.' : 'Scanned Result: $_result',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _scanQRCode,
              child: Text('Scan QR Code'),
            ),
          ],
        ),
      ),
    );
  }
}
  1. 运行应用

确保你的设备或模拟器已经连接,并运行flutter run来启动应用。你应该会看到一个按钮,点击它会打开设备的摄像头并尝试扫描二维码。扫描成功后,结果将显示在屏幕上。

请注意,上述代码假设scanly插件提供了一个名为Scanly.scan()的静态方法,该方法返回一个Future<String>,表示扫描到的二维码内容。如果scanly的实际API有所不同,请查阅其官方文档并相应地调整代码。

另外,由于插件的API可能会随着版本的更新而变化,因此建议始终查阅最新的官方文档以获取准确的信息。如果scanly插件不再可用或推荐其他插件,你可以考虑使用如flutter_barcode_scanner这样的流行插件,其使用方式通常非常类似。

回到顶部