SlideShare a Scribd company logo
FlutterでScrollViewとExpandedを併用し
てSignIn / SignUp画面 などの
レイアウトを作成する
Mobile Act Online #6
2021/10/15 Hironobu Iga
自己紹介
Hironobu Iga
Software Engineer
Twitter @iganin_dev
アジェンダ
● 想定するケースと挙動
● 発生する問題
● 対処法1と問題 - ScaffoldのresizeToAvoidBottomInset
● 対処法2と問題 - SingleChildScrollView
● 対処法3 - IntrinsicHeight
アジェンダ
● 想定するケースと挙動
● 発生する問題
● 対処法1と問題 - ScaffoldのresizeToAvoidBottomInset
● 対処法2と問題 - SingleChildScrollView
● 対処法3 - IntrinsicHeight
想定するケース
SignIn画面やSignUp画面でよくある画面構成
● 大きめのロゴ or 画像
● 入力フォーム
○ メールアドレス
○ パスワード
○ etc (画面要件で変動)
● 余白
● 画面下部固定のボタン
想定するケース
Scaffold(
body: Column(
children: [
Logo(), TextField(), TextField(), Spacer(), Button(),
]
)
);
想定するケースの挙動
TextFieldにフォーカスが当たると、
キーボードが表示され、
Scaffoldのbody内部のWidgetがその分圧縮される
余白が十分にあれば問題はない
アジェンダ
● 想定するケースと挙動
● 発生する問題
● 対処法1と問題 - ScaffoldのresizeToAvoidBottomInset
● 対処法2と問題 - SingleChildScrollView
● 対処法3 - IntrinsicHeight
発生する問題
余白が十分にないとキーボード分圧縮されたことで、
各Widgetを配置するために必要なスペースが確保できず、
画面表示が崩れる
※Releaseビルドであれば、黄色の帯のような表示はないが、
レイアウトが崩れてしまう
アジェンダ
● 想定するケースと挙動
● 発生する問題
● 対処法1と問題 - ScaffoldのresizeToAvoidBottomInset
● 対処法2と問題 - SingleChildScrollView
● 対処法3 - IntrinsicHeight
対処法1と問題 - ScaffoldのresizeToAvoidBottomInset
resizeToAvoidBottomInset
Scaffoldの設定値で、 true だとキーボードとScaffoldのbodyの
中身が被らないようにbodyの中身の高さを調整してくれる
デフォルトはtrue
対処法1と問題 - ScaffoldのresizeToAvoidBottomInset
Scaffold {
resizeToAvoidBottomInset: false,
body: ...
}
ScaffoldのresizeToAvoidBottomInsetをfalse
にすることでひとまずの対処は可能
対処法1と問題 - ScaffoldのresizeToAvoidBottomInset
問題も発生する
キーボードがbodyに被さってしまうことで、
TextFieldが見えなくなるようなことがある
入力値を確認できずUXを損なう
アジェンダ
● 想定するケースと挙動
● 発生する問題
● 対処法1と問題 - ScaffoldのresizeToAvoidBottomInset
● 対処法2と問題 - SingleChildScrollView
● 対処法3 - IntrinsicHeight
対処法2と問題 - SingleChildScrollView
SingleChildScrollView(
child: Column(
children: [...]
)
)
検索するとよく出てくる
ScrollViewないでキーボードの高さ分を調整してく
れる
多くの場合、この方法で問題ない
ただし、Columnのchildrenに
SpacerやExpandedなどを含むと
レイアウトが崩れる
対処法2と問題 - SingleChildScrollView
RenderBox was not laid out:
RenderRepaintBoundary#f85cc
relayoutBoundary=up1 NEEDS-PAINT
'package:flutter/src/rendering/box.dart':
Failed assertion: line 1930 pos 12:
'hasSize'
例えば左のような例外が発生する
SpacerやExpandedは可能な限りスペースを取ろう
とする
SingleChildScrollViewは内部の高さから全体の高
さを決める
したがって、高さが不定となりレイアウトが崩れる
対処法2と問題 - SingleChildScrollView
今回のレイアウトは画面下部にボタンを固定したい
Spacerなどで余白を埋めたいため、
SingleChildScrollViewによる方法は使用できない
アジェンダ
● 想定するケースと挙動
● 発生する問題
● 対処法1と問題 - ScaffoldのresizeToAvoidBottomInset
● 対処法2と問題 - SingleChildScrollView
● 対処法3 - IntrinsicHeight
対処法3 - IntrinsicHeight
実は今回のケースに対する対応法は公式ドキュメントに書かれている
Simply doing so, however, usually results in a conflict between the Column,
which typically tries to grow as big as it can, and the SingleChildScrollView,
which provides its children with an infinite amount of space.To resolve this
apparent conflict, there are a couple of techniques, as discussed below.
https://api.flutter.dev/flutter/widgets/SingleChildScrollView-class.html
対処法3 - IntrinsicHeight
簡単な要約
ColumnにExpandedなどが含まれると可能な限りのスペースを取得しようとする。
ScrollViewはChildに無限のSpaceを与える。
したがって、Conflictが起きるが以下の方法で解決できる。
対処法3 - IntrinsicHeight
方法
● LayoutBuilder
● IntrinsicHeight
を併用する
対処法3 - IntrinsicHeight
LayoutBuilder(
builder: (BuildContext context, BoxConstraints viewportConstraints) {
return Widget();
}
)
親Widgetでとりうる最大の高さなどをconstraintsとして取得できる
対処法3 - IntrinsicHeight
IntrinsicHeight
Childに含んだColumnの高さを
Columnが含むchildrenの高さの合計値と同じにする
※Spacerなどによる余白を埋めるような高さは考慮されない
対処法3 - IntrinsicHeight 実装(主要部分のみ)
LayoutBuilder(
builder: (context, constraints) {
return SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints(minHeight: constraints.maxHeight),
child: IntrinsicHeight(....),
…... minHeightを親WidgetのmaxHeightに指定する
IntrinsicHeightのchildの高さが親Viewより小さい場
合でも内部の要素が親 View一杯に広がる
対処法3 - IntrinsicHeight 実装(主要部分のみ)
LayoutBuilder(
builder: (context, constraints) {
return SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints(minHeight: constraints.maxHeight),
child: IntrinsicHeight(....),
…... IntrinsicHeightを使用することで、
ScrollView内の高さが無限大になることを防ぐ
対処法3 - IntrinsicHeight 実装(主要部分のみ)
LayoutBuilder(
builder: (context, constraints) {
return SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints(minHeight: constraints.maxHeight),
child: IntrinsicHeight(....),
…...
SingleChildScrollViewを使用することでキーボードの
問題に対処する
また、IntrinsicHeightの中身の高さが親Widgetより高
くなった場合のレイアウト崩れを防止
対処法3 - IntrinsicHeight
SingleChildScrollViewの内部で、LayoutBuilderと
ConstrainedBoxを使用し、minHeightを親Widgetの高さと
する
IntrinsicHeightを使用し、SpacerやExpandedがScrollView
の高さを無限大にしてしまうことを防ぐ
キーボード表示による画面レイアウト調整に対処しながら、
当初目的としていたレイアウトの作成を達成できた
対処法3 - IntrinsicHeight 注意点
IntrinsicHeightは計算コストが高い 最悪 O(N^2)
This class is relatively expensive, because it adds a speculative layout pass
before the final layout phase. Avoid using it where possible. In the worst
case, this widget can result in a layout that is O(N²) in the depth of the tree.
複雑なレイアウト構成ではできれば避けたい
References
● 公式ドキュメント
○ https://api.flutter.dev/flutter/widgets/SingleChildScrollView-class.html
● GitHub Issue
○ https://github.com/flutter/flutter/issues/18711
● 以前書いたブログ記事
○ https://iganin.hatenablog.com/entry/2021/09/04/152752

More Related Content

What's hot

Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こう
Shinnosuke Tokuda
 
FlutterでGraphQLを扱う
FlutterでGraphQLを扱うFlutterでGraphQLを扱う
FlutterでGraphQLを扱う
IgaHironobu
 
fetch APIを安全に使う方法をおさらいしてみよう
fetch APIを安全に使う方法をおさらいしてみようfetch APIを安全に使う方法をおさらいしてみよう
fetch APIを安全に使う方法をおさらいしてみよう
iPride Co., Ltd.
 
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web ServiceアプリケーションAngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
ssuser070fa9
 
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話
NipponAlgorithm
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
 
スケジュール遅延が当たり前な状況を少し良くしたいチームがその未来のためにScrumに”再”挑戦した話
スケジュール遅延が当たり前な状況を少し良くしたいチームがその未来のためにScrumに”再”挑戦した話スケジュール遅延が当たり前な状況を少し良くしたいチームがその未来のためにScrumに”再”挑戦した話
スケジュール遅延が当たり前な状況を少し良くしたいチームがその未来のためにScrumに”再”挑戦した話
Rakuten Commerce Tech (Rakuten Group, Inc.)
 
Sharding with sql alchemy
Sharding with sql alchemySharding with sql alchemy
Sharding with sql alchemy
Akira Matsuzaki
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
 
今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス
Hidenori Ishii
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
Jun-ichi Sakamoto
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
 
AOA2.0を実装してみた
AOA2.0を実装してみたAOA2.0を実装してみた
AOA2.0を実装してみた
Yuuichi Akagawa
 
Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報
Takuya Iwatsuka
 
Git을 조금 더 알아보자!
Git을 조금 더 알아보자!Git을 조금 더 알아보자!
Git을 조금 더 알아보자!
Young Kim
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java
増田 亨
 

What's hot (20)

Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こう
 
FlutterでGraphQLを扱う
FlutterでGraphQLを扱うFlutterでGraphQLを扱う
FlutterでGraphQLを扱う
 
fetch APIを安全に使う方法をおさらいしてみよう
fetch APIを安全に使う方法をおさらいしてみようfetch APIを安全に使う方法をおさらいしてみよう
fetch APIを安全に使う方法をおさらいしてみよう
 
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web ServiceアプリケーションAngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
 
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
スケジュール遅延が当たり前な状況を少し良くしたいチームがその未来のためにScrumに”再”挑戦した話
スケジュール遅延が当たり前な状況を少し良くしたいチームがその未来のためにScrumに”再”挑戦した話スケジュール遅延が当たり前な状況を少し良くしたいチームがその未来のためにScrumに”再”挑戦した話
スケジュール遅延が当たり前な状況を少し良くしたいチームがその未来のためにScrumに”再”挑戦した話
 
Sharding with sql alchemy
Sharding with sql alchemySharding with sql alchemy
Sharding with sql alchemy
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
AOA2.0を実装してみた
AOA2.0を実装してみたAOA2.0を実装してみた
AOA2.0を実装してみた
 
Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報
 
Git을 조금 더 알아보자!
Git을 조금 더 알아보자!Git을 조금 더 알아보자!
Git을 조금 더 알아보자!
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java
 

Similar to Flutterでscroll viewとexpandedを併用してsign in sign up画面 などの レイアウトを作成する

Beginning iPhone Vol2
Beginning iPhone Vol2Beginning iPhone Vol2
Beginning iPhone Vol2
Sachiko Kajishima
 
I phoneアプリ入門 第3回
I phoneアプリ入門 第3回I phoneアプリ入門 第3回
I phoneアプリ入門 第3回
Sachiko Kajishima
 
アプリリリース後に後悔しないための20のこと
アプリリリース後に後悔しないための20のことアプリリリース後に後悔しないための20のこと
アプリリリース後に後悔しないための20のこと
leverages_event
 
Try_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hackTry_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hack
kimukou_26 Kimukou
 
UI設計におけるスマートフォン対応のまとめ
UI設計におけるスマートフォン対応のまとめUI設計におけるスマートフォン対応のまとめ
UI設計におけるスマートフォン対応のまとめ
Tomoki Imatomi
 
Unity appC cloudを使ってゲームアプリに課金機能を入れよう。
Unity appC cloudを使ってゲームアプリに課金機能を入れよう。Unity appC cloudを使ってゲームアプリに課金機能を入れよう。
Unity appC cloudを使ってゲームアプリに課金機能を入れよう。
caytosales
 
Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010
Takashi EGAWA
 
Android sdk manual_1.02
Android sdk manual_1.02Android sdk manual_1.02
Android sdk manual_1.02Tomohiro Kondo
 
Android sdk manual_1.02
Android sdk manual_1.02Android sdk manual_1.02
Android sdk manual_1.02Tomohiro Kondo
 
DevIO Auto Layout 道場スライド
DevIO Auto Layout 道場スライドDevIO Auto Layout 道場スライド
DevIO Auto Layout 道場スライド
kakegawa-atsushi
 
タブブラウザSDKを作った話 #yjcamp
タブブラウザSDKを作った話 #yjcampタブブラウザSDKを作った話 #yjcamp
タブブラウザSDKを作った話 #yjcamp
Yahoo!デベロッパーネットワーク
 
【改訂版】Unity入門 初心者でもできるスマホアプリ課金ゲーム作り
【改訂版】Unity入門 初心者でもできるスマホアプリ課金ゲーム作り【改訂版】Unity入門 初心者でもできるスマホアプリ課金ゲーム作り
【改訂版】Unity入門 初心者でもできるスマホアプリ課金ゲーム作り
caytosales
 
Unity入門 初心者でもできるスマホアプリ課金ゲーム作り
Unity入門 初心者でもできるスマホアプリ課金ゲーム作りUnity入門 初心者でもできるスマホアプリ課金ゲーム作り
Unity入門 初心者でもできるスマホアプリ課金ゲーム作り
caytosales
 
03 piggyback -by-simple-code-public
03 piggyback -by-simple-code-public03 piggyback -by-simple-code-public
03 piggyback -by-simple-code-public
Smz Nbys
 
株式会社インタースペース 清水様 登壇資料
株式会社インタースペース 清水様 登壇資料株式会社インタースペース 清水様 登壇資料
株式会社インタースペース 清水様 登壇資料
leverages_event
 
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324Tak Inamori
 
Titanium もくもく会第6回 Kii Cloud と TiGPUImageView
Titanium もくもく会第6回 Kii Cloud と TiGPUImageViewTitanium もくもく会第6回 Kii Cloud と TiGPUImageView
Titanium もくもく会第6回 Kii Cloud と TiGPUImageView
濱田 章吾
 
オープンソースカンファレンス osc 2014 関西@京都 ownCloud性能検証
オープンソースカンファレンス osc 2014 関西@京都 ownCloud性能検証オープンソースカンファレンス osc 2014 関西@京都 ownCloud性能検証
オープンソースカンファレンス osc 2014 関西@京都 ownCloud性能検証
Tetsurou Yano
 
UniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for UnityUniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for Unity
Yoshifumi Kawai
 
スマートフォンブラウザ不具合特集
スマートフォンブラウザ不具合特集スマートフォンブラウザ不具合特集
スマートフォンブラウザ不具合特集
Hiroaki Wakamatsu
 

Similar to Flutterでscroll viewとexpandedを併用してsign in sign up画面 などの レイアウトを作成する (20)

Beginning iPhone Vol2
Beginning iPhone Vol2Beginning iPhone Vol2
Beginning iPhone Vol2
 
I phoneアプリ入門 第3回
I phoneアプリ入門 第3回I phoneアプリ入門 第3回
I phoneアプリ入門 第3回
 
アプリリリース後に後悔しないための20のこと
アプリリリース後に後悔しないための20のことアプリリリース後に後悔しないための20のこと
アプリリリース後に後悔しないための20のこと
 
Try_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hackTry_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hack
 
UI設計におけるスマートフォン対応のまとめ
UI設計におけるスマートフォン対応のまとめUI設計におけるスマートフォン対応のまとめ
UI設計におけるスマートフォン対応のまとめ
 
Unity appC cloudを使ってゲームアプリに課金機能を入れよう。
Unity appC cloudを使ってゲームアプリに課金機能を入れよう。Unity appC cloudを使ってゲームアプリに課金機能を入れよう。
Unity appC cloudを使ってゲームアプリに課金機能を入れよう。
 
Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010
 
Android sdk manual_1.02
Android sdk manual_1.02Android sdk manual_1.02
Android sdk manual_1.02
 
Android sdk manual_1.02
Android sdk manual_1.02Android sdk manual_1.02
Android sdk manual_1.02
 
DevIO Auto Layout 道場スライド
DevIO Auto Layout 道場スライドDevIO Auto Layout 道場スライド
DevIO Auto Layout 道場スライド
 
タブブラウザSDKを作った話 #yjcamp
タブブラウザSDKを作った話 #yjcampタブブラウザSDKを作った話 #yjcamp
タブブラウザSDKを作った話 #yjcamp
 
【改訂版】Unity入門 初心者でもできるスマホアプリ課金ゲーム作り
【改訂版】Unity入門 初心者でもできるスマホアプリ課金ゲーム作り【改訂版】Unity入門 初心者でもできるスマホアプリ課金ゲーム作り
【改訂版】Unity入門 初心者でもできるスマホアプリ課金ゲーム作り
 
Unity入門 初心者でもできるスマホアプリ課金ゲーム作り
Unity入門 初心者でもできるスマホアプリ課金ゲーム作りUnity入門 初心者でもできるスマホアプリ課金ゲーム作り
Unity入門 初心者でもできるスマホアプリ課金ゲーム作り
 
03 piggyback -by-simple-code-public
03 piggyback -by-simple-code-public03 piggyback -by-simple-code-public
03 piggyback -by-simple-code-public
 
株式会社インタースペース 清水様 登壇資料
株式会社インタースペース 清水様 登壇資料株式会社インタースペース 清水様 登壇資料
株式会社インタースペース 清水様 登壇資料
 
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324
 
Titanium もくもく会第6回 Kii Cloud と TiGPUImageView
Titanium もくもく会第6回 Kii Cloud と TiGPUImageViewTitanium もくもく会第6回 Kii Cloud と TiGPUImageView
Titanium もくもく会第6回 Kii Cloud と TiGPUImageView
 
オープンソースカンファレンス osc 2014 関西@京都 ownCloud性能検証
オープンソースカンファレンス osc 2014 関西@京都 ownCloud性能検証オープンソースカンファレンス osc 2014 関西@京都 ownCloud性能検証
オープンソースカンファレンス osc 2014 関西@京都 ownCloud性能検証
 
UniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for UnityUniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for Unity
 
スマートフォンブラウザ不具合特集
スマートフォンブラウザ不具合特集スマートフォンブラウザ不具合特集
スマートフォンブラウザ不具合特集
 

Flutterでscroll viewとexpandedを併用してsign in sign up画面 などの レイアウトを作成する