Add cross platform file picker

This commit is contained in:
shilangyu 2022-01-16 16:34:03 +01:00
parent eeb9a84b6b
commit 2b6ce0e6b2
5 changed files with 28 additions and 8 deletions

View File

@ -1,4 +0,0 @@
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:image_picker/image_picker.dart';
ImagePicker useImagePicker() => useMemoized(ImagePicker.new);

View File

@ -1,14 +1,13 @@
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:image_picker/image_picker.dart';
import 'package:lemmy_api_client/pictrs.dart';
import 'package:lemmy_api_client/v3.dart';
import 'package:url_launcher/url_launcher.dart' as ul;
import '../hooks/delayed_loading.dart';
import '../hooks/image_picker.dart';
import '../hooks/stores.dart';
import '../l10n/l10n.dart';
import '../util/files.dart';
import '../util/icons.dart';
import '../util/pictrs.dart';
import '../widgets/bottom_modal.dart';
@ -415,13 +414,12 @@ class _ImagePicker extends HookWidget {
final url = useState(initialUrl.value);
final pictrsDeleteToken = useState<PictrsUploadFile?>(null);
final imagePicker = useImagePicker();
final accountsStore = useAccountsStore();
final delayedLoading = useDelayedLoading();
uploadImage() async {
try {
final pic = await imagePicker.pickImage(source: ImageSource.gallery);
final pic = await pickImage();
// pic is null when the picker was cancelled
if (pic != null) {
delayedLoading.start();

18
lib/util/files.dart Normal file
View File

@ -0,0 +1,18 @@
import 'dart:io';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/foundation.dart';
import 'package:image_picker/image_picker.dart';
/// Picks a single image from the system
Future<XFile?> pickImage() async {
if (kIsWeb || Platform.isIOS || Platform.isAndroid) {
return ImagePicker().pickImage(source: ImageSource.gallery);
} else {
final result = await FilePicker.platform.pickFiles(type: FileType.image);
if (result == null) return null;
return XFile(result.files.single.path!);
}
}

View File

@ -211,6 +211,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.2"
file_picker:
dependency: "direct main"
description:
name: file_picker
url: "https://pub.dartlang.org"
source: hosted
version: "4.3.1"
fixnum:
dependency: transitive
description:

View File

@ -61,6 +61,7 @@ dependencies:
flutter_localizations:
sdk: flutter
wc_form_validators: ^1.0.0
file_picker: ^4.3.1
dev_dependencies:
flutter_test: