SlideShare a Scribd company logo
1 of 47
Download to read offline
Flutterでの
Widgetツリーへの状態伝播と
アクセス制限の基本戦略
DroidKaigi 2019
JA Room 6 - 2019/02/08 17:40-18:10
robo
自己紹介
名前
robo (兼高理恵)
好きなもの
モバイル端末
おしごと
アプリの設計から実装まで
2
このセッションでは、
Flutterのネストが深くならないように気をつけたり、
基本ウィジェット(*1)
のみを使った、アプリ全体での状態や
ロジックの共有とアクセスの制限について説明します。
初学者が対象ですので、BLOCなど応用技術の説明ではありません。
       (*1)
InheritedWidget
サンプルソース
github にサンプルソースを公開しています。
https://github.com/cch-robo/basic_strategy_of_state_propagation_in_Flutter
サンプルソースは、
個別のアプリ(右)
として
ラウンチャー(左)
から起動できますので、
セッションで説明した実装や挙動の確認に
            御利用ください。
課題)Flutterのツリー定義コードは、ネストが深い
課題)Flutterのツリー定義コードは、ネストが深い
Flutter は、
Widget の入れ子が深くなる宿命を負っています。
これは、単一の機能を持った Widget を組み合わせることで
   強力な効果を出す設計思想(*1)
を取っているからです。
入れ子を作ることを前提にしているので、
どうしてもネストは深く拡くなります。
Flutter.io docs Technical Overview
(*1)Composition > inheritance
https://flutter.io/docs/resources/technical-overview#composition--inheritance
Widgets are themselves often composed of many small, single-purpose widgets
that combine to produce powerful effects.
ウィジェット自体は、多くの場合、強力な効果を生み
出すために組み合わされた多数の小さな単一目的
のウィジェットで構成されます。
カスタマイズされた効果を生み出すためにサブクラス化するのではなく、単純な
ウィジェットを斬新な方法で構成することができるように、
クラス階層も、可能な組み合わせを最大にするため広く浅いそうです。
How to Create Stateless Widgets - Flutter Widgets 101 Ep. 1
https://youtu.be/wE7khGHVkYY?list=PLOU2XLYxmsIJyiwUP
Cou_OVTpRIn_8UMd&t=102
I'm composing my interface by combining a
bunch of simple widgets, each of which handle
one particular job.
Google Developers flutter Playlists より
私はインターフェースを、それぞれが1つの特定の
仕事を処理する単純なウィジェットの束を組み合わ
せることによって作り上げています。
Google Developers flutter Playlists
https://www.youtube.com/user/GoogleDeve
lopers/playlists?shelf_id=66&sort=dd&view
=50
解決案)buildメソッドの入れ子の記述を外出しする。
ビルドツリーのソースから、一部の入れ子構造の記述を外出しす
ることでコードを読みやくすくします。
● 特定の機能やUI表現を担わせた
Widget クラス(コンポーネント)を作る。
● 一部の入れ子構造の記述をメソッド化する。
(クラス内にコードが取り残され、クラス外との共有に難があります。)
ノーマルのカウントアプリは、
ネストが深くないので、
Text 表示をデコってみます。
ノーマルのカウントアプリの
Text 表示をデコってネストを
深くしました。
左)サンプルソース名
  deep_nested_widget_tree.dart
課題例
解決案
StatelessWidget / StatefulWidget を継承したコンポーネン
トWidget クラスを新設し、コードを外出ししました。
カウント値は、コンストラクタ引数で受け取ります。
   ラベル表示コンポーネントは、割愛しています。
