Fultterをいじったりドキュメントを読んだ自分用覚書。ネタがあれば追記していきます。
https://flutter.io/
Package management
Dartのpackage managementはPubで行う。8/12時点ではfultter.ioにfultter対応しているかの検索はできないと書いてあったがwebではできるようになってた
https://pub.dartlang.org/flutter/packages/
Platform固有処理の呼び出し
Platform channelを使ってiOS, Android特有コードを呼び出せる。AppDelegateとActivityにメソッドごとの処理を登録していくスタイル。Dartで固有処理を書くことはできず、iOS, AndroidそれぞれでJava, Swiftなどのコードを書かないといけない。
MessageCodec
クラスを使ってお互いの送受信データの型を決める。っぽい。
https://flutter.io/platform-channels/
HTTP通信
https://flutter.io/networking/
http
パッケージを使ってclientインスタンス作ってpost()とかget()とか呼ぶ。
データ保存
File IO
PathProvider
というプラグインを使うことでiOS, Androidでほぼ同じような目的に利用できるpathを取得できる。pathが決まればdart:io
で読み書きする。
JSON形式で保管したければdart:convert
のJSON.decode
、JSON.encode
を使えば良さそう。
https://flutter.io/reading-writing-files/
Database
Firebase database
SQLite pulugin for flutter
https://pub.dartlang.org/packages/sqflite
Current issuesのところは要注意。
Logging
https://flutter.io/debugging/#print-and-debugprint-with-flutter-logs
簡単なデバッグであればprint()
で十分でIntelliJのコンソールビューで確認できる。(Observatoryのloggingでは表示できなかったのはなんでだろう?)。flutter.io曰く、長すぎるログはたまに切られてしまうのでfaundation
(から変更された模様)のservices
ライブラリdebugPrint()
使ったら良いよとのこと。
Memo
debugPrint(jsonInstance)
を実行してみたらExceptionが出てしまった。どうやら第一引数をString前提にしているようで、debugPrint(jsonInstance.toString())
としたら想定通りに動いた。
dart言語自体のloggingはこちらにまとまっていた。 http://qiita.com/zukkun/items/faa505032847abf30f45
dart:html
のconsole.print()
はflutterでは使わないで良いだろう。また、上記リンクにもあるlogging
パッケージを使えばLog4Jのようなレベルごとのloggingが可能になる。"環境ごとの設定"に書いたようなやり方でビルドごとに適切なログレベルを設定すればよさそう。
Web View
flutter webview plugin
https://pub.dartlang.org/packages/flutter_webview_plugin
flutterアプリの中でではなく、iOS, Androidそれぞれで新しいActivity, ViewControllerを生成してwebviewを埋め込むらしい。最近だとワンタッチで元のアプリに戻れるようになってきているのでOSにURL投げてブラウザアプリを立ち上げてもらった方法でできるだけ作ればここで困ることはなさそう。
Icon font
色々あると楽なので。
Font awesome
Open Iconic
Test
Unit test
test
ディレクトリ以下にテストコードを作る。Rspec風。dartにもmockito
がある!嬉しい!
https://github.com/dart-lang/mockito
widget test
Wedget単体でテストするための仕組み。再利用するwedgetを作ったらこれでテスト。
Integration test
実機またはシュミレータを使ったUIテスト。SeleniumやEspresso, UI Automaterと同等らしい。ということはパーツをidなどでfindできるのかな?要チェック。
環境ごとの設定
https://flutter.io/assets-and-images/#loading-text-assets
text assetをロードしてjsonなど好きな形式のテキストから読み込む。環境の判定はここの方法でreleaseか否かの判定ができる。
assets
ディレクトリはproject rootに作る。pubspec.yaml
に
# To add assets from package dependencies, first ensure the asset
# is in the lib/ directory of the dependency. Then,
# refer to the asset with a path prefixed with
# `packages/PACKAGE_NAME/`. The `lib/` is implied, do not
# include `lib/` in the asset path.
と書いてあるが、libに入れる必要はない。pubspec.yaml
に
flutter:
assets:
- assets/config.json # yourproject/assets/config.jsonで配置
と宣言して、dart側で
rootBundle.loadString('assets/config.json');
を呼び出してあとはFutureをごにょればよい。rootBundle
とDefaultAssetBundle
の使い分けはflutter.io参照。
Debug tool
Dart Observatory
Dart VMで使えるブラウザベースのデバッグツール。
Intelli Jで起動してRun view(ログが出てるビュー)の上にあるOpen Observatoryアイコン(時計?)から起動する。flutter run
でコマンドラインからアプリを起動した場合は起動メッセージの最後にでるアドレスから利用できる。break pointを貼る、ステップ実行する、パフォーマンス計測などに使える。また、ブラウザベースなのでIPアドレス部分を適切に変換すれば同じObservatory画面を別のエンジニアにシェアできるので協力しデバッグができる、とのこと。詳しくはhttps://dart-lang.github.io/observatory/
その他
slow mode
サンプルアプリを起動するとslow modeというリボンが右上に表示される。これはObservatoryなどのdebugを可能にするための開発モードのビルドをしているため。確かにこのモードのサンプルは遅い。--release
や--profile
をつけるとリボンがPreviewになって動きの重さが解消される。