body method

  1. @override
String body(
  1. String baseName,
  2. String className
)
override

Defines the actual body code. path is passed relative to lib, baseName is the filename, and className is the filename converted to Pascal case.

実際の本体コードを定義します。pathlibからの相対パス、baseNameにファイル名が渡され、classNameにファイル名をパスカルケースに変換した値が渡されます。

Implementation

@override
String body(String baseName, String className) {
  return r"""
## `Storage`の概要

`Storage`は、ファイルのアップロード・ダウンロードを行うための仕組みを提供します。

アダプターパターンを採用しており、ローカルストレージ、クラウドストレージ(Firebase Storage)など、異なるストレージバックエンドを簡単に切り替えることができます。

## インストール

```bash
flutter pub add katana_storage
```

Firebase Storageを使用する場合は、追加で以下をインストールします。

```bash
flutter pub add katana_storage_firebase
```

## 初期設定

アプリケーションのルート(通常は`main.dart`)で`StorageAdapterScope`を設定します。

### ローカルストレージを使用する場合

```dart
StorageAdapterScope(
adapter: const LocalStorageAdapter(),
child: MaterialApp(
  home: MyHomePage(),
),
)
```

### Firebase Storageを使用する場合

```dart
StorageAdapterScope(
adapter: const FirebaseStorageAdapter(),
child: MaterialApp(
  home: MyHomePage(),
),
)
```

### ランタイムストレージ(テスト用)を使用する場合

```dart
StorageAdapterScope(
adapter: const RuntimeStorageAdapter(),
child: MaterialApp(
  home: MyHomePage(),
),
)
```

## `Storage`オブジェクトの作成

`Storage`オブジェクトは`StorageQuery`を使用して作成します。

```dart
final storage = Storage(const StorageQuery("test/file"));
```

`StorageQuery`の引数には、ストレージ内のファイルパスを指定します。

## ファイルのアップロード

### ローカルファイルからアップロード

```dart
final storageValue = await storage.upload("/path/to/local/file.jpg");
print(storageValue.remote.path); // リモートのパス
print(storageValue.local.path);  // ローカルのパス
```

### バイトデータから直接アップロード

```dart
final bytes = Uint8List.fromList(text.codeUnits);
final storageValue = await storage.uploadWithBytes(bytes);
print(storageValue.remote.path); // リモートのパス
print(storageValue.local.path);  // ローカルのパス
```

## ファイルのダウンロード

```dart
final storageValue = await storage.download("file.jpg");
print(storageValue.local.path); // ダウンロードされたローカルのパス
```

## `StorageValue`について

`StorageValue`は、アップロード・ダウンロードの結果を表すオブジェクトです。

### プロパティ

- `remote`: リモート(クラウド)のファイル情報
- `remote.path`: リモートのファイルパス
- `local`: ローカルのファイル情報
- `local.path`: ローカルのファイルパス

## ストレージアダプターの種類

### `RuntimeStorageAdapter`

メモリ内に保存されるアダプター。テスト用に使用します。

```dart
const RuntimeStorageAdapter()
```

### `LocalStorageAdapter`

デバイスのローカルストレージに保存されるアダプター。

```dart
const LocalStorageAdapter()
```

### `FirebaseStorageAdapter`

Cloud Storage for Firebaseに保存されるアダプター。

```dart
FirebaseStorageAdapter(
options: DefaultFirebaseOptions.currentPlatform,
)
```

## 使用例

### 画像のアップロードとダウンロード

```dart
// Storageオブジェクトの作成
final storage = Storage(const StorageQuery("images/profile.jpg"));

// ローカルの画像ファイルをアップロード
final uploadResult = await storage.upload("/path/to/image.jpg");
print("アップロード完了: ${uploadResult.remote.path}");

// 画像をダウンロード
final downloadResult = await storage.download("profile.jpg");
print("ダウンロード完了: ${downloadResult.local.path}");
```

### バイトデータのアップロード

```dart
final storage = Storage(const StorageQuery("data/textfile.txt"));

// テキストをバイトデータに変換してアップロード
final text = "Hello, World!";
final bytes = Uint8List.fromList(text.codeUnits);
final result = await storage.uploadWithBytes(bytes);
print("アップロード完了: ${result.remote.path}");
```

## ストレージアダプターの切り替え

アダプターを切り替えることで、開発時はローカルストレージを使用し、本番環境ではFirebase Storageを使用するといった運用が可能です。

```dart
// 開発時
final storageAdapter = const LocalStorageAdapter();

// 本番環境
final storageAdapter = const FirebaseStorageAdapter(
options: DefaultFirebaseOptions.currentPlatform,
);
```

アプリケーションコード側では、どのアダプターを使用していても同じコードで動作します。

## 注意事項

- `StorageQuery`で指定するパスは、ストレージシステム内での相対パスとなります
- Firebase Storageを使用する場合は、事前にFirebaseプロジェクトの設定が必要です
- アップロード・ダウンロードは非同期処理となるため、`await`または`.then()`を使用して結果を待つ必要があります
""";
}