パルカワ2

最近はFlutterをやっています

_buildWidgetについての考えと今ならどうするか

第4回 今ならこうするシリーズ UIをつくるときにStatelessWidget(またはStatefulWidget)を継承してWidgetを作るのではなく、以下のようにWidgetを返すメソッドを作って切り分けることが出来る。メソッドで切り分けるとクラスを作るよりは比較的楽に作れると…

TextStyleの共通化についての考えと今ならどうするか

第三回 今ならこうするシリーズ FlutterはTextにstyleをあてることができる。今回はそのTextStyleの共通化について書いていく。 const Text("文字", style: ...); TextStyleは以下のように共通化している。こうすることで基本はconstとして呼び出すことが出…

providerについての考えと今ならどうするか

「今ならこうする」をシリーズ化しようと思ってカテゴリを作った。「今ならこうする」は僕基準であって全員そうすべきという話ではない。今回もそう。 Flutterにはprovider packageというのがあり、公式でもprovider + ChangeNotifierの構成がドキュメントに…

ChangeNotifierについての感想

ChangeNotifierというのがFlutterにはあり、ViewModelで継承して使っている。 StateNotifierとよくパフォーマンス面で比較されるValueNotifierというのもあり、そっちは1個のValueしか扱えないがChangeNotifierは複数扱える。なのでValueNotifierやStateNoti…

Flutter for Web で WebView を使う

native_webviewは、WebViewの機能をWebで提供するのは難しいのでWebには今の所対応していない。だが、対応していないプラットフォームでも自前で実装すれば一応動かせるようにはなっている。(というか0.28.0から動かせるようにした) // Webのときのみsetす…

native_webview の integration test

ライブラリのテストは、ほとんどの場合 unit testでいいと思うのだけど native_webviewはiOSのWKWebViewやAndroid の WebViewに依存しているのでunit testではテストが出来ない。 なので、native_webview は integration test (ほとんど Widget testだけど)…

VSCodeのlaunch.jsonからInteliJのrunConfigurationsを自動生成する

毎日のようにはてなスターのスパムがきます。こんにちは。 仕事で作っているアプリは、Flutterを使っておりかつFlavorがたくさんあってそれぞれのFlavorごとにrunConfigurationsを用意している。また今後Flavorは増える予定である。 同僚には、VSCodeを使っ…

TECH STAND #3 で「10XとFlutter」というタイトルで発表した

久しぶりの外部の勉強会で、しかもFlutterの話をするのは初なのでなかなか緊張した。登壇者にはFlutterの人たちはもちろんReact Nativeの猛者がたくさんいて、僕はReact Nativeのことを全く知らないので話を聞くだけでも面白かった。TECH STAND #3 クロスプ…

散歩と判断

コロナでリモートワークするようになってからまったくと言っていいほど家から出なくなった。 散歩するかな〜でも目的がないとやる気がな〜なんて言って全くしてなかったのだが、2020年もそろそろ終わるしグダグダ言ってやらないのダサいな〜と思ったのでいっ…

最近のnative_webview

FlutterでWebViewをがんばる その2 - パルカワ2github.com前にWebViewの話を書いて、native_webviewというライブラリを自作した話を書いた。 すでにプロダクションで利用していて色々やったけど、最近だとBasic認証がかかっててもアクセスできるようにしたり…

finickyを使い始めた

