狠狠撸

狠狠撸Share a Scribd company logo
オレの考えたeffective-flutter
2019/11/22 sh-ogawa
最近Dartの気持ちが判ってきたような
気がする(多分気のせい)
最近Flutterの気持ちが判ってきたような
気がする(多分気のせい)
基本
● アプリの表現はページの組合せ
● StatefulWidgetの利用は最小限
● Navigatorは上手く使う
● PluginでOS差分を外に追いやる
● 腐敗防止層を置く
4. エントリのファイル名を決めておく
ページの組合せ
1. 各ページを個別に作成
2. これらをコントロールするWidget
3. 単純なものは1つで構わない
StatefulWidget
● 何も考えないと画面全体がrebuild対象
● StatefulWidgetの配置場所を考える
● 叠濒辞肠パターンを使う
Blocパターンおさらい
● StreamBuilderを使う
● 入力をStreamで流して、更新させる
● RxDartを使うと簡単にできる
StreamBuilder
https://api.flutter.dev/flutter/widgets/StreamBuilder-class.html
Navigatorの使い方
● 画面をpush/popで切替えられる
● 安易に使うとappbarのleadingで苦しむ
● PageViewやIndexedStackを使う
● 履歴から削除しながら画面遷移させる
Navigator.pushNamedAndRemoveUntil(
context, routeName,
(Route<dynamic> route) => false
);
Plugin化の考え方
● OSの機能を使わないといけない
● 充分に抽象化されている
※業務ロジックが入り込まない
● パッケージが公開されてたら使うだろってものは公開す
る
※音を鳴らしたい、音量を変えたいとかそういうもの
● 機能は詰め込み過ぎない
※単一責任の原則に従う
Pluginの取り込み
● バイナリでは落ちてこない
● コンパイルしている
● プラグインを大量に取込んでも、サイズ的に
は対して変わらない(であろう)
● 処理は所詮ローカル呼び出し
腐敗防止層
● Flutterに限った話ではない
● バックエンドとフロントのギャップを埋める
● あとMapは使いづらい
var _card = Card(
child: ListTile(
title: Text(map[‘title’]),
trailing: IconButton(
icon: Icon(Icons.arrow_forward_ios),
onPressed: () {
callback(map[‘value’]);
},
),
),
var _card = Card(
child: ListTile(
title: Text(entity.title),
trailing: IconButton(
icon: Icon(Icons.arrow_forward_ios),
onPressed: () {
callback(entity.value);
},
),
),
);
JSON to Entity on dart
● json_annotationを使う
● Javaのjsonicとほぼ同等
● アノテーションでプロパティとMapのキー
を紐づけて、リフレクションで箱クラスの実
態を作る
● 対象が変更される度に叩く
チームで使う場合はgit hookで叩かせる
flutter packages pub run build_runner build
その他(Dart)
● 1ファイルがpackage friendlyと考える
ex) request/response/convert to
Entity
● 名前付きコンストラクタを積極的に使う
● メソッド引数は名前付き引数を使う
● 必須にパラメータには@requiredを付ける
おしまい

More Related Content

What's hot (17)

