Skip to content

Commit 504fa49

Browse files
committed
chore: migrate to flutter_quill 11.0.0
1 parent fd28710 commit 504fa49

File tree

19 files changed

+162
-269
lines changed

19 files changed

+162
-269
lines changed

android/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ android {
3131

3232
defaultConfig {
3333
applicationId "net.freshplatform.fresh_notes"
34-
// TODO: Use flutter.minSdkVersion once remove super_clipboard
34+
// Required by firebase_auth
3535
minSdk = 23
3636
targetSdk = flutter.targetSdkVersion
3737
versionCode = flutter.versionCode

android/app/src/main/AndroidManifest.xml

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,16 @@
6565
android:name="flutterEmbedding"
6666
android:value="2" />
6767

68+
<!-- https://pub.dev/packages/quill_native_bridge#-platform-configuration -->
6869
<provider
69-
android:name="com.superlist.super_native_extensions.DataProvider"
70-
android:authorities="net.freshplatform.fresh_notes.SuperClipboardDataProvider"
71-
android:exported="true"
72-
android:grantUriPermissions="true" />
70+
android:name="androidx.core.content.FileProvider"
71+
android:authorities="${applicationId}.fileprovider"
72+
android:exported="false"
73+
android:grantUriPermissions="true" >
74+
<meta-data
75+
android:name="android.support.FILE_PROVIDER_PATHS"
76+
android:resource="@xml/file_paths" />
77+
</provider>
7378
</application>
7479

7580
</manifest>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<paths>
2+
<cache-path name="cache" path="." />
3+
</paths>

lib/core/my_app.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import 'package:flutter/material.dart'
22
show Brightness, MaterialApp, ThemeData, VisualDensity;
33
import 'package:flutter/widgets.dart';
44
import 'package:flutter_bloc/flutter_bloc.dart';
5-
import 'package:flutter_quill/translations.dart' show FlutterQuillLocalizations;
5+
import 'package:flutter_localizations/flutter_localizations.dart';
6+
import 'package:flutter_quill/flutter_quill.dart';
67

78
import '../core/log/logger.dart';
89
import '../data/core/cloud/storage/s_cloud_storage.dart';
@@ -96,7 +97,10 @@ class MyApp extends StatelessWidget {
9697
return child ?? (throw ArgumentError('Child should not be null'));
9798
},
9899
localizationsDelegates: const [
99-
...AppLocalizations.localizationsDelegates,
100+
GlobalMaterialLocalizations.delegate,
101+
GlobalCupertinoLocalizations.delegate,
102+
GlobalWidgetsLocalizations.delegate,
103+
AppLocalizations.delegate,
100104
FlutterQuillLocalizations.delegate,
101105
],
102106
supportedLocales: AppLocalizations.supportedLocales,

lib/logic/note/cubit/note_cubit.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ class NoteCubit extends Cubit<NoteState> {
253253
Future<void> _deleteNoteCloudFiles(QuillImageUtilities imageUtilities) async {
254254
final images =
255255
imageUtilities.getImagesPathsFromDocument(onlyLocalImages: false).where(
256-
(e) => e.isHttpBasedUrl(),
256+
(e) => e.isHttpUrl(),
257257
);
258258
for (final imageUrl in images) {
259259
await deleteNoteCloudImage(imageUrl);
@@ -338,7 +338,7 @@ class NoteCubit extends Cubit<NoteState> {
338338
final cloudImages =
339339
_getImageUtilitiesByNoteText(currentLocalNote.text)
340340
.getImagesPathsFromDocument(onlyLocalImages: false)
341-
.where((note) => note.isHttpBasedUrl());
341+
.where((note) => note.isHttpUrl());
342342
final localImages = <String>[];
343343
for (final cloudImage in cloudImages) {
344344
final response = await http.get(Uri.parse(cloudImage));

lib/logic/utils/extensions/string.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ extension StringExtensions on String {
1414
return input.replaceAll(RegExp(r'\s+'), ' ');
1515
}
1616

17-
bool isHttpBasedUrl() {
17+
bool isHttpUrl() {
1818
try {
1919
final url = this;
2020
final uri = Uri.parse(url.trim());

lib/main.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import 'package:flutter/material.dart' show AppBar, MaterialApp, Scaffold;
33
import 'package:flutter/widgets.dart'
44
show Center, WidgetsFlutterBinding, runApp;
55
import 'package:flutter_dotenv/flutter_dotenv.dart' show dotenv;
6-
import 'package:flutter_quill_extensions/flutter_quill_extensions.dart';
76
import 'package:logging/logging.dart' show Logger;
87

98
import 'core/log/logger.dart';
@@ -25,8 +24,6 @@ Future<void> main() async {
2524

2625
await dotenv.load(fileName: '.env');
2726
await AppStartup.getInstance().initialize();
28-
// ignore: deprecated_member_use
29-
FlutterQuillExtensions.useSuperClipboardPlugin();
3027
runApp(const MyApp());
3128
} catch (e) {
3229
AppLogger.error(e);

lib/presentation/components/note/editor/w_editor.dart

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,16 @@ import '../../base/w_app_scroll_bar.dart';
1919
class NoteEditor extends StatefulWidget {
2020
const NoteEditor({
2121
required this.onRequestingSaveNote,
22-
required this.configurations,
22+
required this.config,
2323
required FocusNode focusNode,
24+
required this.controller,
2425
super.key,
2526
}) : _editorFocusNode = focusNode;
2627

2728
final VoidCallback onRequestingSaveNote;
28-
final QuillEditorConfigurations configurations;
29+
final QuillEditorConfig config;
2930
final FocusNode _editorFocusNode;
31+
final QuillController controller;
3032

3133
@override
3234
State<NoteEditor> createState() => _NoteEditorState();
@@ -53,15 +55,15 @@ class _NoteEditorState extends State<NoteEditor> {
5355
}
5456
return [
5557
...FlutterQuillEmbeds.editorBuilders(
56-
imageEmbedConfigurations: QuillEditorImageEmbedConfigurations(
58+
imageEmbedConfig: QuillEditorImageEmbedConfig(
5759
imageProviderBuilder: (context, imageUrl) {
58-
if (isHttpBasedUrl(imageUrl)) {
60+
if (imageUrl.isHttpUrl()) {
5961
return CachedNetworkImageProvider(imageUrl);
6062
}
6163
return FileImage(File(imageUrl));
6264
},
6365
onImageRemovedCallback: (imageUrl) async {
64-
if (imageUrl.isHttpBasedUrl()) {
66+
if (imageUrl.isHttpUrl()) {
6567
await context.read<NoteCubit>().deleteNoteCloudImage(imageUrl);
6668
return;
6769
}
@@ -102,7 +104,8 @@ class _NoteEditorState extends State<NoteEditor> {
102104
return AppScrollBar(
103105
child: SingleChildScrollView(
104106
child: QuillEditor(
105-
configurations: widget.configurations.copyWith(
107+
controller: widget.controller,
108+
config: widget.config.copyWith(
106109
placeholder: context.loc.noteEditorPlaceholder,
107110
padding: const EdgeInsets.symmetric(horizontal: 16),
108111
minHeight: 1000,

lib/presentation/components/note/toolbar/w_note_toolbar.dart

Lines changed: 55 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -31,64 +31,62 @@ class _NoteToolbarState extends State<NoteToolbar> {
3131
Widget build(BuildContext context) {
3232
return SizedBox(
3333
width: double.infinity,
34-
child: QuillToolbar(
35-
child: _currentWidget ??
36-
SingleChildScrollView(
37-
scrollDirection: Axis.horizontal,
38-
child: Row(
39-
children: [
40-
const SizedBox(width: 10),
41-
// NoteToolbarImageButton(
42-
// controller: widget._controller,
43-
// ),
44-
QuillToolbarImageButton(controller: widget._controller),
45-
NoteToolbarChecklistButton(
46-
controller: widget._controller,
47-
),
48-
NoteToolbarTextOptionsButton(
49-
controller: widget._controller,
50-
onNavigate: (newWidget) =>
51-
setState(() => _currentWidget = newWidget),
52-
onNavigateBack: () => setState(() => _currentWidget = null),
53-
),
54-
QuillToolbarClearFormatButton(
55-
controller: widget._controller,
56-
),
57-
QuillToolbarLinkStyleButton(
58-
controller: widget._controller,
59-
),
60-
QuillToolbarVideoButton(controller: widget._controller),
61-
QuillToolbarColorButton(
62-
controller: widget._controller,
63-
isBackground: true,
64-
),
65-
QuillToolbarColorButton(
66-
controller: widget._controller,
67-
isBackground: false,
68-
),
69-
QuillToolbarHistoryButton(
70-
controller: widget._controller,
71-
isUndo: true,
72-
),
73-
QuillToolbarHistoryButton(
74-
controller: widget._controller,
75-
isUndo: false,
76-
),
77-
QuillToolbarSelectHeaderStyleDropdownButton(
78-
controller: widget._controller,
79-
),
80-
QuillToolbarFontSizeButton(
81-
controller: widget._controller,
82-
),
83-
QuillToolbarFontFamilyButton(
84-
controller: widget._controller,
85-
),
86-
const NoteToolbarFullScreenButton(),
87-
const SizedBox(width: 10),
88-
],
89-
),
34+
child: _currentWidget ??
35+
SingleChildScrollView(
36+
scrollDirection: Axis.horizontal,
37+
child: Row(
38+
children: [
39+
const SizedBox(width: 10),
40+
// NoteToolbarImageButton(
41+
// controller: widget._controller,
42+
// ),
43+
QuillToolbarImageButton(controller: widget._controller),
44+
NoteToolbarChecklistButton(
45+
controller: widget._controller,
46+
),
47+
NoteToolbarTextOptionsButton(
48+
controller: widget._controller,
49+
onNavigate: (newWidget) =>
50+
setState(() => _currentWidget = newWidget),
51+
onNavigateBack: () => setState(() => _currentWidget = null),
52+
),
53+
QuillToolbarClearFormatButton(
54+
controller: widget._controller,
55+
),
56+
QuillToolbarLinkStyleButton(
57+
controller: widget._controller,
58+
),
59+
QuillToolbarVideoButton(controller: widget._controller),
60+
QuillToolbarColorButton(
61+
controller: widget._controller,
62+
isBackground: true,
63+
),
64+
QuillToolbarColorButton(
65+
controller: widget._controller,
66+
isBackground: false,
67+
),
68+
QuillToolbarHistoryButton(
69+
controller: widget._controller,
70+
isUndo: true,
71+
),
72+
QuillToolbarHistoryButton(
73+
controller: widget._controller,
74+
isUndo: false,
75+
),
76+
QuillToolbarSelectHeaderStyleDropdownButton(
77+
controller: widget._controller,
78+
),
79+
QuillToolbarFontSizeButton(
80+
controller: widget._controller,
81+
),
82+
QuillToolbarFontFamilyButton(
83+
controller: widget._controller,
84+
),
85+
const NoteToolbarFullScreenButton(),
86+
const SizedBox(width: 10),
87+
],
9088
),
91-
),
89+
),
9290
);
9391
}
9492
}

lib/presentation/components/note/toolbar/w_select_image_source.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'package:flutter/material.dart';
2-
import 'package:flutter_quill/translations.dart';
2+
import 'package:flutter_quill/internal.dart';
33
import 'package:go_router/go_router.dart';
44

55
import 'w_note_toolbar.dart';

lib/presentation/screens/note/s_note.dart

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -257,15 +257,14 @@ class _NoteScreenState extends State<NoteScreen> {
257257
children: [
258258
if (false)
259259
// ignore: dead_code
260-
QuillToolbar.simple(
261-
configurations: QuillSimpleToolbarConfigurations(
262-
controller: _controller,
260+
QuillSimpleToolbar(
261+
controller: _controller,
262+
config: QuillSimpleToolbarConfig(
263263
showAlignmentButtons: true,
264264
embedButtons: [
265265
...FlutterQuillEmbeds.toolbarButtons(
266266
imageButtonOptions: QuillToolbarImageButtonOptions(
267-
imageButtonConfigurations:
268-
const QuillToolbarImageConfigurations(),
267+
imageButtonConfig: const QuillToolbarImageConfig(),
269268
linkRegExp: RegExp(
270269
r'https://.*?\.(?:png|jpe?g|gif|bmp|webp|tiff?)',
271270
caseSensitive: false,
@@ -297,19 +296,10 @@ class _NoteScreenState extends State<NoteScreen> {
297296
Screenshot(
298297
controller: _screenshotController,
299298
child: NoteEditor(
299+
controller: _controller,
300300
focusNode: _editorFocusNode,
301301
onRequestingSaveNote: _saveNote,
302-
configurations: QuillEditorConfigurations(
303-
controller: _controller,
304-
sharedConfigurations: const QuillSharedConfigurations(
305-
extraConfigurations: {
306-
QuillSharedExtensionsConfigurations.key:
307-
QuillSharedExtensionsConfigurations(
308-
assetsPrefix: 'assets', // Defaults to assets
309-
),
310-
},
311-
),
312-
),
302+
config: const QuillEditorConfig(),
313303
),
314304
),
315305
],

lib/presentation/screens/story/s_story.dart

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class _StoryScreenState extends State<StoryScreen> {
2121
void initState() {
2222
super.initState();
2323
_controller = QuillController(
24-
configurations: const QuillControllerConfigurations(),
24+
config: const QuillControllerConfig(),
2525
document: Document(),
2626
selection: const TextSelection.collapsed(offset: 0),
2727
readOnly: true,
@@ -65,10 +65,18 @@ class _StoryScreenState extends State<StoryScreen> {
6565
),
6666
body: SafeArea(
6767
child: QuillEditor.basic(
68-
configurations: QuillEditorConfigurations(
68+
controller: _controller,
69+
config: QuillEditorConfig(
6970
padding: const EdgeInsets.all(16),
70-
controller: _controller,
71-
embedBuilders: FlutterQuillEmbeds.defaultEditorBuilders(),
71+
embedBuilders: FlutterQuillEmbeds.editorBuilders(
72+
imageEmbedConfig: QuillEditorImageEmbedConfig(
73+
imageProviderBuilder: (context, imageUrl) {
74+
if (imageUrl.startsWith('assets/')) {
75+
return AssetImage(imageUrl);
76+
}
77+
return null;
78+
},
79+
)),
7280
),
7381
),
7482
),

linux/flutter/generated_plugin_registrant.cc

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,16 @@
77
#include "generated_plugin_registrant.h"
88

99
#include <file_selector_linux/file_selector_plugin.h>
10-
#include <irondash_engine_context/irondash_engine_context_plugin.h>
1110
#include <printing/printing_plugin.h>
12-
#include <super_native_extensions/super_native_extensions_plugin.h>
1311
#include <url_launcher_linux/url_launcher_plugin.h>
1412

1513
void fl_register_plugins(FlPluginRegistry* registry) {
1614
g_autoptr(FlPluginRegistrar) file_selector_linux_registrar =
1715
fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin");
1816
file_selector_plugin_register_with_registrar(file_selector_linux_registrar);
19-
g_autoptr(FlPluginRegistrar) irondash_engine_context_registrar =
20-
fl_plugin_registry_get_registrar_for_plugin(registry, "IrondashEngineContextPlugin");
21-
irondash_engine_context_plugin_register_with_registrar(irondash_engine_context_registrar);
2217
g_autoptr(FlPluginRegistrar) printing_registrar =
2318
fl_plugin_registry_get_registrar_for_plugin(registry, "PrintingPlugin");
2419
printing_plugin_register_with_registrar(printing_registrar);
25-
g_autoptr(FlPluginRegistrar) super_native_extensions_registrar =
26-
fl_plugin_registry_get_registrar_for_plugin(registry, "SuperNativeExtensionsPlugin");
27-
super_native_extensions_plugin_register_with_registrar(super_native_extensions_registrar);
2820
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
2921
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
3022
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);

linux/flutter/generated_plugins.cmake

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@
44

55
list(APPEND FLUTTER_PLUGIN_LIST
66
file_selector_linux
7-
irondash_engine_context
87
printing
9-
super_native_extensions
108
url_launcher_linux
119
)
1210

0 commit comments

Comments
 (0)