fix code warnings

This commit is contained in:
Luke Freeman
2023-05-14 10:48:11 -07:00
parent e77ac65c7d
commit ffbb276ec6
7 changed files with 79 additions and 78 deletions

View File

@ -80,7 +80,6 @@ linter:
# libraries # libraries
# classes # classes
- one_member_abstracts # avoid - one_member_abstracts # avoid
- avoid_classes_with_only_static_members # avoid
- public_member_api_docs - public_member_api_docs
# constructors # constructors
- prefer_constructors_over_static_methods - prefer_constructors_over_static_methods

View File

@ -13,7 +13,7 @@ import 'qr_versions.dart';
class QrUnsupportedVersionException implements Exception { class QrUnsupportedVersionException implements Exception {
/// Create a new QrUnsupportedVersionException. /// Create a new QrUnsupportedVersionException.
factory QrUnsupportedVersionException(int providedVersion) { factory QrUnsupportedVersionException(int providedVersion) {
final String message = final message =
'Invalid version. $providedVersion is not >= ${QrVersions.min} ' 'Invalid version. $providedVersion is not >= ${QrVersions.min} '
'and <= ${QrVersions.max}'; 'and <= ${QrVersions.max}';
return QrUnsupportedVersionException._internal(providedVersion, message); return QrUnsupportedVersionException._internal(providedVersion, message);

View File

@ -8,12 +8,14 @@ import 'package:flutter/widgets.dart';
import 'types.dart'; import 'types.dart';
/// Caches painter objects so we do have to recreate them and waste expensive
/// cycles.
class PaintCache { class PaintCache {
final List<Paint> _pixelPaints = <Paint>[]; final List<Paint> _pixelPaints = <Paint>[];
final Map<String, Paint> _keyedPaints = <String, Paint>{}; final Map<String, Paint> _keyedPaints = <String, Paint>{};
String _cacheKey(QrCodeElement element, {FinderPatternPosition? position}) { String _cacheKey(QrCodeElement element, {FinderPatternPosition? position}) {
final String posKey = position != null ? position.toString() : 'any'; final posKey = position != null ? position.toString() : 'any';
return '$element:$posKey'; return '$element:$posKey';
} }

View File

@ -178,20 +178,20 @@ class _QrImageViewState extends State<QrImageView> {
QrValidationResult(status: QrValidationStatus.valid, qrCode: _qr); QrValidationResult(status: QrValidationStatus.valid, qrCode: _qr);
} }
return LayoutBuilder( return LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) { builder: (context, constraints) {
// validation failed, show an error state widget if builder is present. // validation failed, show an error state widget if builder is present.
if (!_validationResult.isValid) { if (!_validationResult.isValid) {
return _errorWidget(context, constraints, _validationResult.error); return _errorWidget(context, constraints, _validationResult.error);
} }
// no error, build the regular widget // no error, build the regular widget
final double widgetSize = final widgetSize =
widget.size ?? constraints.biggest.shortestSide; widget.size ?? constraints.biggest.shortestSide;
if (widget.embeddedImage != null) { if (widget.embeddedImage != null) {
// if requesting to embed an image then we need to load via a // if requesting to embed an image then we need to load via a
// FutureBuilder because the image provider will be async. // FutureBuilder because the image provider will be async.
return FutureBuilder<ui.Image>( return FutureBuilder<ui.Image>(
future: _loadQrImage(context, widget.embeddedImageStyle), future: _loadQrImage(context, widget.embeddedImageStyle),
builder: (BuildContext ctx, AsyncSnapshot<ui.Image> snapshot) { builder: (ctx, snapshot) {
if (snapshot.error != null) { if (snapshot.error != null) {
debugPrint('snapshot error: ${snapshot.error}'); debugPrint('snapshot error: ${snapshot.error}');
return widget.embeddedImageEmitsError return widget.embeddedImageEmitsError
@ -200,7 +200,7 @@ class _QrImageViewState extends State<QrImageView> {
} }
if (snapshot.hasData) { if (snapshot.hasData) {
debugPrint('loaded image'); debugPrint('loaded image');
final ui.Image? loadedImage = snapshot.data; final loadedImage = snapshot.data;
return _qrWidget(loadedImage, widgetSize); return _qrWidget(loadedImage, widgetSize);
} else { } else {
return Container(); return Container();
@ -215,7 +215,7 @@ class _QrImageViewState extends State<QrImageView> {
} }
Widget _qrWidget(ui.Image? image, double edgeLength) { Widget _qrWidget(ui.Image? image, double edgeLength) {
final QrPainter painter = QrPainter.withQr( final painter = QrPainter.withQr(
qr: _qr!, qr: _qr!,
// ignore: deprecated_member_use_from_same_package // ignore: deprecated_member_use_from_same_package
color: widget.foregroundColor, color: widget.foregroundColor,
@ -239,10 +239,10 @@ class _QrImageViewState extends State<QrImageView> {
BoxConstraints constraints, BoxConstraints constraints,
Object? error, Object? error,
) { ) {
final Widget errorWidget = widget.errorStateBuilder == null final errorWidget = widget.errorStateBuilder == null
? Container() ? Container()
: widget.errorStateBuilder!(context, error); : widget.errorStateBuilder!(context, error);
final double errorSideLength = widget.constrainErrorBounds final errorSideLength = widget.constrainErrorBounds
? widget.size ?? constraints.biggest.shortestSide ? widget.size ?? constraints.biggest.shortestSide
: constraints.biggest.longestSide; : constraints.biggest.longestSide;
return _QrContentView( return _QrContentView(
@ -262,20 +262,20 @@ class _QrImageViewState extends State<QrImageView> {
) { ) {
if (style != null) {} if (style != null) {}
final MediaQueryData mq = MediaQuery.of(buildContext); final mq = MediaQuery.of(buildContext);
final Completer<ui.Image> completer = Completer<ui.Image>(); final completer = Completer<ui.Image>();
final ImageStream stream = widget.embeddedImage!.resolve( final stream = widget.embeddedImage!.resolve(
ImageConfiguration( ImageConfiguration(
devicePixelRatio: mq.devicePixelRatio, devicePixelRatio: mq.devicePixelRatio,
), ),
); );
streamListener = ImageStreamListener( streamListener = ImageStreamListener(
(ImageInfo info, bool err) { (info, err) {
stream.removeListener(streamListener); stream.removeListener(streamListener);
completer.complete(info.image); completer.complete(info.image);
}, },
onError: (Object err, _) { onError: (err, _) {
stream.removeListener(streamListener); stream.removeListener(streamListener);
completer.completeError(err); completer.completeError(err);
}, },

View File

@ -138,7 +138,7 @@ class QrPainter extends CustomPainter {
throw QrUnsupportedVersionException(version); throw QrUnsupportedVersionException(version);
} }
// configure and make the QR code data // configure and make the QR code data
final QrValidationResult validationResult = QrValidator.validate( final validationResult = QrValidator.validate(
data: data, data: data,
version: version, version: version,
errorCorrectionLevel: errorCorrectionLevel, errorCorrectionLevel: errorCorrectionLevel,
@ -168,7 +168,7 @@ class QrPainter extends CustomPainter {
); );
// Cache the finder pattern painters. We'll keep one for each one in case // Cache the finder pattern painters. We'll keep one for each one in case
// we want to provide customization options later. // we want to provide customization options later.
for (final FinderPatternPosition position in FinderPatternPosition.values) { for (final position in FinderPatternPosition.values) {
_paintCache.cache( _paintCache.cache(
Paint()..style = PaintingStyle.stroke, Paint()..style = PaintingStyle.stroke,
QrCodeElement.finderPatternOuter, QrCodeElement.finderPatternOuter,
@ -197,7 +197,7 @@ class QrPainter extends CustomPainter {
return; return;
} }
final _PaintMetrics paintMetrics = _PaintMetrics( final paintMetrics = _PaintMetrics(
containerSize: size.shortestSide, containerSize: size.shortestSide,
moduleCount: _qr!.moduleCount, moduleCount: _qr!.moduleCount,
gapSize: gapless ? 0 : _gapSize, gapSize: gapless ? 0 : _gapSize,
@ -231,9 +231,9 @@ class QrPainter extends CustomPainter {
double left; double left;
double top; double top;
final num gap = !gapless ? _gapSize : 0; final gap = !gapless ? _gapSize : 0;
// get the painters for the pixel information // get the painters for the pixel information
final ui.Paint? pixelPaint = final pixelPaint =
_paintCache.firstPaint(QrCodeElement.codePixel); _paintCache.firstPaint(QrCodeElement.codePixel);
if (color != null) { if (color != null) {
pixelPaint!.color = color!; pixelPaint!.color = color!;
@ -245,13 +245,13 @@ class QrPainter extends CustomPainter {
emptyPixelPaint = _paintCache.firstPaint(QrCodeElement.codePixelEmpty); emptyPixelPaint = _paintCache.firstPaint(QrCodeElement.codePixelEmpty);
emptyPixelPaint!.color = emptyColor!; emptyPixelPaint!.color = emptyColor!;
} }
for (int x = 0; x < _qr!.moduleCount; x++) { for (var x = 0; x < _qr!.moduleCount; x++) {
for (int y = 0; y < _qr!.moduleCount; y++) { for (var y = 0; y < _qr!.moduleCount; y++) {
// draw the finder patterns independently // draw the finder patterns independently
if (_isFinderPatternPosition(x, y)) { if (_isFinderPatternPosition(x, y)) {
continue; continue;
} }
final ui.Paint? paint = final paint =
_qrImage.isDark(y, x) ? pixelPaint : emptyPixelPaint; _qrImage.isDark(y, x) ? pixelPaint : emptyPixelPaint;
if (paint == null) { if (paint == null) {
continue; continue;
@ -259,15 +259,15 @@ class QrPainter extends CustomPainter {
// paint a pixel // paint a pixel
left = paintMetrics.inset + (x * (paintMetrics.pixelSize + gap)); left = paintMetrics.inset + (x * (paintMetrics.pixelSize + gap));
top = paintMetrics.inset + (y * (paintMetrics.pixelSize + gap)); top = paintMetrics.inset + (y * (paintMetrics.pixelSize + gap));
double pixelHTweak = 0.0; var pixelHTweak = 0.0;
double pixelVTweak = 0.0; var pixelVTweak = 0.0;
if (gapless && _hasAdjacentHorizontalPixel(x, y, _qr!.moduleCount)) { if (gapless && _hasAdjacentHorizontalPixel(x, y, _qr!.moduleCount)) {
pixelHTweak = 0.5; pixelHTweak = 0.5;
} }
if (gapless && _hasAdjacentVerticalPixel(x, y, _qr!.moduleCount)) { if (gapless && _hasAdjacentVerticalPixel(x, y, _qr!.moduleCount)) {
pixelVTweak = 0.5; pixelVTweak = 0.5;
} }
final ui.Rect squareRect = Rect.fromLTWH( final squareRect = Rect.fromLTWH(
left, left,
top, top,
paintMetrics.pixelSize + pixelHTweak, paintMetrics.pixelSize + pixelHTweak,
@ -276,7 +276,7 @@ class QrPainter extends CustomPainter {
if (dataModuleStyle.dataModuleShape == QrDataModuleShape.square) { if (dataModuleStyle.dataModuleShape == QrDataModuleShape.square) {
canvas.drawRect(squareRect, paint); canvas.drawRect(squareRect, paint);
} else { } else {
final ui.RRect roundedRect = RRect.fromRectAndRadius( final roundedRect = RRect.fromRectAndRadius(
squareRect, squareRect,
Radius.circular(paintMetrics.pixelSize + pixelHTweak), Radius.circular(paintMetrics.pixelSize + pixelHTweak),
); );
@ -286,15 +286,15 @@ class QrPainter extends CustomPainter {
} }
if (embeddedImage != null) { if (embeddedImage != null) {
final ui.Size originalSize = Size( final originalSize = Size(
embeddedImage!.width.toDouble(), embeddedImage!.width.toDouble(),
embeddedImage!.height.toDouble(), embeddedImage!.height.toDouble(),
); );
final ui.Size? requestedSize = final requestedSize =
embeddedImageStyle != null ? embeddedImageStyle!.size : null; embeddedImageStyle != null ? embeddedImageStyle!.size : null;
final ui.Size imageSize = final imageSize =
_scaledAspectSize(size, originalSize, requestedSize); _scaledAspectSize(size, originalSize, requestedSize);
final ui.Offset position = Offset( final position = Offset(
(size.width - imageSize.width) / 2.0, (size.width - imageSize.width) / 2.0,
(size.height - imageSize.height) / 2.0, (size.height - imageSize.height) / 2.0,
); );
@ -318,10 +318,10 @@ class QrPainter extends CustomPainter {
} }
bool _isFinderPatternPosition(int x, int y) { bool _isFinderPatternPosition(int x, int y) {
final bool isTopLeft = y < _finderPatternLimit && x < _finderPatternLimit; final isTopLeft = y < _finderPatternLimit && x < _finderPatternLimit;
final bool isBottomLeft = y < _finderPatternLimit && final isBottomLeft = y < _finderPatternLimit &&
(x >= _qr!.moduleCount - _finderPatternLimit); (x >= _qr!.moduleCount - _finderPatternLimit);
final bool isTopRight = y >= _qr!.moduleCount - _finderPatternLimit && final isTopRight = y >= _qr!.moduleCount - _finderPatternLimit &&
(x < _finderPatternLimit); (x < _finderPatternLimit);
return isTopLeft || isBottomLeft || isTopRight; return isTopLeft || isBottomLeft || isTopRight;
} }
@ -331,12 +331,12 @@ class QrPainter extends CustomPainter {
Canvas canvas, Canvas canvas,
_PaintMetrics metrics, _PaintMetrics metrics,
) { ) {
final double totalGap = (_finderPatternLimit - 1) * metrics.gapSize; final totalGap = (_finderPatternLimit - 1) * metrics.gapSize;
final double radius = final radius =
((_finderPatternLimit * metrics.pixelSize) + totalGap) - ((_finderPatternLimit * metrics.pixelSize) + totalGap) -
metrics.pixelSize; metrics.pixelSize;
final double strokeAdjust = metrics.pixelSize / 2.0; final strokeAdjust = metrics.pixelSize / 2.0;
final double edgePos = final edgePos =
(metrics.inset + metrics.innerContentSize) - (radius + strokeAdjust); (metrics.inset + metrics.innerContentSize) - (radius + strokeAdjust);
Offset offset; Offset offset;
@ -350,19 +350,19 @@ class QrPainter extends CustomPainter {
} }
// configure the paints // configure the paints
final ui.Paint outerPaint = _paintCache.firstPaint( final outerPaint = _paintCache.firstPaint(
QrCodeElement.finderPatternOuter, QrCodeElement.finderPatternOuter,
position: position, position: position,
)!; )!;
outerPaint.strokeWidth = metrics.pixelSize; outerPaint.strokeWidth = metrics.pixelSize;
outerPaint.color = color != null ? color! : eyeStyle.color!; outerPaint.color = color != null ? color! : eyeStyle.color!;
final ui.Paint innerPaint = _paintCache final innerPaint = _paintCache
.firstPaint(QrCodeElement.finderPatternInner, position: position)!; .firstPaint(QrCodeElement.finderPatternInner, position: position)!;
innerPaint.strokeWidth = metrics.pixelSize; innerPaint.strokeWidth = metrics.pixelSize;
innerPaint.color = emptyColor ?? const Color(0x00ffffff); innerPaint.color = emptyColor ?? const Color(0x00ffffff);
final ui.Paint? dotPaint = _paintCache.firstPaint( final dotPaint = _paintCache.firstPaint(
QrCodeElement.finderPatternDot, QrCodeElement.finderPatternDot,
position: position, position: position,
); );
@ -372,20 +372,20 @@ class QrPainter extends CustomPainter {
dotPaint!.color = eyeStyle.color!; dotPaint!.color = eyeStyle.color!;
} }
final ui.Rect outerRect = final outerRect =
Rect.fromLTWH(offset.dx, offset.dy, radius, radius); Rect.fromLTWH(offset.dx, offset.dy, radius, radius);
final double innerRadius = radius - (2 * metrics.pixelSize); final innerRadius = radius - (2 * metrics.pixelSize);
final ui.Rect innerRect = Rect.fromLTWH( final innerRect = Rect.fromLTWH(
offset.dx + metrics.pixelSize, offset.dx + metrics.pixelSize,
offset.dy + metrics.pixelSize, offset.dy + metrics.pixelSize,
innerRadius, innerRadius,
innerRadius, innerRadius,
); );
final double gap = metrics.pixelSize * 2; final gap = metrics.pixelSize * 2;
final double dotSize = radius - gap - (2 * strokeAdjust); final dotSize = radius - gap - (2 * strokeAdjust);
final ui.Rect dotRect = Rect.fromLTWH( final dotRect = Rect.fromLTWH(
offset.dx + metrics.pixelSize + strokeAdjust, offset.dx + metrics.pixelSize + strokeAdjust,
offset.dy + metrics.pixelSize + strokeAdjust, offset.dy + metrics.pixelSize + strokeAdjust,
dotSize, dotSize,
@ -397,15 +397,15 @@ class QrPainter extends CustomPainter {
canvas.drawRect(innerRect, innerPaint); canvas.drawRect(innerRect, innerPaint);
canvas.drawRect(dotRect, dotPaint); canvas.drawRect(dotRect, dotPaint);
} else { } else {
final ui.RRect roundedOuterStrokeRect = final roundedOuterStrokeRect =
RRect.fromRectAndRadius(outerRect, Radius.circular(radius)); RRect.fromRectAndRadius(outerRect, Radius.circular(radius));
canvas.drawRRect(roundedOuterStrokeRect, outerPaint); canvas.drawRRect(roundedOuterStrokeRect, outerPaint);
final ui.RRect roundedInnerStrokeRect = final roundedInnerStrokeRect =
RRect.fromRectAndRadius(outerRect, Radius.circular(innerRadius)); RRect.fromRectAndRadius(outerRect, Radius.circular(innerRadius));
canvas.drawRRect(roundedInnerStrokeRect, innerPaint); canvas.drawRRect(roundedInnerStrokeRect, innerPaint);
final ui.RRect roundedDotStrokeRect = final roundedDotStrokeRect =
RRect.fromRectAndRadius(dotRect, Radius.circular(dotSize)); RRect.fromRectAndRadius(dotRect, Radius.circular(dotSize));
canvas.drawRRect(roundedDotStrokeRect, dotPaint); canvas.drawRRect(roundedDotStrokeRect, dotPaint);
} }
@ -421,12 +421,12 @@ class QrPainter extends CustomPainter {
if (requestedSize != null && !requestedSize.isEmpty) { if (requestedSize != null && !requestedSize.isEmpty) {
return requestedSize; return requestedSize;
} else if (requestedSize != null && _hasOneNonZeroSide(requestedSize)) { } else if (requestedSize != null && _hasOneNonZeroSide(requestedSize)) {
final double maxSide = requestedSize.longestSide; final maxSide = requestedSize.longestSide;
final double ratio = maxSide / originalSize.longestSide; final ratio = maxSide / originalSize.longestSide;
return Size(ratio * originalSize.width, ratio * originalSize.height); return Size(ratio * originalSize.width, ratio * originalSize.height);
} else { } else {
final double maxSide = 0.25 * widgetSize.shortestSide; final maxSide = 0.25 * widgetSize.shortestSide;
final double ratio = maxSide / originalSize.longestSide; final ratio = maxSide / originalSize.longestSide;
return Size(ratio * originalSize.width, ratio * originalSize.height); return Size(ratio * originalSize.width, ratio * originalSize.height);
} }
} }
@ -437,7 +437,7 @@ class QrPainter extends CustomPainter {
Size size, Size size,
QrEmbeddedImageStyle? style, QrEmbeddedImageStyle? style,
) { ) {
final ui.Paint paint = Paint() final paint = Paint()
..isAntiAlias = true ..isAntiAlias = true
..filterQuality = FilterQuality.high; ..filterQuality = FilterQuality.high;
if (style != null) { if (style != null) {
@ -445,11 +445,11 @@ class QrPainter extends CustomPainter {
paint.colorFilter = ColorFilter.mode(style.color!, BlendMode.srcATop); paint.colorFilter = ColorFilter.mode(style.color!, BlendMode.srcATop);
} }
} }
final ui.Size srcSize = final srcSize =
Size(embeddedImage!.width.toDouble(), embeddedImage!.height.toDouble()); Size(embeddedImage!.width.toDouble(), embeddedImage!.height.toDouble());
final ui.Rect src = final src =
Alignment.center.inscribe(srcSize, Offset.zero & srcSize); Alignment.center.inscribe(srcSize, Offset.zero & srcSize);
final ui.Rect dst = Alignment.center.inscribe(size, position & size); final dst = Alignment.center.inscribe(size, position & size);
canvas.drawImageRect(embeddedImage!, src, dst, paint); canvas.drawImageRect(embeddedImage!, src, dst, paint);
} }
@ -470,8 +470,8 @@ class QrPainter extends CustomPainter {
/// Returns a [ui.Picture] object containing the QR code data. /// Returns a [ui.Picture] object containing the QR code data.
ui.Picture toPicture(double size) { ui.Picture toPicture(double size) {
final ui.PictureRecorder recorder = ui.PictureRecorder(); final recorder = ui.PictureRecorder();
final ui.Canvas canvas = Canvas(recorder); final canvas = Canvas(recorder);
paint(canvas, Size(size, size)); paint(canvas, Size(size, size));
return recorder.endRecording(); return recorder.endRecording();
} }
@ -486,7 +486,7 @@ class QrPainter extends CustomPainter {
double size, { double size, {
ui.ImageByteFormat format = ui.ImageByteFormat.png, ui.ImageByteFormat format = ui.ImageByteFormat.png,
}) async { }) async {
final ui.Image image = await toImage(size); final image = await toImage(size);
return image.toByteData(format: format); return image.toByteData(format: format);
} }
} }
@ -514,8 +514,8 @@ class _PaintMetrics {
double get inset => _inset; double get inset => _inset;
void _calculateMetrics() { void _calculateMetrics() {
final double gapTotal = (moduleCount - 1) * gapSize; final gapTotal = (moduleCount - 1) * gapSize;
final double pixelSize = (containerSize - gapTotal) / moduleCount; final pixelSize = (containerSize - gapTotal) / moduleCount;
_pixelSize = (pixelSize * 2).roundToDouble() / 2; _pixelSize = (pixelSize * 2).roundToDouble() / 2;
_innerContentSize = (_pixelSize * moduleCount) + gapTotal; _innerContentSize = (_pixelSize * moduleCount) + gapTotal;
_inset = (containerSize - _innerContentSize) / 2; _inset = (containerSize - _innerContentSize) / 2;

View File

@ -12,9 +12,9 @@ import 'package:qr_flutter/qr_flutter.dart';
void main() { void main() {
testWidgets('QrImageView generates correct image', ( testWidgets('QrImageView generates correct image', (
WidgetTester tester, tester,
) async { ) async {
final MaterialApp qrImage = MaterialApp( final qrImage = MaterialApp(
home: Center( home: Center(
child: RepaintBoundary( child: RepaintBoundary(
child: QrImageView( child: QrImageView(
@ -35,8 +35,8 @@ void main() {
testWidgets( testWidgets(
'QrImageView generates correct image with eye style', 'QrImageView generates correct image with eye style',
(WidgetTester tester) async { (tester) async {
final MaterialApp qrImage = MaterialApp( final qrImage = MaterialApp(
home: Center( home: Center(
child: RepaintBoundary( child: RepaintBoundary(
child: QrImageView( child: QrImageView(
@ -62,8 +62,8 @@ void main() {
testWidgets( testWidgets(
'QrImageView generates correct image with data module style', 'QrImageView generates correct image with data module style',
(WidgetTester tester) async { (tester) async {
final MaterialApp qrImage = MaterialApp( final qrImage = MaterialApp(
home: Center( home: Center(
child: RepaintBoundary( child: RepaintBoundary(
child: QrImageView( child: QrImageView(
@ -89,8 +89,8 @@ void main() {
testWidgets( testWidgets(
'QrImageView generates correct image with eye and data module sytle', 'QrImageView generates correct image with eye and data module sytle',
(WidgetTester tester) async { (tester) async {
final MaterialApp qrImage = MaterialApp( final qrImage = MaterialApp(
home: Center( home: Center(
child: RepaintBoundary( child: RepaintBoundary(
child: QrImageView( child: QrImageView(
@ -123,8 +123,8 @@ void main() {
testWidgets( testWidgets(
'QrImageView does not apply eye and data module color when foreground ' 'QrImageView does not apply eye and data module color when foreground '
'color is also specified', 'color is also specified',
(WidgetTester tester) async { (tester) async {
final MaterialApp qrImage = MaterialApp( final qrImage = MaterialApp(
home: Center( home: Center(
child: RepaintBoundary( child: RepaintBoundary(
child: QrImageView( child: QrImageView(
@ -156,7 +156,7 @@ void main() {
testWidgets( testWidgets(
'QrImageView generates correct image with logo', 'QrImageView generates correct image with logo',
(WidgetTester tester) async { (tester) async {
await pumpWidgetWithImages( await pumpWidgetWithImages(
tester, tester,
MaterialApp( MaterialApp(
@ -196,7 +196,7 @@ Future<void> pumpWidgetWithImages(
Future<void>? precacheFuture; Future<void>? precacheFuture;
await tester.pumpWidget( await tester.pumpWidget(
Builder( Builder(
builder: (BuildContext buildContext) { builder: (buildContext) {
precacheFuture = tester.runAsync(() async { precacheFuture = tester.runAsync(() async {
await Future.wait(<Future<void>>[ await Future.wait(<Future<void>>[
for (final String assetName in assetNames) for (final String assetName in assetNames)

View File

@ -10,8 +10,8 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:qr_flutter/qr_flutter.dart'; import 'package:qr_flutter/qr_flutter.dart';
void main() { void main() {
testWidgets('QrPainter generates correct image', (WidgetTester tester) async { testWidgets('QrPainter generates correct image', (tester) async {
final QrPainter painter = QrPainter( final painter = QrPainter(
data: 'The painter is this thing', data: 'The painter is this thing',
version: QrVersions.auto, version: QrVersions.auto,
gapless: true, gapless: true,
@ -21,7 +21,7 @@ void main() {
await tester.runAsync(() async { await tester.runAsync(() async {
imageData = await painter.toImageData(600.0); imageData = await painter.toImageData(600.0);
}); });
final Uint8List imageBytes = imageData!.buffer.asUint8List(); final imageBytes = imageData!.buffer.asUint8List();
final Widget widget = Center( final Widget widget = Center(
child: RepaintBoundary( child: RepaintBoundary(
child: SizedBox( child: SizedBox(