サンプルソース名
build_devided_by_component.dart
結論)コンポーネントWidgetを作る/使う
● Flutterは、設計思想によりネストが深くなる宿命を負う。
● 機能やUI単位でコンポーネントWidgetを作る。
○ 入れ子記述が外出しされコードが読みやすくなる。
○ コンポーネント化されたWidgetは、使いまわせる。
○ I/Oの初期化や破棄などがない限り、
StatelessWidget 継承で構わない。
サンプルソース、state on page transition では、
3つのページで、同じコンポーネントWidgetクラスを使いまわしています。
課題)ウィジェットからビジネスロジックを分離したい
課題)InheritedWidget クラスを使ってみたい
ウィジェットからビジネスロジックを追い出すため、
InheritedWidget でアプリ全体やページ間で
状態や処理関数を共有したい。
状態と処理関数を提供する 役割ごとの ロジッククラス と、
ページごとにユニークな ページ InheritedWidget クラスと、
アプリ全体用の アプリ InheritedWidget クラスを作り、
ページ InheritedWidget にページ単位のスコープを
アプリ InheritedWidget にアプリ全体のスコープをもたせ、
build(context)メソッド中のウィジェットから、
ページ専用の ロジックオブジェクト と、
アプリ全体で共有する ロジックオブジェクト と、
グループで共有する ロジックオブジェクト を選択して、
状態値の取得や処理関数の呼び出しを行えるようにします。
ロジッククラスは、
一般的なビジネスロジックラスと同じ作りです。
注意しなければならないことは、
ページ単位のスコープの作り方と、
アプリ全体のスコープの作り方と、
役割ごとの ロジックオブジェクト を提供する
API を設けること、
ページ間では、
直接のアクセスはできないため、
グループ共有の ロジックオブジェクト は
アプリ InheritedWidget で管理すること、
アプリ InheritedWidget では、
どのページやグループからアクセスされたの
かをチェックして、許可のないページやグルー
プからのアクセスを防ぐ実装を追加することで
す。
解決案
補足
● InheritedWidget
ツリーの子孫側(下方)のコンテキストからオブジェクトの参照が取得できるウィジェットクラス。
このセッションでは、画面作成ウィジェットを クライアントとすれば、ツリーの先祖側 (上方)にあるサーバに
することができるようなクラス程度の理解で構いません。
https://docs.flutter.io/flutter/widgets/InheritedWidget-class.html
● ツリー:木構造
このセッションでは、ウィジェットの親子関係の連鎖を表すデータ構造程度の理解で構いません。
https://ja.wikipedia.org/wiki/%E6%9C%A8%E6%A7%8B%E9%80%A0_(%E3%83%87%E3%83%B
C%E3%82%BF%E6%A7%8B%E9%80%A0)
● コンテキスト:BuildContext
ここでは、ウィジェットの build(context) メソッド引数を表します。
コンテキスト内部には、このウィジェットが末端となるツリーを持っています。
基本的な
ページ InheritedWidget クラス と
アプリ InheritedWidget クラス と
役割ごとの ロジッククラス を作る
 ページ や アプリ InheritedWidget は、特