骋辞を知る
骋辞を知る骋辞を知る
骋辞を知る
Hirokazu Fukami
?
叠耻诲诲测笔谤别蝉蝉の导入からカスタマイズまでの日记
叠耻诲诲测笔谤别蝉蝉の导入からカスタマイズまでの日记叠耻诲诲测笔谤别蝉蝉の导入からカスタマイズまでの日记
叠耻诲诲测笔谤别蝉蝉の导入からカスタマイズまでの日记
Shoichi Otomo
?
贵耻肠丑蝉颈补概略その1
贵耻肠丑蝉颈补概略その1贵耻肠丑蝉颈补概略その1
贵耻肠丑蝉颈补概略その1
l_b__
?
骋谤辞辞惫测の闯厂翱狈で日付?时刻を扱う
骋谤辞辞惫测の闯厂翱狈で日付?时刻を扱う骋谤辞辞惫测の闯厂翱狈で日付?时刻を扱う
骋谤辞辞惫测の闯厂翱狈で日付?时刻を扱う
Yasuharu Hayami
?
Groovyスクリプト"再"入門 起動編
Groovyスクリプト"再"入門 起動編Groovyスクリプト"再"入門 起動編
Groovyスクリプト"再"入門 起動編
Yasuharu Hayami
?
今から始めるApache Groovy
今から始めるApache Groovy今から始めるApache Groovy
今から始めるApache Groovy
Yasuharu Hayami
?
础苍诲谤辞颈诲の新ビルドシステム
础苍诲谤辞颈诲の新ビルドシステム础苍诲谤辞颈诲の新ビルドシステム
础苍诲谤辞颈诲の新ビルドシステム
l_b__
?
骋谤辞辞惫测で闯厂翱狈2015
骋谤辞辞惫测で闯厂翱狈2015骋谤辞辞惫测で闯厂翱狈2015
骋谤辞辞惫测で闯厂翱狈2015
Yasuharu Hayami
?
础苍诲谤辞颈诲の忌しき厂迟补肠办翱惫别谤贵濒辞飞をどうにかする
础苍诲谤辞颈诲の忌しき厂迟补肠办翱惫别谤贵濒辞飞をどうにかする础苍诲谤辞颈诲の忌しき厂迟补肠办翱惫别谤贵濒辞飞をどうにかする
础苍诲谤辞颈诲の忌しき厂迟补肠办翱惫别谤贵濒辞飞をどうにかする
Koji MATSUBARA
?
今更骋奥罢で游ぶぜ!
今更骋奥罢で游ぶぜ!今更骋奥罢で游ぶぜ!
今更骋奥罢で游ぶぜ!
Daisuke Kamikawa
?
Ruby - gnuplot on Mac
Ruby - gnuplot on MacRuby - gnuplot on Mac
Ruby - gnuplot on Mac
gotohayato
?
搁耻产测颁辞苍蹿の话の続きのおはなし
搁耻产测颁辞苍蹿の话の続きのおはなし搁耻产测颁辞苍蹿の话の続きのおはなし
搁耻产测颁辞苍蹿の话の続きのおはなし
yamanekko
?
惭别迟别辞谤というフレームワーク
惭别迟别辞谤というフレームワーク惭别迟别辞谤というフレームワーク
惭别迟别辞谤というフレームワーク
rukiadia
?
Android カスタムROMの作り方
Android カスタムROMの作り方Android カスタムROMの作り方
Android カスタムROMの作り方
Masahiro Hidaka
?
Product Release Webinar - APIM Manager 1.6
Product Release Webinar - APIM Manager 1.6Product Release Webinar - APIM Manager 1.6
Product Release Webinar - APIM Manager 1.6
WSO2
?
补锄耻谤别障害は忘れたころにやってくる
补锄耻谤别障害は忘れたころにやってくる补锄耻谤别障害は忘れたころにやってくる
补锄耻谤别障害は忘れたころにやってくる
裕之 木下
?
骋辞で贰笔颁作って本番运用している话
骋辞で贰笔颁作って本番运用している话骋辞で贰笔颁作って本番运用している话
骋辞で贰笔颁作って本番运用している话
雄也 日下部
?
叠耻诲诲测笔谤别蝉蝉の导入からカスタマイズまでの日记
叠耻诲诲测笔谤别蝉蝉の导入からカスタマイズまでの日记叠耻诲诲测笔谤别蝉蝉の导入からカスタマイズまでの日记
叠耻诲诲测笔谤别蝉蝉の导入からカスタマイズまでの日记
Shoichi Otomo
?
贵耻肠丑蝉颈补概略その1
贵耻肠丑蝉颈补概略その1贵耻肠丑蝉颈补概略その1
贵耻肠丑蝉颈补概略その1
l_b__
?
骋谤辞辞惫测の闯厂翱狈で日付?时刻を扱う
骋谤辞辞惫测の闯厂翱狈で日付?时刻を扱う骋谤辞辞惫测の闯厂翱狈で日付?时刻を扱う
骋谤辞辞惫测の闯厂翱狈で日付?时刻を扱う
Yasuharu Hayami
?
Groovyスクリプト"再"入門 起動編
Groovyスクリプト"再"入門 起動編Groovyスクリプト"再"入門 起動編
Groovyスクリプト"再"入門 起動編
Yasuharu Hayami
?
今から始めるApache Groovy
今から始めるApache Groovy今から始めるApache Groovy
今から始めるApache Groovy
Yasuharu Hayami
?
础苍诲谤辞颈诲の新ビルドシステム
础苍诲谤辞颈诲の新ビルドシステム础苍诲谤辞颈诲の新ビルドシステム
础苍诲谤辞颈诲の新ビルドシステム
l_b__
?
骋谤辞辞惫测で闯厂翱狈2015
骋谤辞辞惫测で闯厂翱狈2015骋谤辞辞惫测で闯厂翱狈2015
骋谤辞辞惫测で闯厂翱狈2015
Yasuharu Hayami
?
础苍诲谤辞颈诲の忌しき厂迟补肠办翱惫别谤贵濒辞飞をどうにかする
础苍诲谤辞颈诲の忌しき厂迟补肠办翱惫别谤贵濒辞飞をどうにかする础苍诲谤辞颈诲の忌しき厂迟补肠办翱惫别谤贵濒辞飞をどうにかする
础苍诲谤辞颈诲の忌しき厂迟补肠办翱惫别谤贵濒辞飞をどうにかする
Koji MATSUBARA
?
今更骋奥罢で游ぶぜ!
今更骋奥罢で游ぶぜ!今更骋奥罢で游ぶぜ!
今更骋奥罢で游ぶぜ!
Daisuke Kamikawa
?
Ruby - gnuplot on Mac
Ruby - gnuplot on MacRuby - gnuplot on Mac
Ruby - gnuplot on Mac
gotohayato
?
搁耻产测颁辞苍蹿の话の続きのおはなし
搁耻产测颁辞苍蹿の话の続きのおはなし搁耻产测颁辞苍蹿の话の続きのおはなし
搁耻产测颁辞苍蹿の话の続きのおはなし
yamanekko
?
惭别迟别辞谤というフレームワーク
惭别迟别辞谤というフレームワーク惭别迟别辞谤というフレームワーク
惭别迟别辞谤というフレームワーク
rukiadia
?
Android カスタムROMの作り方
Android カスタムROMの作り方Android カスタムROMの作り方
Android カスタムROMの作り方
Masahiro Hidaka
?
Product Release Webinar - APIM Manager 1.6
Product Release Webinar - APIM Manager 1.6Product Release Webinar - APIM Manager 1.6
Product Release Webinar - APIM Manager 1.6
WSO2
?
补锄耻谤别障害は忘れたころにやってくる
补锄耻谤别障害は忘れたころにやってくる补锄耻谤别障害は忘れたころにやってくる
补锄耻谤别障害は忘れたころにやってくる
裕之 木下
?
骋辞で贰笔颁作って本番运用している话
骋辞で贰笔颁作って本番运用している话骋辞で贰笔颁作って本番运用している话
骋辞で贰笔颁作って本番运用している话
雄也 日下部
?

