mirror of
https://github.com/krille-chan/fluffychat
synced 2024-09-10 03:45:12 +00:00
refactor: Switch to file_picker package and get rid of some dependency overrides
This commit is contained in:
parent
5606cb8252
commit
d9aa2f8e44
17 changed files with 175 additions and 212 deletions
|
@ -2519,5 +2519,12 @@
|
||||||
"reopenChat": "Reopen chat",
|
"reopenChat": "Reopen chat",
|
||||||
"noBackupWarning": "Warning! Without enabling chat backup, you will lose access to your encrypted messages. It is highly recommended to enable the chat backup first before logging out.",
|
"noBackupWarning": "Warning! Without enabling chat backup, you will lose access to your encrypted messages. It is highly recommended to enable the chat backup first before logging out.",
|
||||||
"noOtherDevicesFound": "No other devices found",
|
"noOtherDevicesFound": "No other devices found",
|
||||||
"fileIsTooBigForServer": "The server reports that the file is too large to be sent."
|
"fileIsTooBigForServer": "The server reports that the file is too large to be sent.",
|
||||||
|
"fileHasBeenSavedAt": "File has been saved at {path}",
|
||||||
|
"@fileHasBeenSavedAt": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders": {
|
||||||
|
"path": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,8 @@ import 'dart:math';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:file_picker_cross/file_picker_cross.dart';
|
import 'package:collection/collection.dart';
|
||||||
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
||||||
import 'package:image_picker/image_picker.dart';
|
import 'package:image_picker/image_picker.dart';
|
||||||
import 'package:matrix/matrix.dart';
|
import 'package:matrix/matrix.dart';
|
||||||
|
@ -68,14 +69,15 @@ class AddStoryController extends State<AddStoryPage> {
|
||||||
}
|
}
|
||||||
|
|
||||||
void importMedia() async {
|
void importMedia() async {
|
||||||
final picked = await FilePickerCross.importFromStorage(
|
final picked = await FilePicker.platform.pickFiles(
|
||||||
type: FileTypeCross.image,
|
type: FileType.image,
|
||||||
|
withData: true,
|
||||||
);
|
);
|
||||||
final fileName = picked.fileName;
|
final file = picked?.files.firstOrNull;
|
||||||
if (fileName == null) return;
|
if (file == null) return;
|
||||||
final matrixFile = MatrixImageFile(
|
final matrixFile = MatrixImageFile(
|
||||||
bytes: picked.toUint8List(),
|
bytes: file.bytes!,
|
||||||
name: fileName,
|
name: file.name,
|
||||||
);
|
);
|
||||||
setState(() {
|
setState(() {
|
||||||
image = matrixFile;
|
image = matrixFile;
|
||||||
|
|
|
@ -9,7 +9,7 @@ import 'package:adaptive_dialog/adaptive_dialog.dart';
|
||||||
import 'package:desktop_drop/desktop_drop.dart';
|
import 'package:desktop_drop/desktop_drop.dart';
|
||||||
import 'package:device_info_plus/device_info_plus.dart';
|
import 'package:device_info_plus/device_info_plus.dart';
|
||||||
import 'package:emoji_picker_flutter/emoji_picker_flutter.dart';
|
import 'package:emoji_picker_flutter/emoji_picker_flutter.dart';
|
||||||
import 'package:file_picker_cross/file_picker_cross.dart';
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
||||||
import 'package:image_picker/image_picker.dart';
|
import 'package:image_picker/image_picker.dart';
|
||||||
|
@ -352,19 +352,20 @@ class ChatController extends State<Chat> {
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendFileAction() async {
|
void sendFileAction() async {
|
||||||
final result = await FilePickerCross.importMultipleFromStorage(
|
final result = await FilePicker.platform.pickFiles(
|
||||||
type: FileTypeCross.any,
|
allowMultiple: true,
|
||||||
|
withData: true,
|
||||||
);
|
);
|
||||||
if (result.isEmpty) return;
|
if (result == null || result.files.isEmpty) return;
|
||||||
await showDialog(
|
await showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
useRootNavigator: false,
|
useRootNavigator: false,
|
||||||
builder: (c) => SendFileDialog(
|
builder: (c) => SendFileDialog(
|
||||||
files: result
|
files: result.files
|
||||||
.map(
|
.map(
|
||||||
(xfile) => MatrixFile(
|
(xfile) => MatrixFile(
|
||||||
bytes: xfile.toUint8List(),
|
bytes: xfile.bytes!,
|
||||||
name: xfile.fileName!,
|
name: xfile.name,
|
||||||
).detectFileType,
|
).detectFileType,
|
||||||
)
|
)
|
||||||
.toList(),
|
.toList(),
|
||||||
|
@ -374,20 +375,22 @@ class ChatController extends State<Chat> {
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendImageAction() async {
|
void sendImageAction() async {
|
||||||
final result = await FilePickerCross.importMultipleFromStorage(
|
final result = await FilePicker.platform.pickFiles(
|
||||||
type: FileTypeCross.image,
|
type: FileType.image,
|
||||||
|
withData: true,
|
||||||
|
allowMultiple: true,
|
||||||
);
|
);
|
||||||
if (result.isEmpty) return;
|
if (result == null || result.files.isEmpty) return;
|
||||||
|
|
||||||
await showDialog(
|
await showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
useRootNavigator: false,
|
useRootNavigator: false,
|
||||||
builder: (c) => SendFileDialog(
|
builder: (c) => SendFileDialog(
|
||||||
files: result
|
files: result.files
|
||||||
.map(
|
.map(
|
||||||
(xfile) => MatrixFile(
|
(xfile) => MatrixFile(
|
||||||
bytes: xfile.toUint8List(),
|
bytes: xfile.bytes!,
|
||||||
name: xfile.fileName!,
|
name: xfile.name,
|
||||||
).detectFileType,
|
).detectFileType,
|
||||||
)
|
)
|
||||||
.toList(),
|
.toList(),
|
||||||
|
|
|
@ -2,7 +2,8 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
|
||||||
import 'package:adaptive_dialog/adaptive_dialog.dart';
|
import 'package:adaptive_dialog/adaptive_dialog.dart';
|
||||||
import 'package:file_picker_cross/file_picker_cross.dart';
|
import 'package:collection/collection.dart';
|
||||||
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
||||||
import 'package:image_picker/image_picker.dart';
|
import 'package:image_picker/image_picker.dart';
|
||||||
|
@ -312,12 +313,15 @@ class ChatDetailsController extends State<ChatDetails> {
|
||||||
name: result.path,
|
name: result.path,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
final result =
|
final picked = await FilePicker.platform.pickFiles(
|
||||||
await FilePickerCross.importFromStorage(type: FileTypeCross.image);
|
type: FileType.image,
|
||||||
if (result.fileName == null) return;
|
withData: true,
|
||||||
|
);
|
||||||
|
final pickedFile = picked?.files.firstOrNull;
|
||||||
|
if (pickedFile == null) return;
|
||||||
file = MatrixFile(
|
file = MatrixFile(
|
||||||
bytes: result.toUint8List(),
|
bytes: pickedFile.bytes!,
|
||||||
name: result.fileName!,
|
name: pickedFile.name,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
await showFutureLoadingDialog(
|
await showFutureLoadingDialog(
|
||||||
|
|
|
@ -4,7 +4,8 @@ import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:adaptive_dialog/adaptive_dialog.dart';
|
import 'package:adaptive_dialog/adaptive_dialog.dart';
|
||||||
import 'package:file_picker_cross/file_picker_cross.dart';
|
import 'package:collection/collection.dart';
|
||||||
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
||||||
import 'package:hive_flutter/hive_flutter.dart';
|
import 'package:hive_flutter/hive_flutter.dart';
|
||||||
|
@ -186,14 +187,15 @@ class HomeserverPickerController extends State<HomeserverPicker> {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> restoreBackup() async {
|
Future<void> restoreBackup() async {
|
||||||
final file = await FilePickerCross.importFromStorage();
|
final picked = await FilePicker.platform.pickFiles(withData: true);
|
||||||
if (file.fileName == null) return;
|
final file = picked?.files.firstOrNull;
|
||||||
|
if (file == null) return;
|
||||||
await showFutureLoadingDialog(
|
await showFutureLoadingDialog(
|
||||||
context: context,
|
context: context,
|
||||||
future: () async {
|
future: () async {
|
||||||
try {
|
try {
|
||||||
final client = Matrix.of(context).getLoginClient();
|
final client = Matrix.of(context).getLoginClient();
|
||||||
await client.importDump(file.toString());
|
await client.importDump(String.fromCharCodes(file.bytes!));
|
||||||
Matrix.of(context).initMatrix();
|
Matrix.of(context).initMatrix();
|
||||||
} catch (e, s) {
|
} catch (e, s) {
|
||||||
Logs().e('Future error:', e, s);
|
Logs().e('Future error:', e, s);
|
||||||
|
|
|
@ -3,7 +3,8 @@ import 'dart:async';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:adaptive_dialog/adaptive_dialog.dart';
|
import 'package:adaptive_dialog/adaptive_dialog.dart';
|
||||||
import 'package:file_picker_cross/file_picker_cross.dart';
|
import 'package:collection/collection.dart';
|
||||||
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
||||||
import 'package:image_picker/image_picker.dart';
|
import 'package:image_picker/image_picker.dart';
|
||||||
|
@ -134,12 +135,15 @@ class SettingsController extends State<Settings> {
|
||||||
name: result.path,
|
name: result.path,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
final result =
|
final result = await FilePicker.platform.pickFiles(
|
||||||
await FilePickerCross.importFromStorage(type: FileTypeCross.image);
|
type: FileType.image,
|
||||||
if (result.fileName == null) return;
|
withData: true,
|
||||||
|
);
|
||||||
|
final pickedFile = result?.files.firstOrNull;
|
||||||
|
if (pickedFile == null) return;
|
||||||
file = MatrixFile(
|
file = MatrixFile(
|
||||||
bytes: result.toUint8List(),
|
bytes: pickedFile.bytes!,
|
||||||
name: result.fileName!,
|
name: pickedFile.name,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
final success = await showFutureLoadingDialog(
|
final success = await showFutureLoadingDialog(
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:adaptive_dialog/adaptive_dialog.dart';
|
import 'package:adaptive_dialog/adaptive_dialog.dart';
|
||||||
import 'package:file_picker_cross/file_picker_cross.dart';
|
import 'package:collection/collection.dart';
|
||||||
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
||||||
import 'package:matrix/matrix.dart';
|
import 'package:matrix/matrix.dart';
|
||||||
|
@ -209,12 +210,15 @@ class EmotesSettingsController extends State<EmotesSettings> {
|
||||||
void imagePickerAction(
|
void imagePickerAction(
|
||||||
ValueNotifier<ImagePackImageContent?> controller,
|
ValueNotifier<ImagePackImageContent?> controller,
|
||||||
) async {
|
) async {
|
||||||
final result =
|
final result = await FilePicker.platform.pickFiles(
|
||||||
await FilePickerCross.importFromStorage(type: FileTypeCross.image);
|
type: FileType.image,
|
||||||
if (result.fileName == null) return;
|
withData: true,
|
||||||
|
);
|
||||||
|
final pickedFile = result?.files.firstOrNull;
|
||||||
|
if (pickedFile == null) return;
|
||||||
var file = MatrixImageFile(
|
var file = MatrixImageFile(
|
||||||
bytes: result.toUint8List(),
|
bytes: pickedFile.bytes!,
|
||||||
name: result.fileName!,
|
name: pickedFile.name,
|
||||||
);
|
);
|
||||||
try {
|
try {
|
||||||
file = (await file.generateThumbnail(
|
file = (await file.generateThumbnail(
|
||||||
|
|
|
@ -4,7 +4,6 @@ import 'dart:typed_data';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:adaptive_dialog/adaptive_dialog.dart';
|
import 'package:adaptive_dialog/adaptive_dialog.dart';
|
||||||
import 'package:file_picker_cross/file_picker_cross.dart';
|
|
||||||
import 'package:flutter_app_lock/flutter_app_lock.dart';
|
import 'package:flutter_app_lock/flutter_app_lock.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||||
|
@ -13,6 +12,7 @@ import 'package:intl/intl.dart';
|
||||||
import 'package:matrix/matrix.dart';
|
import 'package:matrix/matrix.dart';
|
||||||
|
|
||||||
import 'package:fluffychat/config/setting_keys.dart';
|
import 'package:fluffychat/config/setting_keys.dart';
|
||||||
|
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart';
|
||||||
import 'package:fluffychat/widgets/matrix.dart';
|
import 'package:fluffychat/widgets/matrix.dart';
|
||||||
import '../bootstrap/bootstrap_dialog.dart';
|
import '../bootstrap/bootstrap_dialog.dart';
|
||||||
import 'settings_security_view.dart';
|
import 'settings_security_view.dart';
|
||||||
|
@ -177,25 +177,23 @@ class SettingsSecurityController extends State<SettingsSecurity> {
|
||||||
if (response != OkCancelResult.ok) {
|
if (response != OkCancelResult.ok) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await showFutureLoadingDialog(
|
final file = await showFutureLoadingDialog(
|
||||||
context: context,
|
context: context,
|
||||||
future: () async {
|
future: () async {
|
||||||
try {
|
|
||||||
final export = await Matrix.of(context).client.exportDump();
|
final export = await Matrix.of(context).client.exportDump();
|
||||||
final filePickerCross = FilePickerCross(
|
if (export == null) throw Exception('Export data is null.');
|
||||||
Uint8List.fromList(const Utf8Codec().encode(export!)),
|
|
||||||
path:
|
final exportBytes = Uint8List.fromList(
|
||||||
'/fluffychat-export-${DateFormat(DateFormat.YEAR_MONTH_DAY).format(DateTime.now())}.fluffybackup',
|
const Utf8Codec().encode(export),
|
||||||
fileExtension: 'fluffybackup',
|
|
||||||
);
|
);
|
||||||
await filePickerCross.exportToStorage(
|
|
||||||
subject: L10n.of(context)!.dehydrateShare,
|
final exportFileName =
|
||||||
);
|
'fluffychat-export-${DateFormat(DateFormat.YEAR_MONTH_DAY).format(DateTime.now())}.fluffybackup';
|
||||||
} catch (e, s) {
|
|
||||||
Logs().e('Export error', e, s);
|
return MatrixFile(bytes: exportBytes, name: exportFileName);
|
||||||
}
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
file.result?.save(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import 'dart:io';
|
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:file_picker_cross/file_picker_cross.dart';
|
import 'package:collection/collection.dart';
|
||||||
|
import 'package:file_picker/file_picker.dart';
|
||||||
|
|
||||||
import 'package:fluffychat/config/app_config.dart';
|
import 'package:fluffychat/config/app_config.dart';
|
||||||
import 'package:fluffychat/config/setting_keys.dart';
|
import 'package:fluffychat/config/setting_keys.dart';
|
||||||
|
@ -19,14 +18,16 @@ class SettingsStyle extends StatefulWidget {
|
||||||
|
|
||||||
class SettingsStyleController extends State<SettingsStyle> {
|
class SettingsStyleController extends State<SettingsStyle> {
|
||||||
void setWallpaperAction() async {
|
void setWallpaperAction() async {
|
||||||
final wallpaper =
|
final picked = await FilePicker.platform.pickFiles(
|
||||||
await FilePickerCross.importFromStorage(type: FileTypeCross.image);
|
type: FileType.image,
|
||||||
final path = wallpaper.path;
|
withData: false,
|
||||||
if (path == null) return;
|
);
|
||||||
Matrix.of(context).wallpaper = File(path);
|
final pickedFile = picked?.files.firstOrNull;
|
||||||
|
|
||||||
|
if (pickedFile == null) return;
|
||||||
await Matrix.of(context)
|
await Matrix.of(context)
|
||||||
.store
|
.store
|
||||||
.setItem(SettingKeys.wallpaper, wallpaper.path);
|
.setItem(SettingKeys.wallpaper, pickedFile.path);
|
||||||
setState(() {});
|
setState(() {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,14 @@
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:file_picker_cross/file_picker_cross.dart';
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:image_picker/image_picker.dart';
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
|
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
||||||
import 'package:matrix/matrix.dart';
|
import 'package:matrix/matrix.dart';
|
||||||
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:share_plus/share_plus.dart';
|
import 'package:share_plus/share_plus.dart';
|
||||||
|
import 'package:universal_html/html.dart' as html;
|
||||||
|
|
||||||
import 'package:fluffychat/utils/platform_infos.dart';
|
import 'package:fluffychat/utils/platform_infos.dart';
|
||||||
import 'package:fluffychat/utils/size_string.dart';
|
import 'package:fluffychat/utils/size_string.dart';
|
||||||
|
@ -13,10 +18,65 @@ extension MatrixFileExtension on MatrixFile {
|
||||||
if (PlatformInfos.isIOS) {
|
if (PlatformInfos.isIOS) {
|
||||||
return share(context);
|
return share(context);
|
||||||
}
|
}
|
||||||
final fileName = name.split('/').last;
|
|
||||||
|
|
||||||
final file = FilePickerCross(bytes);
|
if (PlatformInfos.isWeb) {
|
||||||
await file.exportToStorage(fileName: fileName, share: false);
|
_webDownload();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final downloadPath = PlatformInfos.isAndroid
|
||||||
|
? await getDownloadPathAndroid()
|
||||||
|
: await FilePicker.platform.saveFile(
|
||||||
|
dialogTitle: L10n.of(context)!.saveFile,
|
||||||
|
fileName: name,
|
||||||
|
type: filePickerFileType,
|
||||||
|
);
|
||||||
|
if (downloadPath == null) return;
|
||||||
|
|
||||||
|
final result = await showFutureLoadingDialog(
|
||||||
|
context: context,
|
||||||
|
future: () => File(downloadPath).writeAsBytes(bytes),
|
||||||
|
);
|
||||||
|
if (result.error != null) return;
|
||||||
|
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
SnackBar(
|
||||||
|
content: Text(
|
||||||
|
L10n.of(context)!.fileHasBeenSavedAt(downloadPath),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<String> getDownloadPathAndroid() async {
|
||||||
|
final downloadDirectories = await getExternalStorageDirectories(
|
||||||
|
type: StorageDirectory.downloads,
|
||||||
|
);
|
||||||
|
if (downloadDirectories != null && downloadDirectories.isNotEmpty) {
|
||||||
|
return downloadDirectories.first.path;
|
||||||
|
}
|
||||||
|
final fallbackDirectory = await getApplicationDocumentsDirectory();
|
||||||
|
return fallbackDirectory.path;
|
||||||
|
}
|
||||||
|
|
||||||
|
FileType get filePickerFileType {
|
||||||
|
if (this is MatrixImageFile) return FileType.image;
|
||||||
|
if (this is MatrixAudioFile) return FileType.audio;
|
||||||
|
if (this is MatrixVideoFile) return FileType.video;
|
||||||
|
return FileType.any;
|
||||||
|
}
|
||||||
|
|
||||||
|
void _webDownload() {
|
||||||
|
html.AnchorElement(
|
||||||
|
href: html.Url.createObjectUrlFromBlob(
|
||||||
|
html.Blob(
|
||||||
|
[bytes],
|
||||||
|
'application/octet-stream',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
..download = name
|
||||||
|
..click();
|
||||||
}
|
}
|
||||||
|
|
||||||
void share(BuildContext context) async {
|
void share(BuildContext context) async {
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
#include <desktop_lifecycle/desktop_lifecycle_plugin.h>
|
#include <desktop_lifecycle/desktop_lifecycle_plugin.h>
|
||||||
#include <dynamic_color/dynamic_color_plugin.h>
|
#include <dynamic_color/dynamic_color_plugin.h>
|
||||||
#include <emoji_picker_flutter/emoji_picker_flutter_plugin.h>
|
#include <emoji_picker_flutter/emoji_picker_flutter_plugin.h>
|
||||||
#include <file_selector_linux/file_selector_plugin.h>
|
|
||||||
#include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h>
|
#include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h>
|
||||||
#include <handy_window/handy_window_plugin.h>
|
#include <handy_window/handy_window_plugin.h>
|
||||||
#include <record_linux/record_linux_plugin.h>
|
#include <record_linux/record_linux_plugin.h>
|
||||||
|
@ -29,9 +28,6 @@ void fl_register_plugins(FlPluginRegistry* registry) {
|
||||||
g_autoptr(FlPluginRegistrar) emoji_picker_flutter_registrar =
|
g_autoptr(FlPluginRegistrar) emoji_picker_flutter_registrar =
|
||||||
fl_plugin_registry_get_registrar_for_plugin(registry, "EmojiPickerFlutterPlugin");
|
fl_plugin_registry_get_registrar_for_plugin(registry, "EmojiPickerFlutterPlugin");
|
||||||
emoji_picker_flutter_plugin_register_with_registrar(emoji_picker_flutter_registrar);
|
emoji_picker_flutter_plugin_register_with_registrar(emoji_picker_flutter_registrar);
|
||||||
g_autoptr(FlPluginRegistrar) file_selector_linux_registrar =
|
|
||||||
fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin");
|
|
||||||
file_selector_plugin_register_with_registrar(file_selector_linux_registrar);
|
|
||||||
g_autoptr(FlPluginRegistrar) flutter_secure_storage_linux_registrar =
|
g_autoptr(FlPluginRegistrar) flutter_secure_storage_linux_registrar =
|
||||||
fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterSecureStorageLinuxPlugin");
|
fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterSecureStorageLinuxPlugin");
|
||||||
flutter_secure_storage_linux_plugin_register_with_registrar(flutter_secure_storage_linux_registrar);
|
flutter_secure_storage_linux_plugin_register_with_registrar(flutter_secure_storage_linux_registrar);
|
||||||
|
|
|
@ -7,7 +7,6 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
||||||
desktop_lifecycle
|
desktop_lifecycle
|
||||||
dynamic_color
|
dynamic_color
|
||||||
emoji_picker_flutter
|
emoji_picker_flutter
|
||||||
file_selector_linux
|
|
||||||
flutter_secure_storage_linux
|
flutter_secure_storage_linux
|
||||||
handy_window
|
handy_window
|
||||||
record_linux
|
record_linux
|
||||||
|
|
|
@ -12,7 +12,6 @@ import desktop_lifecycle
|
||||||
import device_info_plus
|
import device_info_plus
|
||||||
import dynamic_color
|
import dynamic_color
|
||||||
import emoji_picker_flutter
|
import emoji_picker_flutter
|
||||||
import file_selector_macos
|
|
||||||
import flutter_app_badger
|
import flutter_app_badger
|
||||||
import flutter_local_notifications
|
import flutter_local_notifications
|
||||||
import flutter_secure_storage_macos
|
import flutter_secure_storage_macos
|
||||||
|
@ -24,7 +23,7 @@ import macos_ui
|
||||||
import package_info_plus_macos
|
import package_info_plus_macos
|
||||||
import path_provider_foundation
|
import path_provider_foundation
|
||||||
import record_macos
|
import record_macos
|
||||||
import share_plus_macos
|
import share_plus
|
||||||
import shared_preferences_macos
|
import shared_preferences_macos
|
||||||
import sqflite
|
import sqflite
|
||||||
import url_launcher_macos
|
import url_launcher_macos
|
||||||
|
@ -39,7 +38,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||||
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
|
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
|
||||||
DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin"))
|
DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin"))
|
||||||
EmojiPickerFlutterPlugin.register(with: registry.registrar(forPlugin: "EmojiPickerFlutterPlugin"))
|
EmojiPickerFlutterPlugin.register(with: registry.registrar(forPlugin: "EmojiPickerFlutterPlugin"))
|
||||||
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
|
|
||||||
FlutterAppBadgerPlugin.register(with: registry.registrar(forPlugin: "FlutterAppBadgerPlugin"))
|
FlutterAppBadgerPlugin.register(with: registry.registrar(forPlugin: "FlutterAppBadgerPlugin"))
|
||||||
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
|
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
|
||||||
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
|
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
|
||||||
|
|
130
pubspec.lock
130
pubspec.lock
|
@ -337,14 +337,6 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.0.0"
|
version: "7.0.0"
|
||||||
disk_space:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: disk_space
|
|
||||||
sha256: fb27eb2d09ac04784f45b95b1355538b2355c76a081eeaa8439d1a5cfa263888
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.2.1"
|
|
||||||
dynamic_color:
|
dynamic_color:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -418,77 +410,13 @@ packages:
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.4"
|
version: "6.1.4"
|
||||||
file_picker:
|
file_picker:
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: file_picker
|
|
||||||
sha256: "704259669b5e9cb24e15c11cfcf02caf5f20d30901b3916d60b6d1c2d647035f"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "4.6.1"
|
|
||||||
file_picker_cross:
|
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: file_picker_cross
|
name: file_picker
|
||||||
sha256: f418cb32f29ad3f1a48ec7ed88b3007e8a7aadb2e18f38addb65db1e81d6b6fa
|
sha256: d8e9ca7e5d1983365c277f12c21b4362df6cf659c99af146ad4d04eb33033013
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.6.0"
|
version: "5.2.6"
|
||||||
file_selector:
|
|
||||||
dependency: "direct overridden"
|
|
||||||
description:
|
|
||||||
name: file_selector
|
|
||||||
sha256: b20af14306e7ce567b7c76076b8c010dcce4bc2f3c4b5137dceb9e4db8ece006
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.9.2+2"
|
|
||||||
file_selector_ios:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: file_selector_ios
|
|
||||||
sha256: "904091b110b64565566fbb98b334590670de5d7ddd7541be15db22d4e64203eb"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.5.0+2"
|
|
||||||
file_selector_linux:
|
|
||||||
dependency: "direct overridden"
|
|
||||||
description:
|
|
||||||
name: file_selector_linux
|
|
||||||
sha256: "30edefcdb76be8f4a2dadf57554b42a2791c06cdbc2db62894a918ea36c37cff"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.9.1"
|
|
||||||
file_selector_macos:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: file_selector_macos
|
|
||||||
sha256: "6fd5242e12b6b0b0d2e59e779a7eafaeaa374687c84e8ad1e948e5dad8941109"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.9.0+4"
|
|
||||||
file_selector_platform_interface:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: file_selector_platform_interface
|
|
||||||
sha256: "17cdfe3d13a7d3e29e3d3978577ce840fcf94497d7de51bdea378abf9a34fc2c"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "2.4.0"
|
|
||||||
file_selector_web:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: file_selector_web
|
|
||||||
sha256: "0175186c42ef8d622c7cf214e46294f8dbe81ae32ae4407896c773c8f7dc930b"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.9.0+2"
|
|
||||||
file_selector_windows:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: file_selector_windows
|
|
||||||
sha256: "1cfeddc127f78f3f96803ad7c3d3ce500791cbefb15a7b19b9ee71e7b92ff4b4"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.9.1+4"
|
|
||||||
flutter:
|
flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
|
@ -531,14 +459,6 @@ packages:
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
flutter_file_dialog:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: flutter_file_dialog
|
|
||||||
sha256: fb19d8b7c811a70947344695001e82777921fdc0ed5c80289440f096ae22b10f
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "2.3.2"
|
|
||||||
flutter_foreground_task:
|
flutter_foreground_task:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -1667,26 +1587,10 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: share_plus
|
name: share_plus
|
||||||
sha256: f582d5741930f3ad1bf0211d358eddc0508cc346e5b4b248bd1e569c995ebb7a
|
sha256: "8c6892037b1824e2d7e8f59d54b3105932899008642e6372e5079c6939b4b625"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.5.3"
|
version: "6.3.1"
|
||||||
share_plus_linux:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: share_plus_linux
|
|
||||||
sha256: dc32bf9f1151b9864bb86a997c61a487967a08f2e0b4feaa9a10538712224da4
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "3.0.1"
|
|
||||||
share_plus_macos:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: share_plus_macos
|
|
||||||
sha256: "44daa946f2845045ecd7abb3569b61cd9a55ae9cc4cbec9895b2067b270697ae"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "3.0.1"
|
|
||||||
share_plus_platform_interface:
|
share_plus_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1695,22 +1599,6 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.2.0"
|
version: "3.2.0"
|
||||||
share_plus_web:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: share_plus_web
|
|
||||||
sha256: eaef05fa8548b372253e772837dd1fbe4ce3aca30ea330765c945d7d4f7c9935
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "3.1.0"
|
|
||||||
share_plus_windows:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: share_plus_windows
|
|
||||||
sha256: "3a21515ae7d46988d42130cd53294849e280a5de6ace24bae6912a1bffd757d4"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "3.0.1"
|
|
||||||
shared_preferences:
|
shared_preferences:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -2208,10 +2096,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: wakelock_windows
|
name: wakelock_windows
|
||||||
sha256: "108b1b73711f1664ee462e73af34a9286ff496e27d4d8371e2fb4da8fde4cdac"
|
sha256: "857f77b3fe6ae82dd045455baa626bc4b93cb9bb6c86bf3f27c182167c3a5567"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.2.0"
|
version: "0.2.1"
|
||||||
watcher:
|
watcher:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -2240,10 +2128,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: win32
|
name: win32
|
||||||
sha256: "6b75ac2ddd42f5c226fdaf4498a2b04071c06f1f2b8f7ab1c3f77cc7f2285ff1"
|
sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.7.0"
|
version: "3.1.3"
|
||||||
wkt_parser:
|
wkt_parser:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -25,7 +25,7 @@ dependencies:
|
||||||
emoji_proposal: ^0.0.1
|
emoji_proposal: ^0.0.1
|
||||||
emojis: ^0.9.9
|
emojis: ^0.9.9
|
||||||
#fcm_shared_isolate: ^0.1.0
|
#fcm_shared_isolate: ^0.1.0
|
||||||
file_picker_cross: ^4.6.0
|
file_picker: ^5.2.6
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
flutter_app_badger: ^1.5.0
|
flutter_app_badger: ^1.5.0
|
||||||
|
@ -72,7 +72,7 @@ dependencies:
|
||||||
receive_sharing_intent: ^1.4.5
|
receive_sharing_intent: ^1.4.5
|
||||||
record: ^4.4.4
|
record: ^4.4.4
|
||||||
scroll_to_index: ^3.0.1
|
scroll_to_index: ^3.0.1
|
||||||
share_plus: ^4.0.10+1
|
share_plus: ^6.3.1
|
||||||
shared_preferences: 2.0.15 # Pinned because https://github.com/flutter/flutter/issues/118401
|
shared_preferences: 2.0.15 # Pinned because https://github.com/flutter/flutter/issues/118401
|
||||||
slugify: ^2.0.0
|
slugify: ^2.0.0
|
||||||
swipe_to_action: ^0.2.0
|
swipe_to_action: ^0.2.0
|
||||||
|
@ -143,11 +143,8 @@ msix_config:
|
||||||
install_certificate: false
|
install_certificate: false
|
||||||
|
|
||||||
dependency_overrides:
|
dependency_overrides:
|
||||||
# Until all dependencies are compatible. Missing: file_picker_cross, flutter_matrix_html
|
# Until all dependencies are compatible. Missing: flutter_matrix_html
|
||||||
ffi: ^2.0.0
|
ffi: ^2.0.0
|
||||||
# This otherwise breaks on linux with flutter 3.7.0, let's override it for now.
|
|
||||||
file_selector: ^0.9.2+2
|
|
||||||
file_selector_linux: ^0.9.1
|
|
||||||
# fake secure storage plugin for Windows
|
# fake secure storage plugin for Windows
|
||||||
# See: https://gitlab.com/gitlab-com/gl-infra/reliability/-/issues/15161
|
# See: https://gitlab.com/gitlab-com/gl-infra/reliability/-/issues/15161
|
||||||
flutter_secure_storage_windows:
|
flutter_secure_storage_windows:
|
||||||
|
|
|
@ -11,10 +11,10 @@
|
||||||
#include <desktop_lifecycle/desktop_lifecycle_plugin.h>
|
#include <desktop_lifecycle/desktop_lifecycle_plugin.h>
|
||||||
#include <dynamic_color/dynamic_color_plugin_c_api.h>
|
#include <dynamic_color/dynamic_color_plugin_c_api.h>
|
||||||
#include <emoji_picker_flutter/emoji_picker_flutter_plugin_c_api.h>
|
#include <emoji_picker_flutter/emoji_picker_flutter_plugin_c_api.h>
|
||||||
#include <file_selector_windows/file_selector_windows.h>
|
|
||||||
#include <flutter_webrtc/flutter_web_r_t_c_plugin.h>
|
#include <flutter_webrtc/flutter_web_r_t_c_plugin.h>
|
||||||
#include <permission_handler_windows/permission_handler_windows_plugin.h>
|
#include <permission_handler_windows/permission_handler_windows_plugin.h>
|
||||||
#include <record_windows/record_windows_plugin_c_api.h>
|
#include <record_windows/record_windows_plugin_c_api.h>
|
||||||
|
#include <share_plus/share_plus_windows_plugin_c_api.h>
|
||||||
#include <url_launcher_windows/url_launcher_windows.h>
|
#include <url_launcher_windows/url_launcher_windows.h>
|
||||||
|
|
||||||
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||||
|
@ -28,14 +28,14 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||||
registry->GetRegistrarForPlugin("DynamicColorPluginCApi"));
|
registry->GetRegistrarForPlugin("DynamicColorPluginCApi"));
|
||||||
EmojiPickerFlutterPluginCApiRegisterWithRegistrar(
|
EmojiPickerFlutterPluginCApiRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("EmojiPickerFlutterPluginCApi"));
|
registry->GetRegistrarForPlugin("EmojiPickerFlutterPluginCApi"));
|
||||||
FileSelectorWindowsRegisterWithRegistrar(
|
|
||||||
registry->GetRegistrarForPlugin("FileSelectorWindows"));
|
|
||||||
FlutterWebRTCPluginRegisterWithRegistrar(
|
FlutterWebRTCPluginRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("FlutterWebRTCPlugin"));
|
registry->GetRegistrarForPlugin("FlutterWebRTCPlugin"));
|
||||||
PermissionHandlerWindowsPluginRegisterWithRegistrar(
|
PermissionHandlerWindowsPluginRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
|
registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
|
||||||
RecordWindowsPluginCApiRegisterWithRegistrar(
|
RecordWindowsPluginCApiRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("RecordWindowsPluginCApi"));
|
registry->GetRegistrarForPlugin("RecordWindowsPluginCApi"));
|
||||||
|
SharePlusWindowsPluginCApiRegisterWithRegistrar(
|
||||||
|
registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi"));
|
||||||
UrlLauncherWindowsRegisterWithRegistrar(
|
UrlLauncherWindowsRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
|
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,10 +8,10 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
||||||
desktop_lifecycle
|
desktop_lifecycle
|
||||||
dynamic_color
|
dynamic_color
|
||||||
emoji_picker_flutter
|
emoji_picker_flutter
|
||||||
file_selector_windows
|
|
||||||
flutter_webrtc
|
flutter_webrtc
|
||||||
permission_handler_windows
|
permission_handler_windows
|
||||||
record_windows
|
record_windows
|
||||||
|
share_plus
|
||||||
url_launcher_windows
|
url_launcher_windows
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue