記事一覧ページへ移動

簡易的な所持金管理アプリ「ExpNote」をリリース! + Flutterで躓いた所とか

2024-10-16
2020-10-19

わたすけです。
タイトル通り,簡易所持金管理アプリ, 「ExpNote」 をリリースしました!!
Flutter 製の Android アプリとなっております。

今回はこのアプリについていろいろ書いていこうと思います。

何だこのアプリ

このロゴ正直気に入ってないので誰かどうにかしてください

改めて,「ExpNote」は,Flutter の学習用につくった,簡易的な所持金管理アプリとなっています。Android 専用です。

ちなみに GitHub でソースコードが公開されています。ビルドさえすれば iOS やデスクトップでも使用可能になるはずです。

できること

  • 出費・収入などの管理
  • カレンダーで選択した日付別のイベント表示

未実装項目(将来対応予定)

  • 設定画面
  • 一部アニメーション
  • インポート・エクスポート

インストール方法

まず,お手元の Android スマートフォンで GitHub リポジトリに飛び,最新のリリースを見つけます。

そこから apk をダウンロードして開き,インストールするだけです。

簡単で
す!!!!

iOS 版は macOS が手元にないので作れませんでした・・・(そもそもストアに出さないとインストールできないので無理です)

使い方

何か出費や収入があった時には,「イベント」を追加します。

起動直後の画面(例)

まず,アプリをひらいた直後の画面から,右下の+ボタンを押し,イベント追加ページに移動します。

次に,日付,タイトル,変動金額,詳細やメモ(空欄でも可)を記入します。

項目を入力していく

入力が完了したら,右上のチェックボタンを押せば,追加が完了します。

追加が完了した状態

追加した日付をカレンダーで選択すれば,その日のイベントが表示される

また,イベント一覧画面(最初の画面)で,イベントをタップするとそのイベントの詳細を見たり,編集したり,イベントを削除したりすることができます。

削除時は確認ウィンドウが表示される

Flutter 開発で躓いたこと

Flutter は Dart という言語を使ってレイアウトから処理までを記述します。ということで,躓いたことのほとんどが Dart の言語仕様によるものですがまあ Flutter 開発でひとまとめにしておきます。

int 同士の割り算

C 言語では int x=3, y=2; としたとき,x/y (3/2) の答えは 1 となります。3/2 は 1.5 ですが,変数が int 型であるため,小数点以下は切り捨てられるという原理です。

しかし,Dart ではそれが出来ず,int 同士の計算でも割り算の答えは double 型になるらしく,エラーを吐いて止まってしまいます。
整数の除算をする場合は ~/ を使わないといけないらしいです。

クラス名について

クラス名やメソッド名(用語あってるのかな)の最初にアンダーバーを付けると,外部から参照できなくなります。
C 言語の気分で_className みたいな名前を付けたクラスを別ファイルに記述し,import を用いて使おうとして使えず戸惑っていました。気をつけましょう

null かどうかを確かめる

結構いろいろな部分でオブジェクトが null になってエラーを吐いてしまうことがありました。
int x = y??0;とすると,y が null だった場合に x に 0 を代入することが出来るので,これを使って null 対処を行いました。

クラスを作ったら new で初期化

className クラスがあったら,className c=className(); のように初期化しないと null になってしまうようです。
結構忘れがちなので注意。

Arch Linux における Android エミュレータの作成

Arch Linux の素晴らしき AUR からさっくり Android Studio をインストールしたはいいものの,sdkmanager がエラーを吐いて使えず,Android エミュレータが動作しなくてかなり不便でした。

sdkmanager を正常動作させるために,sdkmanager を起動する時は以下のようなコマンドを使用します。ちなみに$はいらないです。

$ JAVA_HOME=/opt/android-studio/jre/ sdkmanager

おわりに

ということで,初めて Flutter を使って Android アプリを制作したという話でした。

Dart でレイアウトを作るとインデントがかなり深くなるし,そうでなくても全体的にかなり複雑なコードになってしまうので,そのあたりはなんとかならないかなぁと思いました。ただし,コーディング規約をしっかり定めてない自分のせいもあるとは思いました。Flutter 全くわからない状態から作り始めたので,次はちゃんと一貫性のあるコードを書きたいです。

コードは複雑になるものの手軽に,それっぽいデザインの UI を作ることが出来る Flutter はなかなか優秀だなぁと思いました。


Comments

Powered by Giscus