Similar to Effective flutter (14)

Gruntて?java script前作業の自動化!
Gruntて?java script前作業の自動化!Gruntて?java script前作業の自動化!
Gruntて?java script前作業の自動化!
Tanaka Yuichi
?
顿箩补苍驳辞のススメ
顿箩补苍驳辞のススメ顿箩补苍驳辞のススメ
顿箩补苍驳辞のススメ
Alisue Lambda
?
狈笔础笔滨を使った补苍诲谤辞颈诲标準ブラウザの拡张方法
狈笔础笔滨を使った补苍诲谤辞颈诲标準ブラウザの拡张方法狈笔础笔滨を使った补苍诲谤辞颈诲标準ブラウザの拡张方法
狈笔础笔滨を使った补苍诲谤辞颈诲标準ブラウザの拡张方法
Naruto TAKAHASHI
?
今流行りのウェブアプリ开発环境驰别辞尘补苍
今流行りのウェブアプリ开発环境驰别辞尘补苍今流行りのウェブアプリ开発环境驰别辞尘补苍
今流行りのウェブアプリ开発环境驰别辞尘补苍
tomo_masakura
?
Jjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafxJjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafx
torutk
?
WordPress プラグイン Infinite Scroll を試してみた
WordPress プラグイン Infinite Scroll を試してみたWordPress プラグイン Infinite Scroll を試してみた
WordPress プラグイン Infinite Scroll を試してみた
Yuji Nojima
?
HTML5-pronama-study
HTML5-pronama-studyHTML5-pronama-study
HTML5-pronama-study
Naoya Inada
?
フィルタドライバ入门
フィルタドライバ入门フィルタドライバ入门
フィルタドライバ入门
firewood
?
顿补谤迟笔补诲+颁辞诲别笔别苍で、贵濒耻迟迟别谤を体験してみよう
顿补谤迟笔补诲+颁辞诲别笔别苍で、贵濒耻迟迟别谤を体験してみよう顿补谤迟笔补诲+颁辞诲别笔别苍で、贵濒耻迟迟别谤を体験してみよう
顿补谤迟笔补诲+颁辞诲别笔别苍で、贵濒耻迟迟别谤を体験してみよう
cch-robo
?
狈辞诲别にしましょう
狈辞诲别にしましょう狈辞诲别にしましょう
狈辞诲别にしましょう
Yuzo Hebishima
?
テ?部会 フ?ロトタイフ?
テ?部会 フ?ロトタイフ?テ?部会 フ?ロトタイフ?
テ?部会 フ?ロトタイフ?
Nobuhiko Futagami
?
210630 python
210630 python210630 python
210630 python
Takuya Nishimoto
?
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
normalian
?
Gruntて?java script前作業の自動化!
Gruntて?java script前作業の自動化!Gruntて?java script前作業の自動化!
Gruntて?java script前作業の自動化!
Tanaka Yuichi
?
顿箩补苍驳辞のススメ
顿箩补苍驳辞のススメ顿箩补苍驳辞のススメ
顿箩补苍驳辞のススメ
Alisue Lambda
?
狈笔础笔滨を使った补苍诲谤辞颈诲标準ブラウザの拡张方法
狈笔础笔滨を使った补苍诲谤辞颈诲标準ブラウザの拡张方法狈笔础笔滨を使った补苍诲谤辞颈诲标準ブラウザの拡张方法
狈笔础笔滨を使った补苍诲谤辞颈诲标準ブラウザの拡张方法
Naruto TAKAHASHI
?
今流行りのウェブアプリ开発环境驰别辞尘补苍
今流行りのウェブアプリ开発环境驰别辞尘补苍今流行りのウェブアプリ开発环境驰别辞尘补苍
今流行りのウェブアプリ开発环境驰别辞尘补苍
tomo_masakura
?
Jjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafxJjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafx
torutk
?
WordPress プラグイン Infinite Scroll を試してみた
WordPress プラグイン Infinite Scroll を試してみたWordPress プラグイン Infinite Scroll を試してみた
WordPress プラグイン Infinite Scroll を試してみた
Yuji Nojima
?
HTML5-pronama-study
HTML5-pronama-studyHTML5-pronama-study
HTML5-pronama-study
Naoya Inada
?
フィルタドライバ入门
フィルタドライバ入门フィルタドライバ入门
フィルタドライバ入门
firewood
?
顿补谤迟笔补诲+颁辞诲别笔别苍で、贵濒耻迟迟别谤を体験してみよう
顿补谤迟笔补诲+颁辞诲别笔别苍で、贵濒耻迟迟别谤を体験してみよう顿补谤迟笔补诲+颁辞诲别笔别苍で、贵濒耻迟迟别谤を体験してみよう
顿补谤迟笔补诲+颁辞诲别笔别苍で、贵濒耻迟迟别谤を体験してみよう
cch-robo
?
狈辞诲别にしましょう
狈辞诲别にしましょう狈辞诲别にしましょう
狈辞诲别にしましょう
Yuzo Hebishima
?
テ?部会 フ?ロトタイフ?
テ?部会 フ?ロトタイフ?テ?部会 フ?ロトタイフ?
テ?部会 フ?ロトタイフ?
Nobuhiko Futagami
?
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
normalian
?

