Explorar el Código

Use src/ folder with utility file for importers

flutter-beta
Dominik Spicher hace 6 años
committed by Dominik Spicher
padre
commit
eec9e1c8a6
Se han modificado 4 ficheros con 145 adiciones y 144 borrados
  1. +0
    -1
      example/lib/main.dart
  2. +2
    -143
      lib/qr_code_scanner.dart
  3. +143
    -0
      lib/src/qr_code_scanner.dart
  4. +0
    -0
      lib/src/qr_scanner_overlay_shape.dart

+ 0
- 1
example/lib/main.dart Ver fichero

@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:qr_code_scanner/qr_code_scanner.dart';
import 'package:qr_code_scanner/qr_scanner_overlay_shape.dart';

void main() => runApp(MaterialApp(home: QRViewExample()));



+ 2
- 143
lib/qr_code_scanner.dart Ver fichero

@@ -1,143 +1,2 @@
import 'dart:async';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

typedef void QRViewCreatedCallback(QRViewController controller);

class QRView extends StatefulWidget {
const QRView({
@required Key key,
@required this.onQRViewCreated,
this.overlay,
}) : assert(key != null),
assert(onQRViewCreated != null),
super(key: key);

final QRViewCreatedCallback onQRViewCreated;

final ShapeBorder overlay;

@override
State<StatefulWidget> createState() => _QRViewState();
}

class _QRViewState extends State<QRView> {
@override
Widget build(BuildContext context) {
return Stack(
children: [
_getPlatformQrView(),
widget.overlay != null
? Container(
decoration: ShapeDecoration(
shape: widget.overlay,
),
)
: Container(),
],
);
}

Widget _getPlatformQrView() {
Widget _platformQrView;
switch (defaultTargetPlatform) {
case TargetPlatform.android:
_platformQrView = AndroidView(
viewType: 'net.touchcapture.qr.flutterqr/qrview',
onPlatformViewCreated: _onPlatformViewCreated,
);
break;
case TargetPlatform.iOS:
_platformQrView = UiKitView(
viewType: 'net.touchcapture.qr.flutterqr/qrview',
onPlatformViewCreated: _onPlatformViewCreated,
creationParams: _CreationParams.fromWidget(0, 0).toMap(),
creationParamsCodec: StandardMessageCodec(),
);
break;
default:
throw UnsupportedError(
"Trying to use the default webview implementation for $defaultTargetPlatform but there isn't a default one");
}
return _platformQrView;
}

void _onPlatformViewCreated(int id) {
if (widget.onQRViewCreated == null) {
return;
}
widget.onQRViewCreated(QRViewController._(id, widget.key));
}
}

class _CreationParams {
_CreationParams({this.width, this.height});

static _CreationParams fromWidget(double width, double height) {
return _CreationParams(
width: width,
height: height,
);
}

final double width;
final double height;

Map<String, dynamic> toMap() {
return <String, dynamic>{
'width': width,
'height': height,
};
}
}

class QRViewController {
static const scanMethodCall = "onRecognizeQR";

final MethodChannel _channel;

StreamController<String> _scanUpdateController = StreamController<String>();

Stream<String> get scannedDataStream => _scanUpdateController.stream;

QRViewController._(int id, GlobalKey qrKey)
: _channel = MethodChannel('net.touchcapture.qr.flutterqr/qrview_$id') {
if (defaultTargetPlatform == TargetPlatform.iOS) {
final RenderBox renderBox = qrKey.currentContext.findRenderObject();
_channel.invokeMethod("setDimensions",
{"width": renderBox.size.width, "height": renderBox.size.height});
}
_channel.setMethodCallHandler(
(MethodCall call) async {
switch (call.method) {
case scanMethodCall:
if (call.arguments != null) {
_scanUpdateController.sink.add(call.arguments.toString());
}
}
},
);
}

void flipCamera() {
_channel.invokeMethod("flipCamera");
}

void toggleFlash() {
_channel.invokeMethod("toggleFlash");
}

void pauseCamera() {
_channel.invokeMethod("pauseCamera");
}

void resumeCamera() {
_channel.invokeMethod("resumeCamera");
}

void dispose() {
_scanUpdateController.close();
}
}
export 'src/qr_code_scanner.dart';
export 'src/qr_scanner_overlay_shape.dart';

