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
270
[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
[FlutterTokyo#10]In-App Language Switching in Flutter
korodroid
0
21
[potatotips #92]Integrating Quick Settings Tiles into Your Android App
korodroid
1
130
[ABC2025Spring]Code Less, Build More: A Practical Guide to Mobile Apps with Generative AI
korodroid
0
200
[DevTalksRomania]Building Augmented Reality Experiences with Flutter and AI-Powered Development
korodroid
0
15
[FlutterNinjas]Adapting Flutter App UX for Users Across the World
korodroid
0
49
[FlutterTokyo#6]Navigating Flutter Upgrades
korodroid
0
68
[DevFestTokyo]Accelerating Flutter App Development Using Generative AI
korodroid
2
900
[DevFestMilano]Enhancing Flutter Apps UX for Global Users
korodroid
0
48
[mobile #15]UX Improvements on Flutter Apps Part 5
korodroid
0
61
Other Decks in Technology
See All in Technology
250905 大吉祥寺.pm 2025 前夜祭 「プログラミングに出会って20年、『今』が1番楽しい」
msykd
PRO
1
980
20250913_JAWS_sysad_kobe
takuyay0ne
2
240
CDK CLIで使ってたあの機能、CDK Toolkit Libraryではどうやるの?
smt7174
4
190
Rustから学ぶ 非同期処理の仕組み
skanehira
1
150
機械学習を扱うプラットフォーム開発と運用事例
lycorptech_jp
PRO
0
560
Automating Web Accessibility Testing with AI Agents
maminami373
0
1.3k
データ分析エージェント Socrates の育て方
na0
5
600
DDD集約とサービスコンテキスト境界との関係性
pandayumi
3
290
AIエージェント開発用SDKとローカルLLMをLINE Botと組み合わせてみた / LINEを使ったLT大会 #14
you
PRO
0
130
要件定義・デザインフェーズでもAIを活用して、コミュニケーションの密度を高める
kazukihayase
0
120
RSCの時代にReactとフレームワークの境界を探る
uhyo
10
3.5k
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
2
580
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Become a Pro
speakerdeck
PRO
29
5.5k
Scaling GitHub
holman
463
140k
We Have a Design System, Now What?
morganepeng
53
7.8k
Into the Great Unknown - MozCon
thekraken
40
2k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Producing Creativity
orderedlist
PRO
347
40k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.8k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.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