Flutter(Riverpod + go_router)と Firebase を使った、動画/音声の撮影・編集・エンコードを行うアプリケーションです。
録画/取り込み → 編集 → トリミング → エンコード → 完了、というフローを想定した画面遷移で構成されています。
NOTE: このリポジトリはアプリ開発用のプロジェクトです(pub.dev 公開は想定していません)。
- Flutter SDK(
pubspec.yamlのenvironmentより Dart >=2.18.6 <3.0.0 相当) - Firebase プロジェクト(Auth / Firestore / Storage を使用)
- iOS/Android のビルド環境(必要に応じて)
- iOS: Xcode
- Android: Android Studio / SDK
git clone https://github.com/maropook/neon3.git
cd neon3
flutter pub getFirebase を初期化して起動します(lib/main.dart で Firebase.initializeApp() を呼んでいます)。
flutter runこの README は、プロジェクトの概要が分かりやすくなるように整備したものです。
実際の仕様(どの画面で何ができるか、動画/音声の入出力形式、字幕やTTSの扱いなど)は lib/ 配下の実装に合わせて随時追記してください。
- Firebase 初期化(
Firebase.initializeApp()) - 匿名ログイン(Firebase Auth)
authProviderがsignInAnonymously()を実行しuidを保持
- 画面ルーティング(go_router)
- 未ログイン(
uid.isEmpty)の場合は/loginにリダイレクト
- 未ログイン(
- 動画/音声編集フロー
- 録画/取り込み → 編集 → トリミング → エンコード → 完了
- Firestore による Avatar 管理
users/{uid}/avatars配下を中心に CRUDselectedAvatarの選択状態を保持- グローバルな
avatarsコレクションからデフォルト取得
- サムネ生成
video_thumbnailを使ってタイムライン用のサムネを生成するThumbnailService
- カスタムパッケージ連携
neon_video_encoder(GitHub 依存)neon_speech_to_text(GitHub 依存)
- アセット/フォント
assets/配下に画像・音声・動画などflutter_genでlib/gen/assets.gen.dart/lib/gen/fonts.gen.dartを生成
/login: ログインページ/: RecordingPage(起点)/import: ImportPage
/avatar/list: AvatarListPage/avatar/list/detail: AvatarDetailPage(state.extraでAvatarを受け取る)
/edit: EditPage(EditPageArgsを受け取る)/trim: TrimPage(EditPageArgsを受け取る)/encoding: EncodePage(EncodePageArgsを受け取る)/complete: CompletePage(生成物の filePath を受け取る)
- 起動時に
authProviderがログイン状態を確定します- 未ログインなら匿名ログイン
uidを state に保存
users/{uid}/avatars/{avatarId}users/{uid}/avatars/selectedAvatar(idを保持)avatars/*(デフォルト Avatar 取得用)
このプロジェクトは freezed / json_serializable を利用しているため、モデル変更時は生成を実行します。
flutter pub run build_runner build --delete-conflicting-outputsflutter analyzego_router の redirect で uid.isEmpty の場合 /login に飛ばすようになっています。
Firebase 初期化や Auth の疎通(匿名ログイン)ができているか確認してください。
Firebase の設定(google-services.json / GoogleService-Info.plist、ルール、プロジェクトID)が正しいか確認してください。
【Flutter】Cameraライブラリを使用してインカメラ(内カメ)で写真を撮影する方法 【Flutter】cameraパッケージの基本とTips
FlutterでQRコードを読み込む(riverpod 2) https://zenn.dev/mkikuchi/articles/cc87c84e1404c4 flutter/flutter#112915