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
アクセシビリティ、まだ完璧じゃないけど ── “今から”できること
Search
Kuno Ayana
November 13, 2025
1.3k
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
2k
Dart 参戦!!静的型付き言語界の隠れた実力者
kno3a87
0
290
Flutterを言い訳にしない!アプリの使い心地改善テクニック5選🔥
kno3a87
3
840
iOS 18 がやってきた!
kno3a87
1
270
おうちハッカソン #2
kno3a87
0
160
ミクアカ成果報告会
kno3a87
0
72
SXSW2021
kno3a87
0
78
ミクアカ中間発表会
kno3a87
0
57
大学院進学ガイダンス
kno3a87
0
110
Featured
See All Featured
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
270
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
160
Into the Great Unknown - MozCon
thekraken
41
2.6k
Scaling GitHub
holman
464
140k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Accessibility Awareness
sabderemane
1
140
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
140
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
320
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
850
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 ΞΫηε