flutter 掃描二維碼 qr_code_scanner黑屏問題

原因:
軟鍵盤彈出的時候 跳轉(zhuǎn)qr_code_scanner 插件掃描二維碼頁面會出現(xiàn)黑屏問題

解決辦法:
1.使用TextFormField時 跳轉(zhuǎn)按鈕不要寫在 suffixIcon或者prefixIcon里面 單獨提出來不要和TextFormField關聯(lián)
跳轉(zhuǎn)時隱藏軟鍵盤

 FocusScope.of(context).unfocus();
 Future.delayed(Duration(milliseconds: 100), () async {
      Navigator.push(context, MaterialPageRoute(builder: (context) {
        return QRViewPage();
      })).then((value) {
        print('scan_____${value}');
      });
 });

2.暴力解決:
界面打開時直接重啟照相機,會出現(xiàn)不流暢的情況

import 'dart:io';

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

class QRViewPage extends StatefulWidget {
  @override
  _QRViewPageState createState() => _QRViewPageState();
}

class _QRViewPageState extends State<QRViewPage> {
  Barcode result;
  QRViewController controller;
  final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');



  @override
  Widget build(BuildContext context) {

    var scanArea = (MediaQuery.of(context).size.width < 400 ||
        MediaQuery.of(context).size.height < 400)
        ? 200.0
        : 300.0;
    print("掃描大小=$scanArea");
    print("width=${MediaQuery.of(context).size.width}");

    return Scaffold(
        body: SafeArea(  // add safe area here
        child:QRView(
          key: qrKey,
          // You can choose between CameraFacing.front or CameraFacing.back. Defaults to CameraFacing.back
          // cameraFacing: CameraFacing.front,
          onQRViewCreated: _onQRViewCreated,
          // Choose formats you want to scan. Defaults to all formats.
          // formatsAllowed: [BarcodeFormat.qrcode],
          overlay: QrScannerOverlayShape(
            borderColor: Colors.red,
            borderRadius: 10,
            borderLength: 30,
            borderWidth: 10,
            cutOutSize: scanArea,
          ),
        )));
  }

  void _onQRViewCreated(QRViewController controller) {
    print("controller====");
    this.controller = controller;
    String qrData;
    controller.scannedDataStream.listen((scanData) {
      print("scanData====$scanData");
      if (scanData != null) {
        qrData = scanData.code;
        controller.dispose();
      }
    }, onDone: () {
      Navigator.of(context).pop(qrData);
    });
    refresh();
  }

  void refresh() {
    Future.delayed(Duration(milliseconds: 100), () async {
      print("刷新相機");
      await controller.pauseCamera();
      await controller.resumeCamera();
    });
  }

  @override
  void dispose() {
    controller?.dispose();
    super.dispose();
  }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容