import 'dart:ui' as ui; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:ikar/frontend/widgets/attachment/editor_common.dart'; import 'package:ikar/frontend/widgets/attachment/video_edit.dart'; import 'package:ikar/frontend/widgets/attachment/video_editor.dart'; import 'package:ikar/l10n/app_localizations.dart'; void main() { testWidgets( 'quality endpoints remain reachable outside Android gesture edges', (tester) async { tester.view.physicalSize = const Size(360, 640); tester.view.devicePixelRatio = 1; addTearDown(tester.view.resetPhysicalSize); addTearDown(tester.view.resetDevicePixelRatio); final recorder = ui.PictureRecorder(); final canvas = Canvas(recorder); canvas.drawColor(Colors.blue, BlendMode.src); final picture = recorder.endRecording(); final image = picture.toImageSync(32, 32); addTearDown(image.dispose); addTearDown(picture.dispose); int? selected; await tester.pumpWidget( MaterialApp( locale: const Locale('ru'), localizationsDelegates: AppLocalizations.localizationsDelegates, supportedLocales: AppLocalizations.supportedLocales, builder: (context, child) => MediaQuery( data: MediaQuery.of(context).copyWith( systemGestureInsets: const EdgeInsets.only(left: 60, right: 70), ), child: child!, ), home: Scaffold( body: Builder( builder: (context) => TextButton( onPressed: () => Navigator.of(context).push( MaterialPageRoute( builder: (_) => VideoQualityEditor( frame: image, geometry: VideoGeometry.resolve( null, const Size(720, 1280), ), adjust: ColorAdjust(), options: const [360, 480, 720], selected: 480, fps: 30, duration: const Duration(seconds: 2), onPreview: (result) async => selected = result, ), ), ), child: const Text('open'), ), ), ), ), ); await tester.tap(find.text('open')); await tester.pumpAndSettle(); final slider = find.byWidgetPredicate( (widget) => widget is GestureDetector && widget.onHorizontalDragUpdate != null && widget.child is CustomPaint, ); expect(slider, findsOneWidget); final bounds = tester.getRect(slider); expect(bounds.width, 360); expect(bounds.height, greaterThanOrEqualTo(48)); await tester.tapAt(Offset(bounds.right - 80, bounds.center.dy)); await tester.pump(); await tester.tap(find.text('ГОТОВО')); await tester.pumpAndSettle(); expect(selected, 720); expect(tester.takeException(), isNull); }, ); }