Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
アクセシビリティ、まだ完璧じゃないけど ── “今から”できること
Search
Kuno Ayana
November 13, 2025
1.5k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
アクセシビリティ、まだ完璧じゃないけど ── “今から”できること
FlutterKaigi 2025
Kuno Ayana
November 13, 2025
More Decks by Kuno Ayana
See All by Kuno Ayana
ぬるぬる動かせ! Riveでアニメーション実装🐾
kno3a87
1
2.5k
Dart 参戦!!静的型付き言語界の隠れた実力者
kno3a87
0
320
Flutterを言い訳にしない!アプリの使い心地改善テクニック5選🔥
kno3a87
3
860
iOS 18 がやってきた!
kno3a87
1
290
おうちハッカソン #2
kno3a87
0
170
ミクアカ成果報告会
kno3a87
0
84
SXSW2021
kno3a87
0
87
ミクアカ中間発表会
kno3a87
0
65
大学院進学ガイダンス
kno3a87
0
120
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
590
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
440
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Visualization
eitanlees
153
17k
The Curious Case for Waylosing
cassininazir
1
540
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
510
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Accessibility Awareness
sabderemane
1
220
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
930
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
720
Transcript
ΞΫηγϏϦςΟɺ·ͩᘳ͡Όͳ͍͚Ͳ ᴷᴷlࠓ͔ΒzͰ͖Δ͜ͱ 2025/11/13 גࣜձࣾ MIXI mixi2 @kuno #FlutterKaigi #impeller
2ͳΜͷࣸਅ͔Θ͔Γ·͔͢ʁ
"ϝΨω֎ͨ͠ঢ়ଶʢ࠶ݱʣͰݟͨNJYJͷεςοΧʔ
ݟ͑ํͻͱͦΕͧΕ <>IUUQTXXXDPMPSCMJOEOFTTDPNDPCMJTDPMPSCMJOEOFTTTJNVMBUPS %FVUFSBOPQJB ΞΫηε <>IUUQTXXXOBOBTBUPFZFDPNMFOTTJNVMBUJPO ΞΫηε ௨ৗͷݟ͑ํ ৭ͷݟ͑ํ͕ ҟͳΔ߹<>
ۙࢹͷݟ͑ํ ·Ϳ͠͞Λ ײ͡Δݟ͑ํ<>
ݟ͑ํͻͱͦΕͧΕ <>IUUQTXXXDPMPSCMJOEOFTTDPNDPCMJTDPMPSCMJOEOFTTTJNVMBUPS %FVUFSBOPQJB ΞΫηε <>IUUQTXXXOBOBTBUPFZFDPNMFOTTJNVMBUJPO ΞΫηε ௨ৗͷݟ͑ํ ৭ͷݟ͑ํ͕ ҟͳΔ߹<>
ۙࢹͷݟ͑ํ ·Ϳ͠͞Λ ײ͡Δݟ͑ํ<> ಉ͡ϞϊΛݟ͍ͯͯ ਓʹΑͬͯݟ͑ํ·ͬͨ͘ҧ͏
ݟ͑ํͻͱͦΕͧΕ <>IUUQTXXXDPMPSCMJOEOFTTDPNDPCMJTDPMPSCMJOEOFTTTJNVMBUPS %FVUFSBOPQJB ΞΫηε <>IUUQTXXXOBOBTBUPFZFDPNMFOTTJNVMBUJPO ΞΫηε ௨ৗͷݟ͑ํ ৭ͷݟ͑ํ͕ ҟͳΔ߹<>
ۙࢹͷݟ͑ํ ·Ϳ͠͞Λ ײ͡Δݟ͑ํ<> ࢹ͚֮ͩͰͳ͘ ௌ֮ɾମతɾೝతͳͲ͞·͟·ͳҧ͍
"DDFTJCJMJUZGPSFWFSZPOF w ੈքਓޱͷҎ্ʢਓʹਓʣ͕ԿΒ͔ͷো͕͍Λ๊͑ͯੜ׆͍ͯ͠Δ<> w ো͕͍୭ͰҰ࣌తɾঢ়گతʹى͜Γ͏Δ w ยखͰΞϓϦΛ༻͍ͯ͠Δਓ໌Δ͍ޫԼͰ༻͢Δ߹ͳͲ <>IUUQTXXXXIPJOUOFXTSPPNGBDUTIFFUTEFUBJMEJTBCJMJUZBOEIFBMUI ΞΫηε
<>IUUQTEFWFMPQFSNP[JMMBPSHFO64EPDT-FBSO@XFC@EFWFMPQNFOU$PSF"DDFTTJCJMJUZ8IBU@JT@BDDFTTJCJMJUZ ΞΫηε
"DDFTJCJMJUZGPSFWFSZPOF w ੈքਓޱͷҎ্ʢਓʹਓʣ͕ԿΒ͔ͷো͕͍Λ๊͑ͯੜ׆͍ͯ͠Δ<> w ো͕͍୭ͰҰ࣌తɾঢ়گతʹى͜Γ͏Δ w ยखͰΞϓϦΛ༻͍ͯ͠Δਓ໌Δ͍ޫԼͰ༻͢Δ߹ͳͲ w :PVNJHIUBMTPUIJOLPGBDDFTTJCJMJUZBTUSFBUJOHFWFSZPOFUIFTBNF BOE
HJWJOHUIFNFRVBMPQQPSUVOJUJFT OPNBUUFSXIBUUIFJSBCJMJUZPS DJSDVNTUBODFT<> <>IUUQTXXXXIPJOUOFXTSPPNGBDUTIFFUTEFUBJMEJTBCJMJUZBOEIFBMUI ΞΫηε <>IUUQTEFWFMPQFSNP[JMMBPSHFO64EPDT-FBSO@XFC@EFWFMPQNFOU$PSF"DDFTTJCJMJUZ8IBU@JT@BDDFTTJCJMJUZ ΞΫηε ΞΫηγϏϦςΟͱ͍͏ͷো͕͍ͷ༗ແೳྗʹؔΘΒͣ ʰ୭ʹͱ͍͍ͬͯ͢ʱΑ͏ʹ͢Δ͜ͱ
ΞΫηγϏϦςΟͷجૅΛΔ ࣮༻తͳখωλΛ֮ͭ͑ͯؼΔ ྫεΫϦʔϯϦʔμʔͷૢ࡞ํ๏ ྫ'MVUUFSͰϛχϚϜͰରԠͰ͖Δ͜ͱ (0"-
ΞΫηγϏϦςΟͷجૅ
ࠃࡍతͳج४8$"( w 8$"(ʢ8FC$POUFOU"DDFTTJCJMJUZ(VJEFMJOFTʣ<> w ੈքతʹΘΕ͍ͯΔΣϒΞϓϦͷΞΫηγϏϦςΟج४ w ࠷৽൛ɿ8$"(ʢ݄ʣ w ओͳݪଇ
w ֮Մೳ 1FSDFJWBCMF rࢹ֮ɾௌ֮ͷ੍ݶʹؔΘΒ֮ͣͰ͖Δ w ૢ࡞Մೳ 0QFSBCMF rͲΜͳೖྗํ๏Ͱૢ࡞Ͱ͖Δ w ཧղՄೳ 6OEFSTUBOEBCMF rײతͰཧղ͍͢͠ w ݎ࿚ 3PCVTU rͲΜͳڥʢ֎Ε͕ೖͬͨΓΞϓσͨ͠ΓʣͰյΕʹ͍͘ <>IUUQTXBJDKQUSBOTMBUJPOT8$"(BCTUSBDU ΞΫηε
'MVUUFS"DDFTTJCJMJUZSFMFBTFDIFDLMJTU <> "DUJWFJOUFSBDUJPOT w ͯ͢ͷΞΫςΟϒͳΠϯλϥΫγϣϯ͕ԿΒ͔ͷಈ࡞Λߦ͏Α͏ʹ͢Δ <>IUUQTEPDT fl VUUFSEFWVJBDDFTTJCJMJUZBDDFTTJCJMJUZSFMFBTFDIFDLMJTU
ΞΫηε ྫϘλϯΛԡͯ͠ ϘλϯʹมԽ͕ͳ͍ͷͳΒ 4OBDL#BSΛग़͢
'MVUUFS"DDFTTJCJMJUZSFMFBTFDIFDLMJTU <> 4DSFFOSFBEFSUFTUJOH w ϖʔδ্ͷͯ͢ͷίϯτϩʔϧઆ໌͞ΕΔ͖ w 5BML#BDL "OESPJE
ͱ7PJDF0WFS J04 ΛͬͯΞϓϦΛςετ͢Δ <>IUUQTEPDT fl VUUFSEFWVJBDDFTTJCJMJUZBDDFTTJCJMJUZSFMFBTFDIFDLMJTU ΞΫηε εΫϦʔϯϦʔμʔͰͷ εϥΠμʔͷ͍ํΛ ಡΈ্͛ͯڭ͑ͯ͘ΕΔ ϘλϯʰϘλϯʱͱಡΈ্͛ΒΕΔ
খωλɿεΫϦʔϯϦʔμʔͷىಈํ๏ w 7PJDF0WFSʢJ04J1IPOF1SPʹͯ֬ೝʣ w ઃఆը໘ΞΫηγϏϦςΟ7PJDF0WFSΛΦϯ w 4JSJʹʰ7PJDF0WFSΛΦϯʹͯ͠ʱͱཔΉ w 5BML#BDLʢ"OESPJE(BMBYZ;'MJQʹͯ֬ೝʣ
w ઃఆը໘Ϣʔβิॿ5BML#BDLΛΦϯ γϣʔτΧοτΛՃ͓ͯ͘͠ͱ ӈԼͷϘλϯΛԡ͚ͩ͢Ͱىಈ ίϯτϩʔϧηϯλʔʹՃ͓ͯ͘͠ͱ ϘλϯΛԡ͚ͩ͢Ͱىಈ
'MVUUFS"DDFTTJCJMJUZSFMFBTFDIFDLMJTU <> $POUSBTUSBUJPT w ςΩετͱഎܠͷίϯτϥετൺগͳ͘ͱʹ͢Δ͜ͱΛਪ w ແޮԽ͞ΕͨίϯϙʔωϯτΛআ͘ w
ίϯτϥετνΣοΧʔαΠτͳͲ<> Ͱ֬ೝ͢Δͱྑ͍ <>IUUQTEPDT fl VUUFSEFWVJBDDFTTJCJMJUZBDDFTTJCJMJUZSFMFBTFDIFDLMJTU ΞΫηε <>IUUQTXFCBJNPSHSFTPVSDFTDPOUSBTUDIFDLFS ΞΫηε 0, /( ʢബͯ͘ಡΈͮΒ͍ʣ
'MVUUFS"DDFTTJCJMJUZSFMFBTFDIFDLMJTU <> $POUFYUTXJUDIJOH w ใΛೖྗ͍ͯ͠ΔؒϢʔβʔͷίϯςΩετ͕ࣗಈతʹมߋ͞ΕΔ͖Ͱͳ͍ w ֬ೝΞΫγϣϯͳ͠ʹϢʔβʔͷίϯςΩετΛมߋ͢Δ͜ͱආ͚Δ͖ <>IUUQTEPDT
fl VUUFSEFWVJBDDFTTJCJMJUZBDDFTTJCJMJUZSFMFBTFDIFDLMJTU ΞΫηε ࣗಈͰը໘ભҠ͢Δ࣌ Ϣʔβʹ͑Δ
'MVUUFS"DDFTTJCJMJUZSFMFBTFDIFDLMJTU <> 5BQQBCMFUBSHFUT w λοϓՄೳͳλʔήοτͯ͢গͳ͘ͱYQYͰ͋Δඞཁ͕͋Δ w J04)*(ͩͱYQY<> w
ेͳύσΟϯάΛઃ͚Δ͜ͱॏཁ w "OESPJE.BUFSJBM%FTJHO . ͩͱYEQ<> <>IUUQTEPDT fl VUUFSEFWVJBDDFTTJCJMJUZBDDFTTJCJMJUZSFMFBTFDIFDLMJTU ΞΫηε <>IUUQTEFWFMPQFSBQQMFDPNEFTJHOIVNBOJOUFSGBDFHVJEFMJOFTBDDFTTJCJMJUZ ΞΫηε <>IUUQTNNBUFSJBMJPDPNQPOFOUTJDPOCVUUPOTBDDFTTJCJMJUZ ΞΫηε
'MVUUFS"DDFTTJCJMJUZSFMFBTFDIFDLMJTU <> &SSPST w ॏཁͳૢ࡞ݩʹͤΔΑ͏ʹ͢Δඞཁ͕͋Δ w Τϥʔ͕දࣔ͞Ε͍ͯΔϑΟʔϧυʹՄೳͰ͋Εमਖ਼ΛఏҊ <>IUUQTEPDT
fl VUUFSEFWVJBDDFTTJCJMJUZBDDFTTJCJMJUZSFMFBTFDIFDLMJTU ΞΫηε Τϥʔͱमਖ਼ఏҊΛදࣔ
'MVUUFS"DDFTTJCJMJUZSFMFBTFDIFDLMJTU <> $PMPSWJTJPOEF fi DJFODZUFTUJOH w ৭֮ҟৗϞʔυ͓ΑͼάϨʔεέʔϧϞʔυͰ༻Մೳ͔ͭಡՄೳ άϥϑͷ۠ผ͕͖͍ͭ͢
˞༻͍ͯ͠ΔͷEBSUNBUIύοέʔδͷΈ <>IUUQTEPDT fl VUUFSEFWVJBDDFTTJCJMJUZBDDFTTJCJMJUZSFMFBTFDIFDLMJTU ΞΫηε
'MVUUFS"DDFTTJCJMJUZSFMFBTFDIFDLMJTU <> 4DBMFGBDUPST w ςΩεταΠζͱσΟεϓϨΠͷεέʔϧ͕େ͖͍߹ͰಡΈ͘͢༻Ͱ͖Δ <>IUUQTEPDT fl VUUFSEFWVJBDDFTTJCJMJUZBDDFTTJCJMJUZSFMFBTFDIFDLMJTU
ΞΫηε 0WFS fl PXʹͳΒͳ͍͔ʁ ݟʹ͘͘ͳ͍ͬͯͳ͍͔ʁ
/FX"DDFTTJCJMJUZ'FBUVSFT JO'MVUUFS <> <>IUUQTEDNEFWCMPHBDDFTTJCJMJUZ fl VUUFSQSBDUJDBMUJQTUPPMTDPEFZPVMMBDUVBMMZVTF ΞΫηε
/FX"DDFTTJCJMJUZ'FBUVSFTJO'MVUUFS <> 4FNBOUJDT5SFFͷίϯύΠϧΛ࠷దԽ w Ϗϧυ্͕
4FNBOUJDT3PMF"1*ͷՃ w ΟδΣοτʹࡉ͔͍ηϚϯςΟοΫϩʔϧΛׂΓͯՄೳʹ εΫϦʔϯϦʔμʔ͕ΑΓଟ͘ͷίϯςΩετΛఏڙͰ͖ΔΑ͏ʹ w ྫɿνΣοΫϘοΫεͷঢ়ଶ͕ʮΦϯʯ͔ʮΦϑʯ͔Λೝࣝͯ͠ಡΈ্͛ <>IUUQTEDNEFWCMPHBDDFTTJCJMJUZ fl VUUFSQSBDUJDBMUJQTUPPMTDPEFZPVMMBDUVBMMZVTF ΞΫηε "3*"SPMFʹϚοϐϯά͞ΕΔ ˞8FCͷΈ
/FX"DDFTTJCJMJUZ'FBUVSFTJO'MVUUFS <> ΣϒͰͷϑΥʔΧεφϏήʔγϣϯ͕ΑΓεϜʔζʹ w ಥવͷδϟϯϓͳͲͷόάΛճආ
ϦϯΫΞΫηγϏϦςΟͱ5BML#BDL w ϦϯΫͱͯ͠ೝࣝ͠ʮμϒϧλοϓͯ͠ىಈʯͳͲͷώϯτΛදࣔ 8JOEPXTͷϋΠίϯτϥετϞʔυΛαϙʔτ J04ͷԻίϯτϩʔϧͷվળ w ૢ࡞Ͱ͖ͳ͍ΟδΣοτʹ൪߸͕͔ͭͳ͍Α͏ʹ <>IUUQTEDNEFWCMPHBDDFTTJCJMJUZ fl VUUFSQSBDUJDBMUJQTUPPMTDPEFZPVMMBDUVBMMZVTF ΞΫηε ˞8FCͷΈ ˞7PJDF0WFSͱผ
4FNBOUJDTͱʁ
4FNBOUJDTʹʮҙຯʯΛ͑ΔΈ w 4FNBOUJDT͕͋Δ͜ͱͰਓը໘্ͷߏతΛཧղͰ͖Δ w ࠓͲͷը໘ɾঢ়ଶʹ͍Δͷ͔ʁ w Ͳ͜Λԡͤ࣍ͷϖʔδʹਐΊΔͷ͔ʁ w ॏཁͳใ͕Ͳ͜ʹ͋Δʁ
w ͜ͷϘλϯԿͷͨΊʹ͋Δͷ͔ʁ w 'MVUUFSͰ֤8JEHFUʹରͯ͠ʮҙຯʯΛઃఆ͢Δ͜ͱ͕Ͱ͖Δ w ʮҙຯʯΛݩʹεΫϦʔϯϦʔμʔ͕ԻͰ༰ׂΛ͑Δ͜ͱ͕Ͱ͖Δ ࢹ֮ʹཔΒͳ͍Ϣʔβʔ ֤෦ͷׂΛԻͰཧղ͠ૢ࡞Ͱ͖Δ
4FNBOUJDT8JEHFU <> w ҙͷ8JEHFUʹ4FNBOUJDTΛՃ͢Δ͜ͱ͕Ͱ͖Δ <>IUUQTBQJ fl VUUFSEFW fl VUUFSXJEHFUT4FNBOUJDTDMBTTIUNM
ΞΫηε 4FNBOUJDT8JEHFUͰ Ϙλϯͱ͍͏ҙຯΛ༩
4FNBOUJDT8JEHFU <> w ҙͷ8JEHFUʹ4FNBOUJDTΛՃ͢Δ͜ͱ͕Ͱ͖Δ <>IUUQTBQJ fl VUUFSEFW fl VUUFSXJEHFUT4FNBOUJDTDMBTTIUNM
ΞΫηε 4FNBOUJDT8JEHFUͰ Ϙλϯͱ͍͏ҙຯΛ༩ ʮ͜ΕϦϯΫͰ͋Δʯ ʮ͜ΕςΩετϑΟʔϧυͰ͋Δʯ
4FNBOUJDT8JEHFU <> w ҙͷ8JEHFUʹ4FNBOUJDTΛՃ͢Δ͜ͱ͕Ͱ͖Δ w CPPMҎ֎ͷ߲͋Δ <>IUUQTBQJ fl VUUFSEFW
fl VUUFSXJEHFUT4FNBOUJDTDMBTTIUNM ΞΫηε 4FNBOUJDT8JEHFUͰ Ϙλϯͱ͍͏ҙຯΛ༩ ಡΈ্͛จݴΛࢦఆͰ͖Δ ͲΜͳΞΫγϣϯͨ͠ΒԿ͕ى͜Δ͔Λ ͑Δ͜ͱ͕Ͱ͖Δ ʮ͜ΕϦϯΫͰ͋Δʯ ʮ͜ΕςΩετϑΟʔϧυͰ͋Δʯ
4FNBOUJDT8JEHFU <> w 'MVUUFSඪ४8JEHFUʹجຊతʹ4FNBOUJDT8JEHFU͕෦ͰΘΕ͍ͯΔ w ྫɿ*DPO#VUUPO<> <>IUUQTBQJ fl VUUFSEFW
fl VUUFSXJEHFUT4FNBOUJDTDMBTTIUNM ΞΫηε <>IUUQTHJUIVCDPN fl VUUFS fl VUUFSCMPCNBTUFSQBDLBHFT fl VUUFSMJCTSDNBUFSJBMJDPO@CVUUPOEBSU- ΞΫηε class IconButton extends StatelessWidget { … @override Widget build(BuildContext context) { … return Semantics(button: true, enabled: onPressed != null, child: result); } 4FNBOUJDT8JEHFUͰ Ϙλϯͱ͍͏ҙຯΛ༩
4FNBOUJDT5SFF w 4FNBOUJDT8JEHFUͰ8JEHFU͝ͱʹʮҙຯʯΛ࣋ͨͤͨ w 4FNBOUJDT5SFFͰʮҙຯͷߏʯΛ࡞Δ w 8JEHFUͱͯ͠ෳ͚ͩͲҙຯతʹͭͷ߹ͳͲ͕͋Δ w ͦͷͨΊ8JEHFU5SFFͱҰக͠ͳ͍
˞͜ͷ4FNBOUJDT5SFFΛߏஙͯ͠ҡ࣋͢Δॲཧ͕'MVUUFSͰ࠷దԽ ElevatedButton.icon( onPressed: () {}, icon: const Icon(Icons.send), label: const Text('ૹ৴'), ), 8JEHFUͱͯ͠ *DPOͱ5FYUͷͭ ಡΈ্͛ͭ ʮૹ৴Ϙλϯʯ
ඪ४8JEHFUͷϘλϯͬͯ·͔͢ʁ
NJYJͷ6* ԡ͢ͱॖΉϘλϯ Ξχϝʔγϣϯ͢Δ'"# νΣΩ෩ͷը૾Ϙλϯ
NJYJͷ6* ԡ͢ͱॖΉϘλϯ Ξχϝʔγϣϯ͢Δ'"# νΣΩ෩ͷը૾Ϙλϯ Ϙλϯ΄΅(FTUVSF%FUFDUPSͰ࣮
(FTUVSF%FUFDUPSͰϘλϯΛ࡞Δͱʜ GestureDetector( onTap: () { setState(() { _message =
'͍͍Ͷ͕λοϓ͞Ε·ͨ͠ʂ'; }); }, child: Container( … child: Text( '͍͍Ͷ', ), ), ),
(FTUVSF%FUFDUPSͰϘλϯΛ࡞Δͱʜ GestureDetector( onTap: () { setState(() { _message =
'͍͍Ͷ͕λοϓ͞Ε·ͨ͠ʂ'; }); }, child: Container( … child: Text( '͍͍Ͷ', ), ), ), (FTUVSF%FUFDUPS σϑΥϧτͰϘλϯѻ͍ʹͳΒͳ͍ͨΊ ʰʓʓϘλϯʱͱಡΈ্͛ΒΕͳ͍
(FTUVSF%FUFDUPSͰϘλϯΛ࡞Δͱʜ GestureDetector( onTap: () { setState(() { _message =
'͍͍Ͷ͕λοϓ͞Ε·ͨ͠ʂ'; }); }, child: Container( … child: Text( '͍͍Ͷ', ), ), ), ͞Βʹʜ
࿈ଧࢭࡦΛ-JTOUFSͰ࣮ Listener( onPointerDown: (event) { // ΠϕϯτIDΛνΣοΫͯ͠ɼଞͷΠϕϯτ͕ॲཧதͰͳ͚Εड͚ೖΕΔ if (_focusedEventId
!= null) { _available = _focusedEventId == event.pointer; } else { _focusedEventId = event.pointer; _available = true; } }, child: GestureDetector( onTap: () { // available νΣοΫͱ 300ms σόϯενΣοΫ if (_available) { final now = DateTime.now(); if (_lastTapTime == null || now.difference(_lastTapTime!) > const Duration(milliseconds: 300)) { _lastTapTime = now; setState(() { _message = '͍͍Ͷ͕λοϓ͞Ε·ͨ͠ʂ';
࿈ଧࢭࡦΛ-JTOUFSͰ࣮ Listener( onPointerDown: (event) { // ΠϕϯτIDΛνΣοΫͯ͠ɼଞͷΠϕϯτ͕ॲཧதͰͳ͚Εड͚ೖΕΔ if (_focusedEventId
!= null) { _available = _focusedEventId == event.pointer; } else { _focusedEventId = event.pointer; _available = true; } }, child: GestureDetector( onTap: () { // available νΣοΫͱ 300ms σόϯενΣοΫ if (_available) { final now = DateTime.now(); if (_lastTapTime == null || now.difference(_lastTapTime!) > const Duration(milliseconds: 300)) { _lastTapTime = now; setState(() { _message = '͍͍Ͷ͕λοϓ͞Ε·ͨ͠ʂ'; -JTOUFSΟδΣοτੜͷϙΠϯλʔΠϕϯτΛर͏ͷͰ͋Γ εΫϦʔϯϦʔμʔܦ༝ͷԾతͳλοϓरΘͳ͍ ˞ճϩϯάλοϓͳͲͰඪ४δΣενϟʹΓସ͑ͨΒಧ͘
࿈ଧࢭࡦΛ-JTOUFSͰ࣮ Listener( onPointerDown: (event) { // ΠϕϯτIDΛνΣοΫͯ͠ɼଞͷΠϕϯτ͕ॲཧதͰͳ͚Εड͚ೖΕΔ if (_focusedEventId
!= null) { _available = _focusedEventId == event.pointer; } else { _focusedEventId = event.pointer; _available = true; } }, child: GestureDetector( onTap: () { // available νΣοΫͱ 300ms σόϯενΣοΫ if (_available) { final now = DateTime.now(); if (_lastTapTime == null || now.difference(_lastTapTime!) > const Duration(milliseconds: 300)) { _lastTapTime = now; setState(() { _message = '͍͍Ͷ͕λοϓ͞Ε·ͨ͠ʂ'; PO1POUFS%PXOʹདྷͳ͍ͷͰ @BWBJMBCMF͕ͣͬͱUSVFʹͳΒͳ͍
࿈ଧࢭࡦΛ-JTOUFSͰ࣮ Listener( onPointerDown: (event) { // ΠϕϯτIDΛνΣοΫͯ͠ɼଞͷΠϕϯτ͕ॲཧதͰͳ͚Εड͚ೖΕΔ if (_focusedEventId
!= null) { _available = _focusedEventId == event.pointer; } else { _focusedEventId = event.pointer; _available = true; } }, child: GestureDetector( onTap: () { // available νΣοΫͱ 300ms σόϯενΣοΫ if (_available) { final now = DateTime.now(); if (_lastTapTime == null || now.difference(_lastTapTime!) > const Duration(milliseconds: 300)) { _lastTapTime = now; setState(() { _message = '͍͍Ͷ͕λοϓ͞Ε·ͨ͠ʂ'; PO5BQ͕ݺΕͯ Կ࣮ߦ͞Εͳ͍ʂ
࿈ଧࢭࡦΛ-JTOUFSͰ࣮ Listener( onPointerDown: (event) { // ΠϕϯτIDΛνΣοΫͯ͠ɼଞͷΠϕϯτ͕ॲཧதͰͳ͚Εड͚ೖΕΔ if (_focusedEventId
!= null) { _available = _focusedEventId == event.pointer; } else { _focusedEventId = event.pointer; _available = true; } }, child: GestureDetector( onTap: () { // available νΣοΫͱ 300ms σόϯενΣοΫ if (_available) { final now = DateTime.now(); if (_lastTapTime == null || now.difference(_lastTapTime!) > const Duration(milliseconds: 300)) { _lastTapTime = now; setState(() { _message = '͍͍Ͷ͕λοϓ͞Ε·ͨ͠ʂ'; PO5BQ͕ݺΕͯ Կ࣮ߦ͞Εͳ͍ʂ εΫϦʔϯϦʔμʔͷجຊૢ࡞Ͱ Կಈ͔ͤͳ͘ͳ͍ͬͯͨʜ μ ϒ ϧ λ ο ϓ
'MVUUFS,BJHJʹͯʜ
IUUQTXXXZPVUVCFDPNXBUDI WYK-+#6+C2 ΞΫηε
IUUQTXXXZPVUVCFDPNXBUDI WYK-+#6+C2 ΞΫηε
IUUQTXXXZPVUVCFDPNXBUDI WYK-+#6+C2 ΞΫηε J1IPOFͷϥΠτϞʔυͩͱϑΥϯτϨϯμϦϯά࣌ʹ ΞϯνΤΠϦΞεೱ͕ബ͘จࣈ͕ࡉ͘ݟ͑ͯ͠·͏
IUUQTXXXZPVUVCFDPNXBUDI WYK-+#6+C2 ΞΫηε
IUUQTXXXZPVUVCFDPNXBUDI WYK-+#6+C2 ΞΫηε J1IPOFͷϥΠτϞʔυͩͱϑΥϯτϨϯμϦϯά࣌ʹ ΞϯνΤΠϦΞεೱ͕ബ͘จࣈ͕ࡉ͘ݟ͑ͯ͠·͏ ➡︎ 4UBDLͰ5FYUΛॏͶͯղܾ
4UBDLͰ5FYUΛॏͶ͍ͯΔͱʜ
4UBDLͰ5FYUΛॏͶ͍ͯΔͱʜ ೋॏͰಡΈ্͛ΒΕͯ͠·͏
NJYJͷΞΫηγϏϦςΟʹؔͯ͠ ࢁ͝ҙݟΛ͍͖ͨͩ·ͨ͠
ͳͥ͜ͷΑ͏ͳ͕ى͖ͯ͠·ͬͨͷ͔ w νʔϜʹεΫϦʔϯϦʔμʔͷ༻Ϣʔβ͕͍ͳͯ͘ؾ͚ͳ͔ͬͨ w ޙճ͠ʹͳΓ͍͢ w ༷ͷᐆດ͞ w ͲΜͳಡΈ্͛จ͕͍͍ͷʁͲ͜·ͰͬͨΒʁ
w ༏ઌͷݟ͑ʹ͘͞ w ࣗ͝ͱͱͯ͠ଊ͑ͮΒ͍ w εέδϡʔϧͷ߹ w 'MVUUFSരͰϓϩμΫτΛ࡞Γͨͯ͘࠾༻͍ͯ͠Δͱ͜Ζ͕ଟ͍
গͣͭ͠Ͱ͖Δ͜ͱ͔Β࢝Ίͨ w εΫϦʔϯϦʔμʔͰૢ࡞͕Ͱ͖Δ w εΫϦʔϯϦʔμʔͰίϯςϯπ͕ಡΈ্͛ΒΕΔ w Կ͕Ͱ͖ΔϘλϯͳͷ͔ಡΈ্͛ΒΕΔ w ը૾ʹସςΩετʢ"MUʣΛ༩Ͱ͖Δ
Wʹͯ"MUػೳΛϦϦʔεʂ
νʔϜͰରԠ͍ͯ͘͠ମ੍Λ w $MBVEFϨϏϡʔͰΞΫηγϏϦςΟ؍ϨϏϡʔͯ͘͠ΕΔΑ͏ʹઃఆ w νʔϜͰಡΈ্͛จݴʹ͍ͭͯٞ w ৭ܗͲ͏͑Δʁ w ϦΞΫγϣϯΛͲ͜·ͰಡΈ্͛Δʁ
ʰ͚͓͋Ίʱ͚ͩͰྑ͍ʁ ৭͑Δʁ όʔδϣϯͰ͋Δ͜ͱΛ͑Δʁ
খωλɿԿΛಡΈ্͛ͤ͞Ε͍͍ͷʁ w આ໌Ͱͳ͘Կ͕Ͱ͖Δͷ͔ʹϑΥʔΧε ϋʔτͷΞΠίϯϘλϯ º ͍͍ͶΛ͢ΔϘλϯ
খωλɿԿΛಡΈ্͛ͤ͞Ε͍͍ͷʁ w આ໌Ͱͳ͘Կ͕Ͱ͖Δͷ͔ʹϑΥʔΧε w ຊޠͳΒʰɺʱͱʰɻʱΛ͏͜ͱͰಡΈ্͛࣌ʹฉ͖औΓ͘͢ͳΔ ϋʔτͷΞΠίϯϘλϯ º ͍͍ͶΛ͢ΔϘλϯ ʮ͍͍ͶϘλϯԡ͢ͱߘʹର͍͍ͯ͠Ͷ͠·͢ʯ
ʮ͍͍ͶϘλϯɻԡ͢ͱߘʹରͯ͠ɺ͍͍Ͷ͠·͢ʯ
'MVUUFSطͷ w εΫϩʔϧͯ͠Ի͕໐ΒͣϖʔδͷಡΈ্͕͛͞Εͳ͍<> w εΫϩʔϧ͍ͯ͠Δͱ్தͰϑΥʔΧε͕֎Ε"QQ#BSඈΜͰ͠·͏<> <>IUUQTHJUIVCDPN fl VUUFS
fl VUUFSJTTVFT ΞΫηε <>IUUQTHJUIVCDPN fl VUUFS fl VUUFSJTTVFT ΞΫηε 4XJGUͰ࣮ εΫϩʔϧ͢ΔͱʮϐοϖʔδʯͱಡΈ্͛ 'MVUUFSͰ࣮
'MVUUFSطͷ w εΫϩʔϧͯ͠Ի͕໐ΒͣϖʔδͷಡΈ্͕͛͞Εͳ͍<> w εΫϩʔϧ͍ͯ͠Δͱ్தͰϑΥʔΧε͕֎Ε"QQ#BSඈΜͰ͠·͏<> <>IUUQTHJUIVCDPN fl VUUFS
fl VUUFSJTTVFT ΞΫηε <>IUUQTHJUIVCDPN fl VUUFS fl VUUFSJTTVFT ΞΫηε 4XJGUͰ࣮ εΫϩʔϧ͢ΔͱʮϐοϖʔδʯͱಡΈ্͛ 'MVUUFSͰ࣮ ίϯτϦϏϡʔτνϟϯεʂ
ࠓ͜ͷηογϣϯޙʹ ʰࣗͷΞϓϦ্ͰεΫϦʔϯϦʔμʔىಈͤͯ͞ΈΑ͏ʂʱ ʰΞΫηγϏϦςΟʹ͍ͭͯνʔϜͰͯ͠Έ͍ͨͳʱ ͱࢥͬͯ͘ΕͨΒخ͍͠Ͱ͢ʂ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ w USZ4XJGU5PLZPʹग़ల͍ͯͨ͠%FTJHO-BC<> Ͱ৭ʑڭ͑ͯΒ͍·ͨ͠ w 8$"(ʹ͍ͭͯϛχϚϜͲ͜·ͰಡΈ্͛ͤ͞Δ͖͔ʁͳͲ w NJYJͷটϦϯΫɺ͋Γ·͢ <>IUUQTYDPNTDJWPOFTUBUVT
T ΞΫηε
ه w TIPX4FNBOUJDT%FCVHHFSΛͬͯΈΔ<> w ΞΫηγϏϦςΟͷςετΛݟͯΈΔ<> w 4FNBOUJDT$MBTTΛਂ΅Δ<> w TPSU,FZɿಡΈ্͛ॱংΛιʔτͰ͖Δ
w -JRVJE(MBTT<> w ࣮ͪΌΜͱΨΠυϥΠϯʹԊͬͯΔ <>IUUQTBCPEZNFEJVNDPNBDDFTTJCJMJUZJO fl VUUFSUJQTGPSBNPSFJODMVTJWFBQQFFE ΞΫηε <>IUUQTBQJ fl VUUFSEFW fl VUUFS fl VUUFS@UFTU"DDFTTJCJMJUZ(VJEFMJOFDMBTTIUNM ΞΫηε <>IUUQTBQJ fl VUUFSEFW fl VUUFSXJEHFUT4FNBOUJDTDMBTTIUNM ΞΫηε <>IUUQTEFWFMPQFSBQQMFDPNKQWJEFPTQMBZXXED ΞΫηε