週刊 Dart & Flutter インプット 19

ntaoo
12 min readMay 22, 2020

--

毎週金曜日に、@ntaoo がインプットしたDart & Flutterの情報のリンク集をまとめて共有します。

What are the important & difficult tasks for Flutter devs? — Q1 2020 survey results

いつものように要約

2月におこなわれたFlutterユーザー調査の結果

  • animationに関する満足度が少しだけ落ちた(-3%)ので、Makeing animation in Flutter https://www.youtube.com/watch?v=GXIJJkq_H8g&list=PLjxrf2q8roU2v6UqYlt_KPaXlnjbYySua シリーズを作った。
  • Flutterの評価段階を終えて、より真剣な目的のために採用をしたユーザーが増えている。
  • アプリをpublishしたユーザーの69%がiOSとAndroidの両方でbuildしている。16%がWebにも挑戦している。
  • PlayStoreにはすでに5万のFlutter製アプリがあり、その数は爆発的に増えていっている。

重要との回答が多かった6つのタスク

  • エラーとクラッシュのデバッギング
  • 多様なプラットフォームで動くことを確実にすること
  • 状態管理手法の選定
  • テキストオーバーフローなどのレイアウト問題への理解
  • UX/UIデザイナーによるデザイン仕様に基づいたUIの作成
  • プラットフォーム特有の問題のトラブルシューティング

プロフェッショナルレベルのFlutterアプリ開発者から、最も難しいとの回答が多かった6つのタスク

  • プラットフォーム特有の問題のトラブルシューティング
  • メモリーに関する問題の原因調査と修正
  • CPU使用量に関する問題の原因調査と修正
  • プラットフォーム依存のネイティブAPIを追加すること
  • “UI jank” (訳注: 滑らかに動かないUI) の原因診断と修正
  • (プラットフォーム依存実装を伴う)Flutterプラグインの開発

Optimizing performance in Flutter web apps with tree shaking and deferred loading

Web開発者にはおなじみのTree Shaking、および比較的有名ではないだろうDartのdeferred loadingについての解説。Deferred loadingはWeb用にdart2jsでコンパイルする際に、生成するJSを分割してアプリケーション実行中にそれが必要になるまでネットワーク越しの読み込みを遅延させます。

Flutter Package Ecosystem Update — Flutter — Medium

  • Flutter Packageエコシステムを信頼できるものにするために、それぞれのpackageに関する多くの指標を公開している。Verified Publisher, Like数、そして、#FlutterFavorite https://pub.dev/flutter/favorites 。最も注目に値するプラグインのひとつは、the sign_in_with_apple plugin
  • Packageの質と量が向上し続けている。
  • いくつかのGoogle製package (訳注: 原文参照)はプロダクション品質に達している。それらのメジャーバージョンを1.0.0に上げた場合にそれらに依存するパッケージがバージョンチェックに引っかからずに円滑にバージョンアップをするに、たとえば、dependencies: shared_preferences: ‘>=0.5.7+2 <2.0.0’ のように <2.0.0を指定してほしい。
  • プロダクション品質にまだ達していないpackage、たとえばFlutterFireなどについては、Invertaseを加えて、https://github.com/FirebaseExtended/flutterfire/issues/2582 のように改善中。

3 cool Dart patterns — Dart — Medium

Merging widgets into a collection

children: [
Container(),
for (final food in foods) ...[
if (isVegetarian == food.isVegetarian)
ListTile(title: Text(food.name)),
SizedBox(height: 50.0),
],
],

知らなかった。でも、あまり読みやすいとは感じないんですけど…

Immediately invoking an anonymous function

color: () {
switch (getRandomElement(foods).name) {
case 'apple':
return Colors.green;
case 'nuts':
return Colors.brown;
case 'eggs':
return Colors.yellow;
default:
return Colors.transparent;
}
}(),

JavaScriptを知っている人なら全員知っているほど有名な、無名関数を即時実行するパターン。https://en.wikipedia.org/wiki/Immediately_invoked_function_expression

いわゆる、TENNENT’S PRINCIPLE OF CORRESPONDENCE (http://techscursion.com/2012/02/tennent-correspondence-principle.html)という原則。

For a given expression expr, lambda expr should be equivalent.

Understanding constraints — Flutter

flutter-the-advanced-layout-rule-even-beginners-must-know が公式サイト向けに改訂されました。必読。

Rémi Rousselet: Reinventing provider

Providerの作者が、Providerを破壊的に進化させた、Riverpodという実験的パッケージを作っているそうです。

Staticでtype parameterとFlutter BuildContextに依存し、RuntimeErrorになりえるProviderから、確実に前進しているアイデアに見えます。素晴らしい。特に、Flutterに依存していないPure Dartなことが素晴らしい。

(RiverPod版の)Provider自体はstatic globalに宣言していますが、ProviderScopeで囲ったWidgetからしか取得できない制約をつけることで実質的に状態のGlobal化を回避しています。

Widget Treeだけでなく、Model層でも使うことを想定しているそうです。

この作者が他に作っているPackageの、Flutter HookやStateNotifierと組み合わせて状態管理のソリューションとして推していく構想があるようです。

eBayのUIテスト自動化を支えるFlutter Golden Tests

Logging in Dart — Ryoichi Izumita — Medium

Dart / Flutterのloggingについての選択肢をおそらく網羅されています。ありがたい。

KBOYのFlutter大学 — YouTube

これからFlutterを始める人向け。すばらしいー。

RxDart by example: querying the GitHub Search API with switchMap & debounce | Code With Andrea

Rx(Stream)の頻出パターンの一つである、Search APIの実装方法についての解説。

https://codewithandrea.com/videos/2020-05-11-rxdart-by-example-github-search/

Flutterを実務で使ってみてイケてなかったこと7選 — daimarom’s tech blog

The fear of dart:mirrors

昔の記事ですが、Redditに貼ってあったので。dart:mirrorsはAoTコンパイル対応のために実質的にsource_genに移行しているという理解。

情報源

https://twitter.com/ntaoo が、followさせていただいている方々

最新の情報を中心にしますが、少し古めでも私が見つけた際に有益と判断した情報も載せていきます。情報の網羅性の高さは不明です。継続を重視して省力化しています。

  • 公式情報は優先順位最高にして載せます。
  • それら以外の情報は、私の関心に基づいて適当に間引きます。
  • 基礎は、https://dart.dev/codelabs , https://flutter.dev/docs , Udemyなどのオンラインビデオトレーニングコース、または書籍などで体系的に学んで習得しましょう。

--

--