More from 小川 昌吾 (20)

Flutter first impression
Flutter first impressionFlutter first impression
Flutter first impression
小川 昌吾
?
Flutter management statement
Flutter management statementFlutter management statement
Flutter management statement
小川 昌吾
?
Laravel vue-project-upload
Laravel vue-project-uploadLaravel vue-project-upload
Laravel vue-project-upload
小川 昌吾
?
Lara vue
Lara vueLara vue
Lara vue
小川 昌吾
?
Atomic design+vue
Atomic design+vueAtomic design+vue
Atomic design+vue
小川 昌吾
?
今年はある意味当たり年だった! という一年振り返り
今年はある意味当たり年だった! という一年振り返り今年はある意味当たり年だった! という一年振り返り
今年はある意味当たり年だった! という一年振り返り
小川 昌吾
?
Njug docker-20180623
Njug docker-20180623Njug docker-20180623
Njug docker-20180623
小川 昌吾
?
アプリ屋のための Docker入門
アプリ屋のための Docker入門アプリ屋のための Docker入門
アプリ屋のための Docker入門
小川 昌吾
?
Njug 20180414
Njug 20180414Njug 20180414
Njug 20180414
小川 昌吾
?
闯补惫补屋から笔贬笔别谤になって1年くらい経った
闯补惫补屋から笔贬笔别谤になって1年くらい経った闯补惫补屋から笔贬笔别谤になって1年くらい経った
闯补惫补屋から笔贬笔别谤になって1年くらい経った
小川 昌吾
?
チュートリアルではじめる痴耻别.箩蝉
チュートリアルではじめる痴耻别.箩蝉チュートリアルではじめる痴耻别.箩蝉
チュートリアルではじめる痴耻别.箩蝉
小川 昌吾
?
受託、厂贰厂、奥贰叠と経験したので比较してみた
受託、厂贰厂、奥贰叠と経験したので比较してみた受託、厂贰厂、奥贰叠と経験したので比较してみた
受託、厂贰厂、奥贰叠と経験したので比较してみた
小川 昌吾
?
滨罢の开発现场における最近の当たり前これからの当たり前(主観)
滨罢の开発现场における最近の当たり前これからの当たり前(主観)滨罢の开発现场における最近の当たり前これからの当たり前(主観)
滨罢の开発现场における最近の当たり前これからの当たり前(主観)
小川 昌吾
?
非エンジニアに捧ぐツアーオブ构成管理
非エンジニアに捧ぐツアーオブ构成管理非エンジニアに捧ぐツアーオブ构成管理
非エンジニアに捧ぐツアーオブ构成管理
小川 昌吾
?
Dynamo db はじめの一歩
Dynamo db はじめの一歩Dynamo db はじめの一歩
Dynamo db はじめの一歩
小川 昌吾
?
スキトラ骋颈迟
スキトラ骋颈迟スキトラ骋颈迟
スキトラ骋颈迟
小川 昌吾
?
スキトラ Spring + mybatis
スキトラ Spring + mybatisスキトラ Spring + mybatis
スキトラ Spring + mybatis
小川 昌吾
?
テストコード入门
テストコード入门テストコード入门
テストコード入门
小川 昌吾
?
滨辞罢検定
滨辞罢検定滨辞罢検定
滨辞罢検定
小川 昌吾
?
惭测厂蚕尝入门
惭测厂蚕尝入门惭测厂蚕尝入门
惭测厂蚕尝入门
小川 昌吾
?
Flutter first impression
Flutter first impressionFlutter first impression
Flutter first impression
小川 昌吾
?
Flutter management statement
Flutter management statementFlutter management statement
Flutter management statement
小川 昌吾
?
Laravel vue-project-upload
Laravel vue-project-uploadLaravel vue-project-upload
Laravel vue-project-upload
小川 昌吾
?
今年はある意味当たり年だった! という一年振り返り
今年はある意味当たり年だった! という一年振り返り今年はある意味当たり年だった! という一年振り返り
今年はある意味当たり年だった! という一年振り返り
小川 昌吾
?
アプリ屋のための Docker入門
アプリ屋のための Docker入門アプリ屋のための Docker入門
アプリ屋のための Docker入門
小川 昌吾
?
闯补惫补屋から笔贬笔别谤になって1年くらい経った
闯补惫补屋から笔贬笔别谤になって1年くらい経った闯补惫补屋から笔贬笔别谤になって1年くらい経った
闯补惫补屋から笔贬笔别谤になって1年くらい経った
小川 昌吾
?
チュートリアルではじめる痴耻别.箩蝉
チュートリアルではじめる痴耻别.箩蝉チュートリアルではじめる痴耻别.箩蝉
チュートリアルではじめる痴耻别.箩蝉
小川 昌吾
?
受託、厂贰厂、奥贰叠と経験したので比较してみた
受託、厂贰厂、奥贰叠と経験したので比较してみた受託、厂贰厂、奥贰叠と経験したので比较してみた
受託、厂贰厂、奥贰叠と経験したので比较してみた
小川 昌吾
?
滨罢の开発现场における最近の当たり前これからの当たり前(主観)
滨罢の开発现场における最近の当たり前これからの当たり前(主観)滨罢の开発现场における最近の当たり前これからの当たり前(主観)
滨罢の开発现场における最近の当たり前これからの当たり前(主観)
小川 昌吾
?
非エンジニアに捧ぐツアーオブ构成管理
非エンジニアに捧ぐツアーオブ构成管理非エンジニアに捧ぐツアーオブ构成管理
非エンジニアに捧ぐツアーオブ构成管理
小川 昌吾
?
Dynamo db はじめの一歩
Dynamo db はじめの一歩Dynamo db はじめの一歩
Dynamo db はじめの一歩
小川 昌吾
?
スキトラ Spring + mybatis
スキトラ Spring + mybatisスキトラ Spring + mybatis
スキトラ Spring + mybatis
小川 昌吾
?
テストコード入门
テストコード入门テストコード入门
テストコード入门
小川 昌吾
?

Effective flutter

Editor's Notes

  • #6: ページ全体をコンポーネントとして捉えている 基本はmainから入るが、通知から表示するときはdetailを直接開く、ということができる エントリのファイル名を決めておくと、 後で見るときにどこからおえば良いかが判りやすい またmainを置くことで、配下に置くページWidgetに対して、ChangeNotifierで制御しやすくなる
  • #7: setStateは発行したWidgetとそこにぶら下がっているWidgetがrebuildされる StatefulWidgetの配置を考慮した構成は、スキル差が諸に出る 何も考えないで基本系をStatelessWidgetにして、Blocで更新したい箇所を更新するのがコスパが良い
  • #9: ページを尘补颈苍でひとまとまりにする
  • #12: どっちが良いかという話。 左はキーの値が変わると全部変わる。 右は詰め込むときにアプリの形に合わせるように入れれば良いから、変更箇所が最小限になる。
  • #13: コマンドは、環境ごとに叩かないと上手く動かないことを観測しているので、 Gitignoreに自動生成ファイルは入れて管理外にする。 Git hookでpull/merge/checkoutしたときくらいに走るようにしとくとスムーズ