別なクラスではないので基本構造は、通常
InheritedWidget と変わりません。
● InheritedWidget を継承
● updateShouldNotify() をオーバライド
一般的にtrue を返して更新があったら
再構築させる。
● context から自分型のインスタンスを返
す static 関数の of を提供する。
● 必要な ロジックオブジェクト を返すプロ
パティやメソッドを提供する。
SamplePageInheritedWidgetは一般例です。
カウンタアプリの
状態とメソッドの
ロジッククラス化例
BuildContext#inheritFromWidgetOfExactType(Type targetType)
● このメソッドは、
ツリー内をさかのぼり最も近かった、targetType で指定された InheritedWidget 型
のオブジェクトへの参照を返すメソッドです。
● 探索目的と異なるオブジェクトであっても、
直近にあった指定型のオブジェクトが返ることに注意ください。
● リファレンス
https://docs.flutter.io/flutter/widgets/BuildContext/inheritFromWidgetOfExactType.html
ページ InheritedWidget クラスは、ページごとに作成
● 後段の アプリ InheretedWidget でのアクセス元ページの判断を簡素化するた
め、ページ InheritedWidget クラスは、ページごとに作成してください。
● 役割ごとの ロジッククラス は、一般的なビジネスロジックのクラスなので任意に作
成してください。
ページ InheritedWidget に
ページ単位のスコープをもたせる。
ページ単位のスコープをもたせる
● ページ InheritedWidget が、MyHomePage のようなページ表示を作る、画面作
成ウィジェットの build(context) メソッド内からアクセスできるよう、child プロパティ
に画面作成ウィジェットを指定して入れ子にする必要があります。
● InheritedWidgetは、画面生成を行わず入れ子になったウィジェットを返すだけなの
で、入れ子にしてもページ表示には影響を与えません。
● MaterialPageRoute にアタッチするため、MaterialApp() や Navigator.push() に
入れ子にした ページ InheritedWidget を渡します。
● ページツリー内では、ページ InheritedWidget を複数使わないでください。 
補足
● MaterialPageRoute
指定ウィジェットをページルートとして遷移を扱うオブジェクト
https://docs.flutter.io/flutter/material/MaterialPageRoute-class.html
● Navigator
MaterialPageRouteを管理するウィジェット
https://docs.flutter.io/flutter/widgets/Navigator-class.html
● MaterialApp
アプリとして必要な処置をプロパティに指定されたウィジェットに行なうウィジェット
https://docs.flutter.io/flutter/material/MaterialApp-class.html
MaterialApp と Navigator.push での入れ子指定
アプリ InheritedWidget に
アプリ全体のスコープをもたせる。
アプリ全体のスコープをもたせる
● アプリ InheritedWidget にどのページからでもアクセスでき
る、アプリ全体でのスコープをもたせるには、child プロパティ
に MaterialApp を生成するアプリ構築ウィジェットを指定して
入れ子にし runApp() 関数に渡します。
● ページは、Navigator の子要素です。
● 上記より ページ同士は、入れ子になっていないので、お互い
の ページ InheritedWidget にアクセスできません。
runApp() での入れ子指定
AppInheritedWidget は、
アプリ全体共有の InheritedWidget
許可されたページからのアクセスなのかチェックする。
許可されたページからのアクセスなのかチェックする
基本的に以下のようなロジックを取ります。
● ページごとに ページ InheritedWidget クラスをユニークにします。
● アクセスチェックごとに、引数に BuildContext をとる static API を作成します。
● アクセスチェックする API 中で
BuildContext#ancestorWidgetOfExactType() で許可されたページの
ページ InheritedWidget 型なのかチェックします。
● アクセスが許可された場合、ロジックオブジェクト を返します。
BuildContext#ancestorWidgetOfExactType(Type targetType):Widget
● ツリー内をさかのぼり、指定型のウィジェットがあれば直近の参照を返します。
● 指定型の継承クラスは、探索対象に含まれません。
● リファレンス
https://docs.flutter.io/flutter/widgets/BuildContext/ancestorWidgetOfExactType.html
パーミッションチェック・コンセプト
許可されたグループからのアクセスなのかチェックする。
許可されたグループからのアクセスなのかチェックする
● ページ側は、グループとしたいページの ページ InheritedWidget を共通のラップ
ウィジェットで更に入れ子にくるみ、MaterialApp() や Navigator.push() で、
MaterialPageRoute にアタッチしてもらいます。
● チェック側は、グループアクセスチェックの API で、
共通のラップウィジェット型が含まれているかをチェックします。
ラップウィジェットは、単純なもので構いません
状態やロジックを共有する
状態やロジックを共有する
● ロジックオブジェクト は、InheritedWidget を介してウィジェットから自由にアクセス
される側なので、ロジッククラス には、ウィジェット内に書いていた状態や内部ロ
ジックを提供するサービスを実装します。
● ウィジェット側は、状態や内部ロジックの代わりに ロジックオブジェクト から必要な
サービスを提供する API を利用するようにします。
● アプリ InheritedWidget は、ページよりも長命なので、次の画面表示で復元して
ほしいスクロール位置の一時保管も手軽に実装できるでしょう。
InheritedWidget で
_counter 状態を外出し
前ページの
ページ InheritedWidget と、
ロジッククラス の実装例です。
課 題
ウィジェットからビジネスロジックを追い出すため、
InheritedWidget でアプリ全体やページ間で
状態や処理関数を共有する
解決案の説明は、以上です。
サンプルソース紹介
カウンタアプリにページ遷移ボタ
ンを追加しただけの
state on page transition では、
戻り画面遷移によりページが破
棄されるのでカウンタ値がクリア
されてしまいます。
State Propagation では、
値がクリアされないように、
InheritedWidget を使って状態や
ロジックを外出ししみました。
ページ遷移の初期サンプルで
は、画面間を遷移(ウィジェット
再生成)するとカウンタ値がク
リアされますが、
完成サンプルでは、
画面間を遷移してもカウンタ値
が保持されます。
またカウンタアプリにあった
_counter 状態と
_incrementCounter() 関数も
全て外出しになりました。
画面表示ウィジェットを、
StatefulWidtet にする必要が
なくなっています。
strategy_of_state_propagation.dart
https://github.com/cch-robo/basic_strategy_of_state_propagation_in_Flutter/blob/master/lib/src/strategy_of_state_propagation.dart
ピンポイントで再描画と再描画抑止をするウィジェット
サンプルでは、
子ウィジェットを任意で再生成する
(可変にする) RebuildableWidget と、
ウィジェットをキャッシュして、
再生成させない(不変にする) ConstantWidget
のカスタムウィジェットを提供しています。
Flutter Widgets 101 視聴のススメ
5〜10分のミニセッション形式ながら
今まで、説明されてこなかった
Flutterでの ツリー構築の効率化が
        紹介されています。