+ 143
- 0
lib/src/qr_code_scanner.dart Ver fichero

@@ -0,0 +1,143 @@
import 'dart:async';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

typedef void QRViewCreatedCallback(QRViewController controller);

class QRView extends StatefulWidget {
const QRView({
@required Key key,
@required this.onQRViewCreated,
this.overlay,
}) : assert(key != null),
assert(onQRViewCreated != null),
super(key: key);

final QRViewCreatedCallback onQRViewCreated;

final ShapeBorder overlay;

@override
State<StatefulWidget> createState() => _QRViewState();
}

class _QRViewState extends State<QRView> {
@override
Widget build(BuildContext context) {
return Stack(
children: [
_getPlatformQrView(),
widget.overlay != null
? Container(
decoration: ShapeDecoration(
shape: widget.overlay,
),
)
: Container(),
],
);
}

Widget _getPlatformQrView() {
Widget _platformQrView;
switch (defaultTargetPlatform) {
case TargetPlatform.android:
_platformQrView = AndroidView(
viewType: 'net.touchcapture.qr.flutterqr/qrview',
onPlatformViewCreated: _onPlatformViewCreated,
);
break;
case TargetPlatform.iOS:
_platformQrView = UiKitView(
viewType: 'net.touchcapture.qr.flutterqr/qrview',
onPlatformViewCreated: _onPlatformViewCreated,
creationParams: _CreationParams.fromWidget(0, 0).toMap(),
creationParamsCodec: StandardMessageCodec(),
);
break;
default:
throw UnsupportedError(
"Trying to use the default webview implementation for $defaultTargetPlatform but there isn't a default one");
}
return _platformQrView;
}

void _onPlatformViewCreated(int id) {
if (widget.onQRViewCreated == null) {
return;
}
widget.onQRViewCreated(QRViewController._(id, widget.key));
}
}

class _CreationParams {
_CreationParams({this.width, this.height});

static _CreationParams fromWidget(double width, double height) {
return _CreationParams(
width: width,
height: height,
);
}

final double width;
final double height;

Map<String, dynamic> toMap() {
return <String, dynamic>{
'width': width,
'height': height,
};
}
}

class QRViewController {
static const scanMethodCall = "onRecognizeQR";

final MethodChannel _channel;

StreamController<String> _scanUpdateController = StreamController<String>();

Stream<String> get scannedDataStream => _scanUpdateController.stream;

QRViewController._(int id, GlobalKey qrKey)
: _channel = MethodChannel('net.touchcapture.qr.flutterqr/qrview_$id') {
if (defaultTargetPlatform == TargetPlatform.iOS) {
final RenderBox renderBox = qrKey.currentContext.findRenderObject();
_channel.invokeMethod("setDimensions",
{"width": renderBox.size.width, "height": renderBox.size.height});
}
_channel.setMethodCallHandler(
(MethodCall call) async {
switch (call.method) {
case scanMethodCall:
if (call.arguments != null) {
_scanUpdateController.sink.add(call.arguments.toString());
}
}
},
);
}

void flipCamera() {
_channel.invokeMethod("flipCamera");
}

void toggleFlash() {
_channel.invokeMethod("toggleFlash");
}

void pauseCamera() {
_channel.invokeMethod("pauseCamera");
}

void resumeCamera() {
_channel.invokeMethod("resumeCamera");
}

void dispose() {
_scanUpdateController.close();
}
}

lib/qr_scanner_overlay_shape.dart → lib/src/qr_scanner_overlay_shape.dart Ver fichero


Cargando…
Cancelar
Guardar