LoginSignup
38
24

More than 5 years have passed since last update.

Flutterおぼえがき

Last updated at Posted at 2017-08-12

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:convertJSON.decodeJSON.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曰く、長すぎるログはたまに切られてしまうのでfaundationservicesライブラリから変更された模様)のdebugPrint()使ったら良いよとのこと。

Memo

debugPrint(jsonInstance)を実行してみたらExceptionが出てしまった。どうやら第一引数をString前提にしているようで、debugPrint(jsonInstance.toString())としたら想定通りに動いた。

dart言語自体のloggingはこちらにまとまっていた。 http://qiita.com/zukkun/items/faa505032847abf30f45
dart:htmlconsole.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をごにょればよい。rootBundleDefaultAssetBundleの使い分けは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になって動きの重さが解消される。

38
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
24