Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
[ABCD2021Winter]Flutterアプリ開発実践
Search
Kenichi Kambara
December 11, 2021
Technology
2
280
[ABCD2021Winter]Flutterアプリ開発実践
ABCD 2021 Winterの「Flutterアプリ開発実践」のセッション資料です。
#abcd2021w #androidjp #flutterjp
Kenichi Kambara
December 11, 2021
Tweet
Share
More Decks by Kenichi Kambara
See All by Kenichi Kambara
[爆速開発LT #2] Codex-Powered Mobile Apps Development - Deep Dive Edition -
korodroid
0
41
[DevFest Singapore] Getting Started with Mobile Development Using Generative AI
korodroid
0
51
[FlutterAlliance]Designing Borderless UX in Flutter: Insights from 50 Countries
korodroid
0
24
[Codex Meetup Japan #1] Codex-Powered Mobile Apps Development
korodroid
2
1.4k
[AgentConHelsinki2025]From Assistant to Agent: How Developer Agents Reshape Mobile Workflows
korodroid
0
23
[FlutterTokyo#10]In-App Language Switching in Flutter
korodroid
0
34
[potatotips #92]Integrating Quick Settings Tiles into Your Android App
korodroid
1
170
[ABC2025Spring]Code Less, Build More: A Practical Guide to Mobile Apps with Generative AI
korodroid
0
230
[DevTalksRomania]Building Augmented Reality Experiences with Flutter and AI-Powered Development
korodroid
0
38
Other Decks in Technology
See All in Technology
~Everything as Codeを諦めない~ 後からCDK
mu7889yoon
3
460
外部キー制約の知っておいて欲しいこと - RDBMSを正しく使うために必要なこと / FOREIGN KEY Night
soudai
PRO
12
5.6k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
13k
レガシー共有バッチ基盤への挑戦 - SREドリブンなリアーキテクチャリングの取り組み
tatsukoni
0
220
Greatest Disaster Hits in Web Performance
guaca
0
280
20260204_Midosuji_Tech
takuyay0ne
1
160
AIと新時代を切り拓く。これからのSREとメルカリIBISの挑戦
0gm
2
3k
Bedrock PolicyでAmazon Bedrock Guardrails利用を強制してみた
yuu551
0
260
茨城の思い出を振り返る ~CDKのセキュリティを添えて~ / 20260201 Mitsutoshi Matsuo
shift_evolve
PRO
1
360
CDKで始めるTypeScript開発のススメ
tsukuboshi
1
510
SREじゃなかった僕らがenablingを通じて「SRE実践者」になるまでのリアル / SRE Kaigi 2026
aeonpeople
6
2.5k
Featured
See All Featured
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
67
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.2k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
450
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.1k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.6k
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
110
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.2k
How GitHub (no longer) Works
holman
316
140k
Claude Code のすすめ
schroneko
67
210k
Thoughts on Productivity
jonyablonski
74
5k
Transcript
2021.12.11 ਆݪ ݈Ұ (@korodroid) FlutterΞϓϦ։ൃ࣮ફ
About me •Mobile App Development •Speeches (e.g. 9 International confs.)
•Writings (e.g. 6 Dev Books) •[Of fi cial] Evangelist at NTT TechnoCross •[Private] iplatform.org ਆݪɹ݈Ұ (@korodroid)
About my product (Private works) Sekaiphone(Kotlin/Swift+Firebase) MyToDo(Flutter+Firebase)
•ԡ͓͖͍͑ͯͨ͞Tips •࣮ફςΫχοΫ Agenda
ԡ͓͖͍͑ͯͨ͞Tips
Tips 1. ϥΠϒςϯϓϨʔτͷ׆༻
Tips 1. ϥΠϒςϯϓϨʔτͷ׆༻ class MainPage extends StatelessWidget { @override Widget
build(BuildContext context) { return Container(); } } //Before: ΟδΣοτΛશͯखॻ͖ //After: stless/stful/stanim+[Tab]Ωʔ
ΑΓଟ͘ͷςϯϓϨʔτ Tips 1. ϥΠϒςϯϓϨʔτͷ׆༻
Tips 1. ϥΠϒςϯϓϨʔτͷ׆༻ සग़͢ΔίʔυɺࣗલςϯϓϨʔτԽ͓͢͢Ί
Tips 2. ίʔυΞγετػೳͷ׆༻
Widgetͷબ& ALT+ENTER Tips 2. ίʔυΞγετػೳͷ׆༻
Tips 3. FlutterGenͷ׆༻ ΞηοτɾϑΥϯτɾΧϥʔͷཧࢧԉ // Before class MainPage extends StatelessWidget
{ @override Widget build(BuildContext context) { return Image.asset("assets/images/chara1.png"); } } // After ref. FlutterGen: https://github.com/FlutterGen/ fl utter_gen
࣮ફςΫχοΫ
Android: Kotlin, iOS: Swift Android/iOS:Flutter എܠ. FlutterͷҠߦ
ૺ۰ͨ͠ͱରࡦ 1. ෳࡶͳUI 2. ঢ়ଶཧ 3. ϥϯλΠϜύʔϛογϣϯ
1. ෳࡶͳUI Ͳ͏࣮ͬͯݱ͢Δʁ •Step1. ը૾ͷՃ •Step2. ը૾ͷॏͶ߹Θͤ •Step3. Ґஔ߹Θͤ
Ϧιʔε … 100 images
Step1. ը૾ͷՃ(with FlutterGen) flutter: assets: - assets/images/imgKokkiLeftl.png # - assets/images/
pubspec.yaml
Step2. ը૾ͷॏͶ߹Θͤ (How?) ref. Stack: https://api. fl utter.dev/ fl utter/widgets/Stack-class.html
+ +
Widget _getKokkiImage() { return Stack( children: [ Assets.images.kokkiEn.image( height: 80.0,
), Assets.images.imgKokkiLeftl.image( height: 80.0, ), Assets.images.imgSpeak.image( height: 24, ), ], ); ref. Stack: https://api. fl utter.dev/ fl utter/widgets/Stack-class.html Step2. ը૾ͷॏͶ߹Θͤ
Step3. Ґஔ߹Θͤ //Before Widget _getKokkiImage() { return Stack( children: [
Assets.images.kokkiEn.image( height: 80.0, ), Assets.images.imgKokkiLeftl.image( height: 80.0, ), Assets.images.imgSpeak.image( height: 24, ), ], );
Step3. Ґஔ߹Θͤ (How?) ref. Positioned: https://api. fl utter.dev/ fl utter/widgets/Positioned-class.html
// After Widget _getKokkiImage() { return Stack( children: [ Assets.images.kokkiEn.image(
height: 80.0, ), Assets.images.imgKokkiLeftl.image( height: 80.0, ), Positioned( left: 4.0, top: 60.0, child: Assets.images.imgSpeak.image( height: 24, ), ), ), ], ); } Step3. ϨΠΞτˍҐஔ߹Θͤ
2. ঢ়ଶཧ ͚ͩ͜͜ߋ৽
2. ঢ়ଶཧ •StatefulWidget •Provider (InheritedWidget) •Riverpod •Bloc •GetX •…
ಛΛཧղͯࣗ͠ͷߟ͑Ͱબ͢Δ͜ͱ͕େ
2. ঢ়ଶཧ •StatefulWidget •Provider (InheritedWidget) •Riverpod •Bloc •GetX •…
ಛΛཧղͯࣗ͠ͷߟ͑Ͱબ͢Δ͜ͱ͕େ
ྫ. GetXΛ༻͍ͨঢ়ଶཧ ൺֱతγϯϓϧʹར༻Մೳ // Before Text(‘Χϯλʔ’), Text("$count"), // After
class MainController extends GetxController { var count = 0.obs; increment() => count++; } [View]main_view.dart [Controller]main_contoroller.dart // After final MainController c = Get.put(MainController()); Text(‘Χϯλʔ’), Obx(() => Text(“${c.count}”)),
GetXͷศརػೳ ͦͷଞʹଟ͘ͷศརػೳ Get.to(NextScreen()); Get.toNamed(‘/details'); Get.back(); ը໘ભҠ(ൈਮ) Get.snackbar('͓Βͤ', ‘৽ணΫʔϙϯ͕͋Γ·͢ɻ'); Get.defaultDialog(
title: "֬ೝ", content: Text("ࠓ͙͢ɺϢʔβొ͠·͔͢ʁ"), confirm: TextButton( child: Text("Ok"), onPressed: () => print("OK࣌ͷॲཧ"), )); ϢʔςΟϦςΟ(ൈਮ) ※↑Ҏ֎ʹ͞·͟·ͳػೳ͕ఏڙ͞Ε͍ͯ·͢ɻ
3. ϥϯλΠϜύʔϛογϣϯ
ंྠͷ࠶ൃ໌ͷલʹ https://pub.dev/
My choice: permission_handler ϥΠϒϥϦͷՃ ϥΠϒϥϦͷΠϯϙʔτ
ྫ. ϥϯλΠϜύʔϛογϣϯͷར༻ཁٻ // ϚΠΫػೳͷར༻ύʔϛογϣϯͷཁٻ var status = await Permission.microphone.request(); औಘͰ͖Δ݁Ռͷྫ
- Granted - Denied - PermanentlyDenied - Restricted
Conclusion •Tipsˍ࣮ફςΫχοΫΛ׆༻ͯ͠ޮతͳ։ൃΛʂ •ࣗͨͪͷϕλʔϓϥΫςΟεΛฤΈग़͢ͷ͕͓͢͢Ίʂ •FlutterͷੈքΓ্͍͖͛ͯ·͠ΐ͏🏃 ref.1 : Twitter @korodroid ref.2
: Speaker Deck https://speakerdeck.com/korodroid/
Please let me know if you have any requests
such as technical speeches, technical writings and so on. Facebook:http://fb.com/kanbara.kenichi Twitter:@korodroid LinkedIn:http://www.linkedin.com/in/korodroid Thank you so much