saveMultipleFiles method

  1. @override
Future<void> saveMultipleFiles({
  1. required List<Uint8List> dataList,
  2. required List<String> fileNameList,
  3. required List<String> mimeTypeList,
})
override

Saves multiple files using platform-specific implementation.

dataList: List of file data in bytes. fileNameList: List of file names with extensions. mimeTypeList: List of corresponding MIME types.

Implementation

@override
Future<void> saveMultipleFiles({
  required List<Uint8List> dataList,
  required List<String> fileNameList,
  required List<String> mimeTypeList,
}) async {
  // Validate input lengths
  if (dataList.length != fileNameList.length ||
      dataList.length != mimeTypeList.length) {
    throw ArgumentError('All input lists must have the same length.');
  }

  // Validate data content
  for (int i = 0; i < dataList.length; i++) {
    if (dataList[i].isEmpty) {
      throw ArgumentError('Data at index $i is empty.');
    }
  }

  for (int i = 0; i < mimeTypeList.length; i++) {
    if (mimeTypeList[i].trim().isEmpty) {
      throw ArgumentError('MIME type at index $i is empty.');
    }
  }

  // Ensure unique filenames
  final Map<String, int> fileNameCount = {};
  final List<String> uniqueFileNames = [];

  for (String originalName in fileNameList) {
    String name = originalName.trim().isEmpty ? 'file' : originalName;
    if (fileNameCount.containsKey(name)) {
      fileNameCount[name] = fileNameCount[name]! + 1;
      final extensionIndex = name.lastIndexOf('.');
      final base =
          extensionIndex != -1 ? name.substring(0, extensionIndex) : name;
      final ext = extensionIndex != -1 ? name.substring(extensionIndex) : '';
      name = '${base}_${fileNameCount[name]}$ext';
    } else {
      fileNameCount[name] = 1;
    }
    uniqueFileNames.add(name);
  }

  try {
    await methodChannel.invokeMethod('saveMultipleFiles', {
      'dataList': dataList,
      'fileNameList': uniqueFileNames,
      'mimeTypeList': mimeTypeList,
    });
  } on PlatformException catch (e) {
    debugPrint('PlatformException: ${e.message}');
    rethrow;
  } catch (e) {
    debugPrint('Unexpected error: $e');
    rethrow;
  }
}