first commit
This commit is contained in:
84
lib/test/tmp_m/m.dart
Normal file
84
lib/test/tmp_m/m.dart
Normal file
@@ -0,0 +1,84 @@
|
||||
import 'dart:ui' as ui;
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:miler/views/helpers/constants/Colorconstants.dart';
|
||||
import 'package:miler/views/helpers/constants/Font_constant.dart';
|
||||
|
||||
/// Mirrors `_calloutBitmap` in map.dart so the drawing maths can be checked
|
||||
/// headless — the real one is private to a State inside a `part` file.
|
||||
Future<({int w, int h})> callout(String text, double dpr) async {
|
||||
const double padH = 12, padV = 9, radius = 12, tail = 9, tailW = 14;
|
||||
const double maxTextWidth = 190;
|
||||
final painter = TextPainter(
|
||||
text: TextSpan(
|
||||
text: text,
|
||||
style: TextStyle(
|
||||
fontSize: 12 * dpr,
|
||||
height: 1.25,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: ColorConstants.slateText,
|
||||
fontFamily: FontConstants.fontFamily,
|
||||
),
|
||||
),
|
||||
maxLines: 2,
|
||||
ellipsis: '…',
|
||||
textDirection: TextDirection.ltr,
|
||||
)..layout(maxWidth: maxTextWidth * dpr);
|
||||
|
||||
final w = painter.width + padH * 2 * dpr;
|
||||
final h = painter.height + padV * 2 * dpr;
|
||||
final totalH = h + tail * dpr;
|
||||
|
||||
final rec = ui.PictureRecorder();
|
||||
final canvas = Canvas(rec);
|
||||
final body = RRect.fromRectAndRadius(
|
||||
Rect.fromLTWH(0, 0, w, h),
|
||||
Radius.circular(radius * dpr),
|
||||
);
|
||||
canvas.drawRRect(
|
||||
body.shift(Offset(0, 1.5 * dpr)),
|
||||
Paint()
|
||||
..color = Colors.black.withValues(alpha: 0.18)
|
||||
..maskFilter = MaskFilter.blur(BlurStyle.normal, 3 * dpr),
|
||||
);
|
||||
canvas.drawRRect(body, Paint()..color = Colors.white);
|
||||
final tip = Path()
|
||||
..moveTo(w / 2 - tailW / 2 * dpr, h - 1)
|
||||
..lineTo(w / 2, totalH)
|
||||
..lineTo(w / 2 + tailW / 2 * dpr, h - 1)
|
||||
..close();
|
||||
canvas.drawPath(tip, Paint()..color = Colors.white);
|
||||
canvas.drawRRect(
|
||||
RRect.fromRectAndCorners(
|
||||
Rect.fromLTWH(0, 0, 4 * dpr, h),
|
||||
topLeft: Radius.circular(radius * dpr),
|
||||
bottomLeft: Radius.circular(radius * dpr),
|
||||
),
|
||||
Paint()..color = ColorConstants.primary,
|
||||
);
|
||||
painter.paint(canvas, Offset(padH * dpr + 2 * dpr, padV * dpr));
|
||||
|
||||
final img = await rec.endRecording().toImage(w.ceil(), totalH.ceil());
|
||||
final bytes = await img.toByteData(format: ui.ImageByteFormat.png);
|
||||
if (bytes == null) throw StateError('no png');
|
||||
return (w: img.width, h: img.height);
|
||||
}
|
||||
|
||||
void main() {
|
||||
testWidgets('callout rasterises at every dpr', (tester) async {
|
||||
for (final dpr in [1.0, 2.0, 3.0]) {
|
||||
final r = await callout('18, Chinnavedampatti Road, Coimbatore', dpr);
|
||||
print('dpr=$dpr ${r.w}x${r.h}px');
|
||||
expect(r.w, greaterThan(0));
|
||||
expect(r.h, greaterThan(0));
|
||||
}
|
||||
// A very long address must clamp, not grow without bound.
|
||||
final long = await callout(
|
||||
'Plot 42B, Second Cross Street, Behind Sri Ramakrishna Mills, '
|
||||
'Ganapathy Post, Coimbatore, Tamil Nadu 641006',
|
||||
3.0,
|
||||
);
|
||||
print('long address at dpr=3: ${long.w}x${long.h}px');
|
||||
expect(long.w, lessThanOrEqualTo((190 + 24) * 3 + 2));
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user