Flutter Widgets 101
https://www.youtube.com/playlist?list=PLOU2XLYxmsIJyiwUPCou_OVTpRIn_8UMd
基本Widgetの紹介の中で
ディープな基礎知識を紹介
初歩的な内容でしたが、
いかがだったでしょうか。
ご清聴、ありがとうございました。

More Related Content

What's hot

第15回JSSUG「Azure SQL Database 超入門」
第15回JSSUG「Azure SQL Database 超入門」第15回JSSUG「Azure SQL Database 超入門」
第15回JSSUG「Azure SQL Database 超入門」裕之 木下
 
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~Tatsuo Kudo
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと心 谷本
 
AWS Black Belt Online Seminar 2016 AWS CloudFormation
AWS Black Belt Online Seminar 2016 AWS CloudFormationAWS Black Belt Online Seminar 2016 AWS CloudFormation
AWS Black Belt Online Seminar 2016 AWS CloudFormationAmazon Web Services Japan
 
クラウドでも非機能要求グレードは必要だよね
クラウドでも非機能要求グレードは必要だよねクラウドでも非機能要求グレードは必要だよね
クラウドでも非機能要求グレードは必要だよねYoshioSawada
 
20200809_2020年から始める Azure Cosmos DB 入門 with Azure Synapse Link recap
20200809_2020年から始める Azure Cosmos DB 入門 with Azure Synapse Link recap20200809_2020年から始める Azure Cosmos DB 入門 with Azure Synapse Link recap
20200809_2020年から始める Azure Cosmos DB 入門 with Azure Synapse Link recapOshitari_kochi
 
OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理Tadashi Miyazato
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来についてshinjiigarashi
 
Web開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor AppWeb開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor AppTomomitsuKusaba
 
office365にまつわる怖い話し
office365にまつわる怖い話しoffice365にまつわる怖い話し
office365にまつわる怖い話しTeruchika Yamada
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビューTakafumi ONAKA
 
Azure Blueprints - 企業で期待される背景と特徴、活用方法
Azure Blueprints - 企業で期待される背景と特徴、活用方法Azure Blueprints - 企業で期待される背景と特徴、活用方法
Azure Blueprints - 企業で期待される背景と特徴、活用方法Toru Makabe
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアルAzure API Management 俺的マニュアル
Azure API Management 俺的マニュアル貴志 上坂
 

