appflowy-editor/test/customer/custom_image_menu_test.dart
Lucas f882d958d9
feat: integrate awesome_lints and upgrade to Flutter 3.38 (#1173)
* chore: update Flutter SDK to version 3.38.5

Upgrade Flutter from 3.32.4 to 3.38.5 to meet awesome_lints
requirement for Dart SDK 3.10.0+. Update CI workflow to use
the new Flutter version and add custom_lint verification step.

* chore: integrate awesome_lints with custom lint rules

Add awesome_lints and custom_lint dependencies, configure
analysis_options.yaml to enable newline lint rules: newline_before_case,
newline_before_constructor, newline_before_method, and newline_before_return.

* style: apply newline formatting per awesome_lints rules

Add blank lines before case clauses, return statements, method
declarations, and constructors throughout the codebase to comply
with awesome_lints newline rules.

* fix: replace deprecated translate with leftTranslateByDouble

Update Matrix4.translate() calls to use the new leftTranslateByDouble()
API to resolve deprecation warnings in Flutter SDK 3.38.5.

* chore: improve code readability with blank line formatting
2025-12-23 15:12:57 +08:00

86 lines
2.3 KiB
Dart

import 'dart:ui';
import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:network_image_mock/network_image_mock.dart';
void main() async {
/// customize the image menu
await AppFlowyEditorLocalizations.load(
const Locale.fromSubtags(languageCode: 'en'),
);
testWidgets('customize the image block\'s menu', (tester) async {
await mockNetworkImagesFor(() async {
const widget = CustomImageMenu();
await tester.pumpWidget(widget);
await tester.pumpAndSettle();
final gesture = await tester.createGesture(kind: PointerDeviceKind.mouse);
await gesture.addPointer(location: Offset.zero);
addTearDown(gesture.removePointer);
await tester.pump();
await gesture.moveTo(
tester.getCenter(find.byType(ImageBlockComponentWidget)),
);
await tester.pumpAndSettle(const Duration(seconds: 1));
// expect to see the menu
expect(find.text(menu), findsOneWidget);
});
});
}
const menu = 'Here\'s a custom menu!';
class CustomImageMenu extends StatelessWidget {
const CustomImageMenu({super.key});
@override
Widget build(BuildContext context) {
const url =
'https://images.unsplash.com/photo-1682961941145-e73336a53bc6?dl=katsuma-tanaka-cWpkMDSQbWQ-unsplash.jpg';
final document = Document.blank()
..insert(
[0],
[
imageNode(
url: url,
width: 400,
height: 400,
),
],
);
final customBlockComponentBuilders = {
...standardBlockComponentBuilderMap,
ImageBlockKeys.type: ImageBlockComponentBuilder(
showMenu: true,
menuBuilder: (node, _) {
return const Positioned(
right: 10,
child: Text(menu),
);
},
),
};
final editorState = EditorState(document: document);
return MaterialApp(
home: Scaffold(
body: SafeArea(
child: Container(
width: 500,
decoration: BoxDecoration(
border: Border.all(color: Colors.blue),
),
child: AppFlowyEditor(
editorState: editorState,
blockComponentBuilders: customBlockComponentBuilders,
),
),
),
),
);
}
}