📸

Flutterでカメラアプリを作ってみた

2025/01/07に公開

なんで作ろうと思ったのか?

Findyフリーランスのエージェントの面談でカメラアプリ作ったことあるかと聞かれたことがきっかけですね。そういえば作ったことなかったな😅

以前から作ってみたかった。写真撮るだけだと面白くない。加工するアプリにでもするかと思ったがやめた。お買い物用のアプリが欲しくて自分用に作ることにした。自己学習目的で作ってみた。

2024年の年末に作ってました。何度からリジェクトされた😭
https://zenn.dev/joo_hashi/articles/6366c238e648f5

2024年1月7日に2回アップデートしてボトムシートの入力フォームでダークモードが適用されていない不具合を修正。画像のシェア機能も追加しました。

🍏iOS版しかまだ審査通ってないです

アプリ名マイショッピングカメラ。すごくシンプルなアプリですよ。タイトル入力して、写真を撮るか保存してある写真をアップロードしてローカルストレージに保存するだけ。でも書い忘れ防止のローカル通知欲しいよねって思い審査前だったので追加実装しました。

https://apps.apple.com/jp/app/myshoppingcameraapp/id6740156016

なぜ、Firebase/Supabaseを使わなかったのかというとオフラインで使用できるアプリを作りたかったのとローカルに画像を保存する機能を作ったことがなかったのでローカル保存がいいなと思い作った。自分の目的にあっていた。

インターネットにつながっていないと見れないアプリだと不便に感じることあるので、Notionでお買い物メモするのもやめました笑

⚙️技術構成

すごくシンプルですよ。Riverpodもgo_router_builderも使っていない。最初は、Objectboxで作ろうとしたがなんかうまくいかない?
なので、安定してそうなsqfliteを使おうとしましが好みでなかった😅
driftなるものを使えば、DateTime型のデータも使えるそうで、便利だなと思いこちらを使うことにした。別物な気がしたが。ORMのようだから、Webの言語で使われているPrismaと似たようなもんですね。

ロジックのところはシングルトンを使った。ネットの記事を見ると参考になる使い方があまりない?
専門書を読むとデータベースの機能で使うとのことで試してみた。同じインスタンスが生成されないのが特徴。もしされるとアプリがクラッシュする問題が起きましたね😅
シングルトンもこれから使っていこうかな。

使ったパッケージたちを紹介。全部ではないが。
https://dartsignals.dev/
https://pub.dev/packages/camera
https://pub.dev/packages/image_picker
https://pub.dev/packages/auto_route
https://pub.dev/packages/drift
https://pub.dev/packages/loading_animation_widget
https://pub.dev/packages/lottie
https://pub.dev/packages/flutter_local_notifications

🤔作った感想

SwiftUIでもカメラアプリ作っていたのですが、Swiftの方が画像をトリミングする機能だったり加工する機能は得意なように見えました。画像の保存機能もSwiftDataと組み合わせればいい感じで作れてソースコードの量も少ないので、ネイティブがいいなと思いつつFlutterでアプリを作りたかったので試してみました。

このアプリをこれからアップデートして色々機能増やしたいなと思ったりもしてます。不具合もまだまだあるようなので。OSを分けてiOS/Android別々に作った方がいいかなと悩んだりもしましたね。

Discussion