What's hot (20)

第15回JSSUG「Azure SQL Database 超入門」
第15回JSSUG「Azure SQL Database 超入門」第15回JSSUG「Azure SQL Database 超入門」
第15回JSSUG「Azure SQL Database 超入門」
 
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
 
AWS Black Belt Online Seminar 2016 AWS CloudFormation
AWS Black Belt Online Seminar 2016 AWS CloudFormationAWS Black Belt Online Seminar 2016 AWS CloudFormation
AWS Black Belt Online Seminar 2016 AWS CloudFormation
 
クラウドでも非機能要求グレードは必要だよね
クラウドでも非機能要求グレードは必要だよねクラウドでも非機能要求グレードは必要だよね
クラウドでも非機能要求グレードは必要だよね
 
20200809_2020年から始める Azure Cosmos DB 入門 with Azure Synapse Link recap
20200809_2020年から始める Azure Cosmos DB 入門 with Azure Synapse Link recap20200809_2020年から始める Azure Cosmos DB 入門 with Azure Synapse Link recap
20200809_2020年から始める Azure Cosmos DB 入門 with Azure Synapse Link recap
 
OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理
 
実践 NestJS
実践 NestJS実践 NestJS
実践 NestJS
 
Keycloak入門
Keycloak入門Keycloak入門
Keycloak入門
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
 
Web開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor AppWeb開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor App
 
office365にまつわる怖い話し
office365にまつわる怖い話しoffice365にまつわる怖い話し
office365にまつわる怖い話し
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
Azure Search 大全
Azure Search 大全Azure Search 大全
Azure Search 大全
 
Confluence と SharePoint 何が違う?
Confluence と SharePoint 何が違う?Confluence と SharePoint 何が違う?
Confluence と SharePoint 何が違う?
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
Azure Blueprints - 企業で期待される背景と特徴、活用方法
Azure Blueprints - 企業で期待される背景と特徴、活用方法Azure Blueprints - 企業で期待される背景と特徴、活用方法
Azure Blueprints - 企業で期待される背景と特徴、活用方法
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアルAzure API Management 俺的マニュアル
Azure API Management 俺的マニュアル
 

Similar to FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略

Flutter_Forward_Extended_Kyoto-Keynote_Summary
Flutter_Forward_Extended_Kyoto-Keynote_SummaryFlutter_Forward_Extended_Kyoto-Keynote_Summary
Flutter_Forward_Extended_Kyoto-Keynote_Summarycch-robo
 
DartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみようDartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみようcch-robo
 
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化Shinnosuke Tokuda
 
第8回 福岡西区勉強会
第8回 福岡西区勉強会第8回 福岡西区勉強会
第8回 福岡西区勉強会Shinya Kinoshita
 
Using the Fragments(Android)
Using the Fragments(Android)Using the Fragments(Android)
Using the Fragments(Android)Teruaki Kinoshita
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-pluginIkuko Kanada
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-pluginFumito Mizuno
 
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-Hiromu Yakura
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こうShinnosuke Tokuda
 
Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Takashi EGAWA
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をAtsuhiro Kubo
 
MetaTweetの現状と展望 v0
MetaTweetの現状と展望 v0MetaTweetの現状と展望 v0
MetaTweetの現状と展望 v0Takeshi Kiriya
 
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 についてNAO/Pepper 開発環境 について
NAO/Pepper 開発環境 についてTakuji Kawata
 
Mixiアプリで体験する Open Social
Mixiアプリで体験する Open SocialMixiアプリで体験する Open Social
Mixiアプリで体験する Open Socialngi group.
 
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込むKazumi IWANAGA
 
2005 07 30_xwj_customizinig
2005 07 30_xwj_customizinig2005 07 30_xwj_customizinig
2005 07 30_xwj_customizinigTom Hayakawa
 
