pickFiles function

Future<bool> pickFiles(
  1. BuildContext context,
  2. List<String> sourceList,
  3. SharedPreferences _sharedPreferences,
  4. List<String>? addExternalVirtualList,
  5. void callback(
    1. List<String>?
    ),
)

Implementation

Future<bool> pickFiles(
    BuildContext context,
    List<String> sourceList,
    SharedPreferences _sharedPreferences,
    List<String>? addExternalVirtualList,
    void Function(List<String>?) callback) async {
  bool selected = false;
  FilePickerResult? result = await FilePicker.platform.pickFiles(
    type: FileType.image,
  );
  if (result != null) {
    String originPath = result.files.single.path!;
    String originName = result.files.single.name;
    if (originName.endsWith('.jpg') &&
        originName.endsWith('.png') &&
        originName.endsWith('.jpeg')) {
      ToastUtils.showToast(
          context, Strings.virtualBackgroundImageFormatNotSupported);
      return false;
    }
    File originFile = File(originPath);
    int size = await originFile.length();
    int MB = 1024 * 1024;

    ///定义MB的计算常量
    if (size >= 5 * MB) {
      ToastUtils.showToast(context, Strings.virtualBackgroundImageLarge);
      return false;
    }
    Directory? directory;
    if (Platform.isAndroid) {
      directory = await getExternalStorageDirectory();
    } else if (Platform.isIOS) {
      directory = await getApplicationDocumentsDirectory();
    }
    String path = '${directory!.path}/virtual/$originName';
    final contents = await originFile.readAsBytes();
    File('$path')
      ..createSync(recursive: true)
      ..writeAsBytes(contents);
    sourceList.removeLast();
    sourceList.add(path);
    addExternalVirtualList =
        _sharedPreferences.getStringList(addExternalVirtualListKey);
    if (addExternalVirtualList == null || addExternalVirtualList.length <= 0) {
      addExternalVirtualList = <String>[];
    }
    addExternalVirtualList.add(path);
    _sharedPreferences.setStringList(
        addExternalVirtualListKey, addExternalVirtualList);
    sourceList.add('+');
    selected = true;
  } else {
    Alog.i(
        tag: _tag,
        moduleName: _moduleName,
        content: 'User canceled the picker');
    // User canceled the picker
    selected = false;
  }
  callback(addExternalVirtualList);
  return selected;
}