Flutterアプリの安全な変化と拡大を支えるアーキテクチャ と単体テスト FlutterKaigi 2022 株式会社リサーチ・アンド・イノベーション 高田 晴彦 (tfandkusu) 1
概要 スポイトツールウィジェットを作った際に、画像が壊れていた場合の処理はウィジェットの呼び出し元に任せたいなと思ったのですが、どうすればいいのかちょっと悩んだのでメモを残しておきます。 結論から書くと、エラーオブジェクトを処理してウィジェットを返すようなコールバックを受け取る形にしておくのが無難そうでした。 widget/image.dart の設計を参考にしつつ、ここでは ImageErrorWidgetBuilder の代わりにより汎用的な名前の ErrorWidgetBuilder を使用しています。 (が、ErrorWidgetBuilder の基本的な使い方とはちょっと違っているので、自作のエラーウィジェットビルダを定義するか、単に Widget Function(FlutterErrorDetails details) を型とする方がより安心かもしれません。) // 自作のウ
画廊で「処女性」を連呼した男 美術の世界で若い女性アーティストの制作活動を阻害する様々な要因を取材し、まとめた猪谷千香著『ギャラリーストーカー 美術業界を蝕む女性差別と性被害』(中央公論新社)が2023年1月に刊行された。 ギャラリーストーカーを「画廊で作家につきまとう人々」と説明する本書では、唖然とするような手口が数多く紹介されている。本書を読めば、ギャラリーストーカーとは、アーティストに対し、いわゆるストーカー行為を働く者だけでなく、立場の非対称性を利用してアーティストの人間性を踏みにじり、支配しようとする者のことであるとわかるだろう。 この本が刊行されるきっかけは、私もメンバーのひとりの「表現の現場調査団」が公表した調査だ。昨年は「表現の現場 ジェンダーバランス白書2022」を公開し、論座にも寄稿した。白書の公開を通じ、調査結果が各所で活用されることを望んでいたため、『ギャラリースト
SNSが最もよく見られる時間帯は、21〜22時です!この時間に回答や質問募集投稿をすれば、さらに質問が貰えるかも!?
Mac の Docker の x86-64 エミュにプッツンした勢いで、余ったパソコンをリモート Docker サーバーにした ARM Mac で Docker Desktop や Lima を使っていて、 docker build --platform x86-64 .... や docker run --platform x86-64 .... が、いきなりクラッシュしたり、途中まで進むけど特定の箇所でコケたりで困ったことはありませんか。 私はしょっちゅう困ってます。いよいよ我慢の限界になり、部屋でホコリを被ってた x86-64 なパソコンを使ってどうにかすることにしました。 これはホコリをはたいてキッティング中の様子です。 前準備 x86-64 なCPUを搭載したパソコンを調達する Intel でも AMD でもどっちでもいいです。私は手元に転がってた Lenovo M75q-1 を
「ヒラギノがWindowsでも使える!」 そんな声がSNSで飛び交った4月10日「フォントの日」。Adobe Fontsのラインアップに「ヒラギノフォント」が加わったことを歓迎するコメントが多くみられました。 Adobe Fontsに加わった「ヒラギノ角ゴ」 Adobe Fontsに加わった「ヒラギノ明朝」 フォント感度の高い人々を中心に話題となっていますが、その一方で「ヒラギノって名前は聞いたことはあるけど、どんなフォントなんだっけ?」なんて思った方もいるのではないでしょうか。 そこで、今回はヒラギノフォントの歴史を振り返りながら、Adobe Fontsで提供するヒラギノフォントの詳細や今後の展望などを、アドビのデザイン製品担当・岩本崇さんとヒラギノフォント販売元であるSCREENグラフィックソリューションズ(以下、SCREEN)の三橋洋一さん&三宅竜太さんに聞きました。 左から、SCR
タグ AIStateWidgetOfTheWeekwidgetwhat's newversionURLデコードurlTweenAnimationBuildertrytestsyncfusion_flutter_calendarstreamStatefulWidgetStackアニメーションSSDsinkSFCalendarSchedulerBindingrunZoneGuardedrunZoneriverpodregexpregexQRコードqr-codepubspec.yamlアセットアプリ情報Pll Request下線置換置き換える空き容量正規表現文字列抽出容量削減容量多言語対応多言語化対応多言語例外処理一覧アルゴリズム一致マークダウンマッチパララックス効果デザインディスク容量テストセキュリティグラスモーフィズムカメラエンコードアンダーラインアンダースコアPRpackage_info_
タグ AIStateWidgetOfTheWeekwidgetwhat's newversionURLデコードurlTweenAnimationBuildertrytestsyncfusion_flutter_calendarstreamStatefulWidgetStackアニメーションSSDsinkSFCalendarSchedulerBindingrunZoneGuardedrunZoneriverpodregexpregexQRコードqr-codepubspec.yamlアセットアプリ情報Pll Request下線置換置き換える空き容量正規表現文字列抽出容量削減容量多言語対応多言語化対応多言語例外処理一覧アルゴリズム一致マークダウンマッチパララックス効果デザインディスク容量テストセキュリティグラスモーフィズムカメラエンコードアンダーラインアンダースコアPRpackage_info_
背景 たまたま React/React Native について少し調べる機会があり、その派生で React Native と Flutter の違いを調べていくうちに「普段書いている Flutter/Dart のソースコードが iOS/Android などネイティブプラットフォーム上で実行されるまで何が行われているのか」が気になり、周辺情報をインプットしていました。これまでも何となく全体像はイメージしていたものの曖昧で、改めて調べた内容を自分なりにまとめてみた備忘録に近い内容となっております。 動機は Flutter ですが、調べていくうちに Dart や Dart VM を掘っていった形になっているため、あまり Flutter の話(Engine 等)は出てきません。ただ、Flutter と Dart で多少異なる部分はあると思いつつ、実行に Dart VM を使っている以上根本は変わら
やりたいこと Dartは dart compile exe すればシングルバイナリを出力してくれるので、社内向けのコマンドラインツールを作って配布するなどがしやすい。 GitHub Releasesで↓こういう感じにしたい。 GitHub ActionsでビルドしてReleasesにアップロードする Goで書けばクロスコンパイルもできるしgoreleaserでGitHub Releasesへのアップロードも楽勝なのだが、Dartではそこまで整った仕組みはない。 クロスコンパイルできないまま2年くらい経っていて、そろそろみんな諦め始めている。代わりに、GitHub Actionsのwindows-latest, macos-latest, ubuntu-latestを使うというのが定石になりつつある。 上のissueには実際にそれぞれのビルド環境でビルドしてアーティファクトにアップロードする
タグ AIStateWidgetOfTheWeekwidgetwhat's newversionURLデコードurlTweenAnimationBuildertrytestsyncfusion_flutter_calendarstreamStatefulWidgetStackアニメーションSSDsinkSFCalendarSchedulerBindingrunZoneGuardedrunZoneriverpodregexpregexQRコードqr-codepubspec.yamlアセットアプリ情報Pll Request下線置換置き換える空き容量正規表現文字列抽出容量削減容量多言語対応多言語化対応多言語例外処理一覧アルゴリズム一致マークダウンマッチパララックス効果デザインディスク容量テストセキュリティグラスモーフィズムカメラエンコードアンダーラインアンダースコアPRpackage_info_
タグ AIStateWidgetOfTheWeekwidgetwhat's newversionURLデコードurlTweenAnimationBuildertrytestsyncfusion_flutter_calendarstreamStatefulWidgetStackアニメーションSSDsinkSFCalendarSchedulerBindingrunZoneGuardedrunZoneriverpodregexpregexQRコードqr-codepubspec.yamlアセットアプリ情報Pll Request下線置換置き換える空き容量正規表現文字列抽出容量削減容量多言語対応多言語化対応多言語例外処理一覧アルゴリズム一致マークダウンマッチパララックス効果デザインディスク容量テストセキュリティグラスモーフィズムカメラエンコードアンダーラインアンダースコアPRpackage_info_
タグ AIStateWidgetOfTheWeekwidgetwhat's newversionURLデコードurlTweenAnimationBuildertrytestsyncfusion_flutter_calendarstreamStatefulWidgetStackアニメーションSSDsinkSFCalendarSchedulerBindingrunZoneGuardedrunZoneriverpodregexpregexQRコードqr-codepubspec.yamlアセットアプリ情報Pll Request下線置換置き換える空き容量正規表現文字列抽出容量削減容量多言語対応多言語化対応多言語例外処理一覧アルゴリズム一致マークダウンマッチパララックス効果デザインディスク容量テストセキュリティグラスモーフィズムカメラエンコードアンダーラインアンダースコアPRpackage_info_
タグ AIStateWidgetOfTheWeekwidgetwhat's newversionURLデコードurlTweenAnimationBuildertrytestsyncfusion_flutter_calendarstreamStatefulWidgetStackアニメーションSSDsinkSFCalendarSchedulerBindingrunZoneGuardedrunZoneriverpodregexpregexQRコードqr-codepubspec.yamlアセットアプリ情報Pll Request下線置換置き換える空き容量正規表現文字列抽出容量削減容量多言語対応多言語化対応多言語例外処理一覧アルゴリズム一致マークダウンマッチパララックス効果デザインディスク容量テストセキュリティグラスモーフィズムカメラエンコードアンダーラインアンダースコアPRpackage_info_
タグ AIStateWidgetOfTheWeekwidgetwhat's newversionURLデコードurlTweenAnimationBuildertrytestsyncfusion_flutter_calendarstreamStatefulWidgetStackアニメーションSSDsinkSFCalendarSchedulerBindingrunZoneGuardedrunZoneriverpodregexpregexQRコードqr-codepubspec.yamlアセットアプリ情報Pll Request下線置換置き換える空き容量正規表現文字列抽出容量削減容量多言語対応多言語化対応多言語例外処理一覧アルゴリズム一致マークダウンマッチパララックス効果デザインディスク容量テストセキュリティグラスモーフィズムカメラエンコードアンダーラインアンダースコアPRpackage_info_
タグ AIStateWidgetOfTheWeekwidgetwhat's newversionURLデコードurlTweenAnimationBuildertrytestsyncfusion_flutter_calendarstreamStatefulWidgetStackアニメーションSSDsinkSFCalendarSchedulerBindingrunZoneGuardedrunZoneriverpodregexpregexQRコードqr-codepubspec.yamlアセットアプリ情報Pll Request下線置換置き換える空き容量正規表現文字列抽出容量削減容量多言語対応多言語化対応多言語例外処理一覧アルゴリズム一致マークダウンマッチパララックス効果デザインディスク容量テストセキュリティグラスモーフィズムカメラエンコードアンダーラインアンダースコアPRpackage_info_
id:kikuchy です。 婚活サービスyoubrideのスマートフォンアプリは以前からFlutterを採用しています。 developer.diverse-inc.com このアプリでは、始めはscoped_model、次にproviderを状態管理ツールとして採用してきました。 この度、通常の開発を大きく止めることなくproviderからriverpodへと移行できたので、どのように移行したのかをお話したいと思います。 前提:なぜriverpodにしたのか providerパッケージ(以下、provder)もriverpodパッケージ(正確にはflutter_riverpodパッケージ。以下、riverpod)も同じ作者(Remi Rousseletさん)による状態管理&依存性注入のためのライブラリです。 両者で実現できる機能はほとんど変わりません。 できることは主に以下のとおりです
Flutter RiverpodのFutureProviderを利用したUnit TestとViewのWidget Testを書く Flutter の Riverpod の FutureProvider を利用すれば API 通信処理をとても楽に実装できます。 前回の記事で FutureProvider の使い方を解説しました。 前提として、前回の記事で実装した内容のテストを書くのでまずこちらの記事をご覧ください。 こちらの記事では MVVM のアーキテクチャを採用しています。 今回は FutureProvider の Unit Test と、画面表示の責務を担う View の Widget Test を書いていきます。 環境macOS Big Sur 11.4Android Studio 4.2.1Flutter 2.2.0Dart 2.13.0Package installpubspe
Flutter Riverpod で DI したクラスを Mockito でモック化して UnitTest を書きます。 アーキテクチャとして MVVM を想定し、Data 層である ApiClient Class と Repository Class を Reverpod で DI します。 Repository Class に DI した ApiClient Class を Mockito の Mock 対象とします。 Mockito を使用して Repository Class の Unit Test を書いていきます。 環境macOS Big Sur 11.3.1Android Studio 4.2.1Flutter 2.2.0Dart 2.13.0Package installpubspec.yaml に以下を追記して flutter pub get を実行します。 depend
学生たちを見ていると、きちんと議論して、きちんと設計して、きちんと何かを作ろうとするみたいです。ときには副作用を考慮して、やっぱり作るのやめようかという話になり、再び議論に戻ることもあります。 ああ、もったいない、もったいない。私は適当な人間なので「なんてマジメなんだ、とりあえず何か作ればいいのに」と思います。デザイン思考ではそのことを「クイック&ダーティプロトタイプ」と呼んだりしますが、それだとなんだかカッコよすぎるので、私は「雑に作れ」と言ってます。 でも、言葉だけでうまく伝わるはずもなく、「どうすれば雑に作れるのか?」と再び議論を始めたりするので、なかなか難しいところです。 それでも「締め切り」というのは効果的なもので、次回までに何かを発表しなければいけないとなると、「議論してばかりじゃ話が進まない!」となり、ある種の覚悟を決めて雑に作ってくれるようになります。 私が印象的だったのは
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く