exec method

Future<String> exec(
  1. {required String fileName,
  2. required List<List> csvData,
  3. required FileMode fileMode}
)

CSVデータをローカルに保存する。

Androidの場合は外部ストレージに保存する iOSの場合はアプリケーションのドキュメントディレクトリに保存する

Implementation

Future<String> exec({
  required String fileName,
  required List<List<dynamic>> csvData,
  required FileMode fileMode,
}) async {
  try {
    final csvString = const ListToCsvConverter().convert(csvData);

    final Directory directory;

    if (Platform.isAndroid) {
      directory = await getExternalStorageDirectory() as Directory;
    } else {
      directory = await getApplicationDocumentsDirectory();
    }

    final filePath = '${directory.path}/$fileName';

    final file = File(filePath);

    // ファイルが既に存在、かつ、appendモードの場合は改行を追加
    if (fileMode == FileMode.append && await file.exists()) {
      await file.writeAsString('\n$csvString', mode: fileMode);
    } else {
      await file.writeAsString(csvString, mode: fileMode);
    }

    return filePath;
  } catch (e) {
    throw ServiceException(ServiceErrorType.fileSaveError,
        ServiceErrorType.fileSaveError.message);
  }
}