(きっと)あなたにも出来る!Hyperledger Composer でブロックチェーンアプリを動かしてみた
(きっと)あなたにも出来る!Hyperledger Composer でブロックチェーンアプリを動かしてみた(きっと)あなたにも出来る!Hyperledger Composer でブロックチェーンアプリを動かしてみた
(きっと)あなたにも出来る!Hyperledger Composer でブロックチェーンアプリを動かしてみたBMXUG
 

Similar to FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略 (20)

Flutter_Forward_Extended_Kyoto-Keynote_Summary
Flutter_Forward_Extended_Kyoto-Keynote_SummaryFlutter_Forward_Extended_Kyoto-Keynote_Summary
Flutter_Forward_Extended_Kyoto-Keynote_Summary
 
AndroidでDIxAOP
AndroidでDIxAOPAndroidでDIxAOP
AndroidでDIxAOP
 
DartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみようDartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみよう
 
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
 
LogicFlow 概要
LogicFlow 概要LogicFlow 概要
LogicFlow 概要
 
第8回 福岡西区勉強会
第8回 福岡西区勉強会第8回 福岡西区勉強会
第8回 福岡西区勉強会
 
Using the Fragments(Android)
Using the Fragments(Android)Using the Fragments(Android)
Using the Fragments(Android)
 
How To Drink Wsgi
How To Drink WsgiHow To Drink Wsgi
How To Drink Wsgi
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-plugin
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-plugin
 
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こう
 
Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
 
MetaTweetの現状と展望 v0
MetaTweetの現状と展望 v0MetaTweetの現状と展望 v0
MetaTweetの現状と展望 v0
 
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 についてNAO/Pepper 開発環境 について
NAO/Pepper 開発環境 について
 
Mixiアプリで体験する Open Social
Mixiアプリで体験する Open SocialMixiアプリで体験する Open Social
Mixiアプリで体験する Open Social
 
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
 
2005 07 30_xwj_customizinig
2005 07 30_xwj_customizinig2005 07 30_xwj_customizinig
2005 07 30_xwj_customizinig
 
(きっと)あなたにも出来る!Hyperledger Composer でブロックチェーンアプリを動かしてみた
(きっと)あなたにも出来る!Hyperledger Composer でブロックチェーンアプリを動かしてみた(きっと)あなたにも出来る!Hyperledger Composer でブロックチェーンアプリを動かしてみた
(きっと)あなたにも出来る!Hyperledger Composer でブロックチェーンアプリを動かしてみた
 

More from cch-robo

go_router が隠してくれるもの
go_router が隠してくれるものgo_router が隠してくれるもの
go_router が隠してくれるものcch-robo
 
Introduction_on_designing_test_in_flutter
Introduction_on_designing_test_in_flutterIntroduction_on_designing_test_in_flutter
Introduction_on_designing_test_in_fluttercch-robo
 
Google I/O 2021 Flutter 全体報告
Google I/O 2021 Flutter 全体報告Google I/O 2021 Flutter 全体報告
Google I/O 2021 Flutter 全体報告cch-robo
 
Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門cch-robo
 
フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察cch-robo
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんかcch-robo
 
Dart言語の進化状況
Dart言語の進化状況Dart言語の進化状況
Dart言語の進化状況cch-robo
 
明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門cch-robo
 
Dartでサーバレスサービス
DartでサーバレスサービスDartでサーバレスサービス
Dartでサーバレスサービスcch-robo
 
Pin-point rebuildable and non-rebuild custom widget
Pin-point rebuildable and non-rebuild custom widgetPin-point rebuildable and non-rebuild custom widget
Pin-point rebuildable and non-rebuild custom widgetcch-robo
 
Before lunch オプションを使って Flutterでstaging/release環境を切り替える
Before lunch オプションを使って Flutterでstaging/release環境を切り替えるBefore lunch オプションを使って Flutterでstaging/release環境を切り替える
Before lunch オプションを使って Flutterでstaging/release環境を切り替えるcch-robo
 
