その後のFlutter
Kotlin版で追加した機能を追加した。
どハマりしたトコその1。
HttpClientを用いてdigest認証付きのAPIでGETできたものの、流用したコードではPUTができなくて、API側にPOSTのルートを追加してみたが結果は変わらずNG。Wiresharkでやり取りを眺めた結果、HttpClientのaddCredentialsに用いるHttpClientDigestCredentialsは、GETにしか対応していないような動きに見えて断念した。
代わりに http_authを用いて以下の形で実現した。
import 'package:http_auth/http_auth.dart'; String url = 'http://localhost/path/' String username = 'user'; String password = 'password'; try{ var client = new DigestAuthClient(username, password); Map<String, String> userHeader = {"Content-type": "application/json", "Accept": "application/json"}; client.post(url, headers: userHeader, body:sendData).then((r){ print(r.body); }); } catch (e){ print(e); }
この形式でGETしてみたが、取得したJSONデータに改行コードが含まれていてプチハマり。
HttpClientで取得したものには含まれていない。デバッグコンソール上で表示させても目視で気付きにくく、String.rune.toList() で内容を比較してやっとわかった。改行コードを除去すればjsonDecodeできる。
どハマりしたトコその2。
TextFieldをタップしたとき表示されるキーボードのアレコレ。
- 表示すると黄色と黒の警戒色が表示される→ SingleChildScrollView を使用して対処
- 任意のタイミングでキーボードを非表示にできない → GestureDetector などを用いれば解消できるがSingleChildScrollViewと併用できない
その他細々と、アレコレ知らないために小ハマりした。
- DateTimePickerの初期値の設定方法
- TextFieldの初期値の設定方法
- toastの表示方法
第一印象ではFlutterを好ましく感じたが、今回の機能追加で印象は逆転した。
Flutterは、とにかく情報が少ない。世界中で悩んでいるらしい雰囲気がある。ライブラリのソースを見ないといけないカンジ。
KotlinはJavaの情報が混じるため選別に手間がかかるが、そもそも情報が存在しないよりはマシ。
FlutterとKotlinを比較した場合、現時点では後者の方が調査コストの面において有利であろうと感じられる。