86 lines
2.5 KiB
Dart
86 lines
2.5 KiB
Dart
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 {
|
|
/// supports
|
|
///
|
|
/// - numbered list
|
|
/// - bulleted list
|
|
/// - todo list
|
|
/// - quote
|
|
await AppFlowyEditorLocalizations.load(
|
|
const Locale.fromSubtags(languageCode: 'en'),
|
|
);
|
|
testWidgets('custom block icon', (tester) async {
|
|
await mockNetworkImagesFor(() async {
|
|
const widget = CustomBlockIcon();
|
|
await tester.pumpWidget(widget);
|
|
await tester.pumpAndSettle();
|
|
|
|
iconMap.forEach((key, value) {
|
|
expect(find.byIcon(value), findsOneWidget);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
const menu = 'Here\'s a custom menu!';
|
|
|
|
final iconMap = {
|
|
BulletedListBlockKeys.type: Icons.format_list_bulleted,
|
|
NumberedListBlockKeys.type: Icons.format_list_numbered,
|
|
QuoteBlockKeys.type: Icons.format_quote,
|
|
TodoListBlockKeys.type: Icons.check_box_outline_blank,
|
|
};
|
|
|
|
class CustomBlockIcon extends StatelessWidget {
|
|
const CustomBlockIcon({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final delta = Delta()..insert('Hello World');
|
|
final document = Document.blank()
|
|
..insert(
|
|
[0],
|
|
[
|
|
bulletedListNode(delta: delta),
|
|
numberedListNode(delta: delta),
|
|
todoListNode(delta: delta, checked: false),
|
|
quoteNode(delta: delta),
|
|
],
|
|
);
|
|
|
|
final customBlockComponentBuilders = {
|
|
...standardBlockComponentBuilderMap,
|
|
BulletedListBlockKeys.type: BulletedListBlockComponentBuilder(
|
|
iconBuilder: (_, __) => Icon(iconMap[BulletedListBlockKeys.type]),
|
|
),
|
|
NumberedListBlockKeys.type: NumberedListBlockComponentBuilder(
|
|
iconBuilder: (_, __) => Icon(iconMap[NumberedListBlockKeys.type]),
|
|
),
|
|
TodoListBlockKeys.type: TodoListBlockComponentBuilder(
|
|
iconBuilder: (_, __) => Icon(iconMap[TodoListBlockKeys.type]),
|
|
),
|
|
QuoteBlockKeys.type: QuoteBlockComponentBuilder(
|
|
iconBuilder: (_, __) => Icon(iconMap[QuoteBlockKeys.type]),
|
|
),
|
|
};
|
|
|
|
final editorState = EditorState(document: document);
|
|
return MaterialApp(
|
|
home: Scaffold(
|
|
body: SafeArea(
|
|
child: SizedBox(
|
|
width: 500,
|
|
child: AppFlowyEditor(
|
|
editorState: editorState,
|
|
blockComponentBuilders: customBlockComponentBuilders,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|