こういうツイートをした。会社用のGoogleアカウントと家用のGoogleアカウントがあって、会社SlackからGCPのURLをクリックしたら家用のアカウントで開いてしまうみたいなのを1000万回はしてるんだけど、未だにどうすればいいのかわからない— ひさいち (@hisai…

enableFlutterDriverExtension() を使用するとキーボードがでなくなる

api.flutter.dev native_webviewのテストのために example/lib/main.dart で enableFlutterDriverExtension() を有効にしていたのだけど、example アプリをビルドしてみるとキーボードが出なかった。普通にアプリに組み込むとキーボードは出るのでなんで?と…

FlutterでWebViewをがんばる その2

github.com FlutterでWebViewをがんばる - パルカワ2 flutter_inappwebviewに関する知見 - パルカワ2 FlutterでWebViewを扱うために webview_flutter を使って、flutter_inappwebviewを使ってきたが、結局native_webviewというライブラリを自分で作り始めた…

自分の作業環境 2020

おうち大好きマンなので、3年前くらいに今の家に引っ越してから作業環境を整えている。 自宅で働くことが増えて整えてきてよかったと思っているので、現状を書き出しておく。10年後とかに見たら面白いのではないか。2030年……41歳……… ぬいぐるみ hobby.dengek…

コーヒーメーカー買った

今まで会社に行く前にコンビニに寄ってコーヒーを買って出社するというのがルーチンになっていたのだけど、新型コロナウイルス感染症の影響で自宅で働くようになってからコンビニまでコーヒーを買いに行くのがめんどくさくなってしまった。なので、家でコー…

Cirrus CI使い始めた

cirrus-ci.org 最近OSSでFlutterでWebViewを表示するプラグインを書いていて、AndroidエミュレータとiOSシミュレータを利用してそれぞれのプラットフォームでテスト(flutter drive)を動かしたいという欲求があった。 最初は、iOSの実装だけやっていたので使…

tmux 3.0a にする

tmux 2.8からアップデートでもするか〜と思ってした。 どうせ動かなくなるだろと思って雑にupgradeしたら動かなくなった。ガッハッハ -fg みたいなのが廃止されて、-styleになったらしい /Users/hisaichi5518/.tmux.conf:11: invalid option: pane-active-bo…

Bitriseでflutter driveを実行する

プロジェクトを作ってシミュレーターを開いて、flutter driveすればよい --- format_version: '8' default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git project_type: flutter trigger_map: - push_branch: "*" workflow: primary …

flutter_inappwebviewに関する知見

ほしい機能がなかったからwebview_flutterをやめて、flutter_inappwebviewを使うようにした。 flutter_inappwebviewは機能がモリモリでモリモリすぎるという印象だけど、自分でモリモリ作るよりはいいだろという感じ。ちなみにflutter_inappwebviewはflutter…

DartLintで独自のRuleを作って使いたい

Dartでlintといえば dartanalyzer だけど、custom lint rule に対応していない。 (dartanalyzerは中でdart-lang/linterを利用している) github.com なので、独自のlint ruleを動かす君を作る。 独自のコマンドゆえにIDE上のDart AnalyticsではLintエラーが表…

Dartのhttp packageでは物足りない部分を補う

http packageを使っている。 pub.dev まあ、便利なんだけどtimeoutとcookieが対応していない。またUserAgentは常に指定する必要がある。 なので、それらに対応するには別packageを使うか自分で頑張る他ない。 諸々対応しているHTTP Clientとしてdioがあるが…

Firestoreエミュレータで listDocuments + orderBy + pageTokenを使うと gRPC Error (2, null) が出る

Package google.firestore.v1 | Google Cloud FirestoreのRPC APIを使っていて、Firestoreエミュレータを使って開発している。以下のようにListDocumentsRequestで、orderByとpageTokenがある場合に「gRPC Error (2, null)」というエラーが返ってくる。エラ…

ラム肉を焼いた

この記事はつくりおきAdvent Calendar 2019の21日目の記事です。昨日は id:kazuhi_ra さんの 風邪おき(昼 / 夜) - #つくりおき でした。お大事に…。クリスマスだしニワトリをまるごと一羽焼こうって話をしていたんですが、ここならなんでもあるでしょと高を…

material/dialog.dart を読む

flutter/dialog.dart at master · flutter/flutter · GitHub Dialog の padding が固定 MediaQuery.of(context).viewInsets + const EdgeInsets.symmetric(horizontal: 40.0, vertical: 24.0) Material Designでは固定ではなさそう? https://material.io/co…

AlertDialogのボタン下のスペースが空いてしまう!

FlatButtonを使ってAlertDialogのアクションを表現したら、微妙にアクションの下スペースが広い。 debug printを表示するとわかりやすい。 AlertDialog( ..., actions: <Widget>[ FlatButton( child: const Text("OK"), onPressed: () => ok(context), ), ], ); Flat</widget>…

Flutter + Android Studioで Logcatタブが出ない

会社のPCでは出るけど、家のPCでは出ないのなんでって思ってたけど、設定してなかったみたい。 02:24 Frameworks Detected Android framework is detected. Configure Event Logにこういうのが出ているので、Configureを押したら設定できる。 このあたりも確…

get_it を使っていたけどやめた

get_it | Dart Package を使っていたがやめた。 // 登録さえすば GetIt.instance.registerSingleton<Logger>(Logger()); // どのクラスでもLoggerを参照できる class HogeBloc { final Logger logger = GetIt.instance.get<Logger>(); } 便利なんだけど次の問題があると思っ</logger></logger>…

Dart で簡単に data class を作りたい

Kotlinではdata classはこのように書ける。 data class User(val name: String, val age: Int) これは、 ただのクラスではなくて equals() / hashCode() / toString() / copy() が実装されるクラスになる。 なので次のコードはtrueが返る。 User(name: "hisa…

provider 3.2.0 にアップデートした

APIが4.0.0で変わるようで、builder を create/update に変えるだけで今の所良かった。直感的になって良い変更だなとおもう。 RFC Renaming the parameter ‘builder’ of providers · Issue #259 · rrousselGit/provider · GitHub ついでに4.0.0-devにするか…

より良いFlutterの画面遷移を考える

Flutterの画面遷移について考えたのでメモ。 現状このようにして遷移している。 Navigator.of(context).push(MaterialPageRoute( builder: (_) => HogeScreen(keyword: "..."), )); このやり方だと settings.name が設定されていないので、FirebaseAnalytics…