Flutter のリアクティブ戦略 set state 〜 redux まで
Flutter のリアクティブ戦略 set state 〜 redux までFlutter のリアクティブ戦略 set state 〜 redux まで
Flutter のリアクティブ戦略 set state 〜 redux までcch-robo
 
Android lint-srp-practice
Android lint-srp-practiceAndroid lint-srp-practice
Android lint-srp-practicecch-robo
 
Loose and fluffy_ddd_intro
Loose and fluffy_ddd_introLoose and fluffy_ddd_intro
Loose and fluffy_ddd_introcch-robo
 
Firebase Test Lab 無料枠を使ってみました。
Firebase Test Lab 無料枠を使ってみました。Firebase Test Lab 無料枠を使ってみました。
Firebase Test Lab 無料枠を使ってみました。cch-robo
 
ZTE OPEN を日本語化(バージョンアップ)してみる
ZTE OPEN を日本語化(バージョンアップ)してみるZTE OPEN を日本語化(バージョンアップ)してみる
ZTE OPEN を日本語化(バージョンアップ)してみるcch-robo
 
FirefoxOSで学ぶJavaScript作法
FirefoxOSで学ぶJavaScript作法FirefoxOSで学ぶJavaScript作法
FirefoxOSで学ぶJavaScript作法cch-robo
 

More from cch-robo (17)

go_router が隠してくれるもの
go_router が隠してくれるものgo_router が隠してくれるもの
go_router が隠してくれるもの
 
Introduction_on_designing_test_in_flutter
Introduction_on_designing_test_in_flutterIntroduction_on_designing_test_in_flutter
Introduction_on_designing_test_in_flutter
 
Google I/O 2021 Flutter 全体報告
Google I/O 2021 Flutter 全体報告Google I/O 2021 Flutter 全体報告
Google I/O 2021 Flutter 全体報告
 
Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門
 
フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんか
 
Dart言語の進化状況
Dart言語の進化状況Dart言語の進化状況
Dart言語の進化状況
 
明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門
 
Dartでサーバレスサービス
DartでサーバレスサービスDartでサーバレスサービス
Dartでサーバレスサービス
 
Pin-point rebuildable and non-rebuild custom widget
Pin-point rebuildable and non-rebuild custom widgetPin-point rebuildable and non-rebuild custom widget
Pin-point rebuildable and non-rebuild custom widget
 
Before lunch オプションを使って Flutterでstaging/release環境を切り替える
Before lunch オプションを使って Flutterでstaging/release環境を切り替えるBefore lunch オプションを使って Flutterでstaging/release環境を切り替える
Before lunch オプションを使って Flutterでstaging/release環境を切り替える
 
Flutter のリアクティブ戦略 set state 〜 redux まで
Flutter のリアクティブ戦略 set state 〜 redux までFlutter のリアクティブ戦略 set state 〜 redux まで
Flutter のリアクティブ戦略 set state 〜 redux まで
 
Android lint-srp-practice
Android lint-srp-practiceAndroid lint-srp-practice
Android lint-srp-practice
 
Loose and fluffy_ddd_intro
Loose and fluffy_ddd_introLoose and fluffy_ddd_intro
Loose and fluffy_ddd_intro
 
Firebase Test Lab 無料枠を使ってみました。
Firebase Test Lab 無料枠を使ってみました。Firebase Test Lab 無料枠を使ってみました。
Firebase Test Lab 無料枠を使ってみました。
 
ZTE OPEN を日本語化(バージョンアップ)してみる
ZTE OPEN を日本語化(バージョンアップ)してみるZTE OPEN を日本語化(バージョンアップ)してみる
ZTE OPEN を日本語化(バージョンアップ)してみる
 
FirefoxOSで学ぶJavaScript作法
FirefoxOSで学ぶJavaScript作法FirefoxOSで学ぶJavaScript作法
FirefoxOSで学ぶJavaScript作法
 

Recently uploaded

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 

Recently uploaded (11)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略