Slide 1

Slide 1 text

ΞΫηγϏϦςΟɺ·ͩ׬ᘳ͡Όͳ͍͚Ͳ ᴷᴷlࠓ͔ΒzͰ͖Δ͜ͱ 2025/11/13 גࣜձࣾ MIXI mixi2 @kuno #FlutterKaigi #impeller

Slide 2

Slide 2 text

 2ͳΜͷࣸਅ͔Θ͔Γ·͔͢ʁ

Slide 3

Slide 3 text

 "ϝΨω֎ͨ͠ঢ়ଶʢ࠶ݱʣͰݟͨNJYJͷεςοΧʔ

Slide 4

Slide 4 text

ݟ͑ํ͸ͻͱͦΕͧΕ  <>IUUQTXXXDPMPSCMJOEOFTTDPNDPCMJTDPMPSCMJOEOFTTTJNVMBUPS %FVUFSBOPQJB ΞΫηε <>IUUQTXXXOBOBTBUPFZFDPNMFOTTJNVMBUJPO ΞΫηε ௨ৗͷݟ͑ํ ৭ͷݟ͑ํ͕ ҟͳΔ৔߹<> ۙࢹͷݟ͑ํ ·Ϳ͠͞Λ ײ͡Δݟ͑ํ<>

Slide 5

Slide 5 text

ݟ͑ํ͸ͻͱͦΕͧΕ  <>IUUQTXXXDPMPSCMJOEOFTTDPNDPCMJTDPMPSCMJOEOFTTTJNVMBUPS %FVUFSBOPQJB ΞΫηε <>IUUQTXXXOBOBTBUPFZFDPNMFOTTJNVMBUJPO ΞΫηε ௨ৗͷݟ͑ํ ৭ͷݟ͑ํ͕ ҟͳΔ৔߹<> ۙࢹͷݟ͑ํ ·Ϳ͠͞Λ ײ͡Δݟ͑ํ<> ಉ͡ϞϊΛݟ͍ͯͯ΋ ਓʹΑͬͯݟ͑ํ͸·ͬͨ͘ҧ͏

Slide 6

Slide 6 text

ݟ͑ํ͸ͻͱͦΕͧΕ  <>IUUQTXXXDPMPSCMJOEOFTTDPNDPCMJTDPMPSCMJOEOFTTTJNVMBUPS %FVUFSBOPQJB ΞΫηε <>IUUQTXXXOBOBTBUPFZFDPNMFOTTJNVMBUJPO ΞΫηε ௨ৗͷݟ͑ํ ৭ͷݟ͑ํ͕ ҟͳΔ৔߹<> ۙࢹͷݟ͑ํ ·Ϳ͠͞Λ ײ͡Δݟ͑ํ<> ࢹ͚֮ͩͰͳ͘ ௌ֮ɾ਎ମతɾೝ஌తͳͲ͞·͟·ͳҧ͍

Slide 7

Slide 7 text

"DDFTJCJMJUZGPSFWFSZPOF w ੈքਓޱͷҎ্ʢਓʹਓʣ͕ԿΒ͔ͷো͕͍Λ๊͑ͯੜ׆͍ͯ͠Δ<> w ো͕͍͸୭Ͱ΋Ұ࣌తɾঢ়گతʹى͜Γ͏Δ w ยखͰΞϓϦΛ࢖༻͍ͯ͠Δਓ΍໌Δ͍೔ޫԼͰ࢖༻͢Δ৔߹ͳͲ  <>IUUQTXXXXIPJOUOFXTSPPNGBDUTIFFUTEFUBJMEJTBCJMJUZBOEIFBMUI ΞΫηε <>IUUQTEFWFMPQFSNP[JMMBPSHFO64EPDT-FBSO@XFC@EFWFMPQNFOU$PSF"DDFTTJCJMJUZ8IBU@JT@BDDFTTJCJMJUZ ΞΫηε

Slide 8

Slide 8 text

"DDFTJCJMJUZGPSFWFSZPOF w ੈքਓޱͷҎ্ʢਓʹਓʣ͕ԿΒ͔ͷো͕͍Λ๊͑ͯੜ׆͍ͯ͠Δ<> w ো͕͍͸୭Ͱ΋Ұ࣌తɾঢ়گతʹى͜Γ͏Δ w ยखͰΞϓϦΛ࢖༻͍ͯ͠Δਓ΍໌Δ͍೔ޫԼͰ࢖༻͢Δ৔߹ͳͲ w :PVNJHIUBMTPUIJOLPGBDDFTTJCJMJUZBTUSFBUJOHFWFSZPOFUIFTBNF BOE HJWJOHUIFNFRVBMPQQPSUVOJUJFT OPNBUUFSXIBUUIFJSBCJMJUZPS DJSDVNTUBODFT<>  <>IUUQTXXXXIPJOUOFXTSPPNGBDUTIFFUTEFUBJMEJTBCJMJUZBOEIFBMUI ΞΫηε <>IUUQTEFWFMPQFSNP[JMMBPSHFO64EPDT-FBSO@XFC@EFWFMPQNFOU$PSF"DDFTTJCJMJUZ8IBU@JT@BDDFTTJCJMJUZ ΞΫηε ΞΫηγϏϦςΟͱ͍͏ͷ͸ো͕͍ͷ༗ແ΍ೳྗʹؔΘΒͣ ʰ୭ʹͱͬͯ΋࢖͍΍͍͢ʱΑ͏ʹ͢Δ͜ͱ

Slide 9

Slide 9 text

 ΞΫηγϏϦςΟͷجૅΛ஌Δ  ࣮༻తͳখωλΛ֮ͭ͑ͯؼΔ ྫεΫϦʔϯϦʔμʔͷૢ࡞ํ๏ ྫ'MVUUFSͰϛχϚϜͰରԠͰ͖Δ͜ͱ  (0"-

Slide 10

Slide 10 text

ΞΫηγϏϦςΟͷجૅ 

Slide 11

Slide 11 text

ࠃࡍతͳج४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 ΞΫηε

Slide 12

Slide 12 text

'MVUUFS"DDFTTJCJMJUZSFMFBTFDIFDLMJTU <>   "DUJWFJOUFSBDUJPOT w ͢΂ͯͷΞΫςΟϒͳΠϯλϥΫγϣϯ͕ԿΒ͔ͷಈ࡞Λߦ͏Α͏ʹ͢Δ <>IUUQTEPDT fl VUUFSEFWVJBDDFTTJCJMJUZBDDFTTJCJMJUZSFMFBTFDIFDLMJTU ΞΫηε ྫϘλϯΛԡͯ͠΋ ϘλϯʹมԽ͕ͳ͍ͷͳΒ 4OBDL#BSΛग़͢

Slide 13

Slide 13 text

'MVUUFS"DDFTTJCJMJUZSFMFBTFDIFDLMJTU <>   4DSFFOSFBEFSUFTUJOH w ϖʔδ্ͷ͢΂ͯͷίϯτϩʔϧ͸આ໌͞ΕΔ΂͖ w 5BML#BDL "OESPJE ͱ7PJDF0WFS J04 Λ࢖ͬͯΞϓϦΛςετ͢Δ <>IUUQTEPDT fl VUUFSEFWVJBDDFTTJCJMJUZBDDFTTJCJMJUZSFMFBTFDIFDLMJTU ΞΫηε εΫϦʔϯϦʔμʔͰͷ εϥΠμʔͷ࢖͍ํΛ ಡΈ্͛ͯڭ͑ͯ͘ΕΔ Ϙλϯ͸ʰϘλϯʱͱಡΈ্͛ΒΕΔ

Slide 14

Slide 14 text

খωλɿεΫϦʔϯϦʔμʔͷىಈํ๏  w 7PJDF0WFSʢJ04J1IPOF1SPʹͯ֬ೝʣ w ઃఆը໘ΞΫηγϏϦςΟ7PJDF0WFSΛΦϯ w 4JSJʹʰ7PJDF0WFSΛΦϯʹͯ͠ʱͱཔΉ w 5BML#BDLʢ"OESPJE(BMBYZ;'MJQʹͯ֬ೝʣ  w ઃఆը໘Ϣʔβิॿ5BML#BDLΛΦϯ γϣʔτΧοτΛ௥Ճ͓ͯ͘͠ͱ ӈԼͷϘλϯΛԡ͚ͩ͢Ͱىಈ ίϯτϩʔϧηϯλʔʹ௥Ճ͓ͯ͘͠ͱ ϘλϯΛԡ͚ͩ͢Ͱىಈ

Slide 15

Slide 15 text

'MVUUFS"DDFTTJCJMJUZSFMFBTFDIFDLMJTU <>   $POUSBTUSBUJPT w ςΩετͱഎܠͷίϯτϥετൺ͸গͳ͘ͱ΋ʹ͢Δ͜ͱΛਪ঑ w ແޮԽ͞ΕͨίϯϙʔωϯτΛআ͘ w ίϯτϥετνΣοΧʔαΠτͳͲ<> Ͱ֬ೝ͢Δͱྑ͍ <>IUUQTEPDT fl VUUFSEFWVJBDDFTTJCJMJUZBDDFTTJCJMJUZSFMFBTFDIFDLMJTU ΞΫηε <>IUUQTXFCBJNPSHSFTPVSDFTDPOUSBTUDIFDLFS ΞΫηε 0, /( ʢബͯ͘ಡΈͮΒ͍ʣ

Slide 16

Slide 16 text

'MVUUFS"DDFTTJCJMJUZSFMFBTFDIFDLMJTU <>   $POUFYUTXJUDIJOH w ৘ใΛೖྗ͍ͯ͠Δؒ͸ϢʔβʔͷίϯςΩετ͕ࣗಈతʹมߋ͞ΕΔ΂͖Ͱ͸ͳ͍ w ֬ೝΞΫγϣϯͳ͠ʹϢʔβʔͷίϯςΩετΛมߋ͢Δ͜ͱ͸ආ͚Δ΂͖ <>IUUQTEPDT fl VUUFSEFWVJBDDFTTJCJMJUZBDDFTTJCJMJUZSFMFBTFDIFDLMJTU ΞΫηε ࣗಈͰը໘ભҠ͢Δ࣌͸ Ϣʔβʹ఻͑Δ

Slide 17

Slide 17 text

'MVUUFS"DDFTTJCJMJUZSFMFBTFDIFDLMJTU <>   5BQQBCMFUBSHFUT w λοϓՄೳͳλʔήοτ͸͢΂ͯগͳ͘ͱ΋YQYͰ͋Δඞཁ͕͋Δ w J04)*(ͩͱYQY<> w े෼ͳύσΟϯάΛઃ͚Δ͜ͱ΋ॏཁ w "OESPJE.BUFSJBM%FTJHO . ͩͱYEQ<> <>IUUQTEPDT fl VUUFSEFWVJBDDFTTJCJMJUZBDDFTTJCJMJUZSFMFBTFDIFDLMJTU ΞΫηε <>IUUQTEFWFMPQFSBQQMFDPNEFTJHOIVNBOJOUFSGBDFHVJEFMJOFTBDDFTTJCJMJUZ ΞΫηε <>IUUQTNNBUFSJBMJPDPNQPOFOUTJDPOCVUUPOTBDDFTTJCJMJUZ ΞΫηε

Slide 18

Slide 18 text

'MVUUFS"DDFTTJCJMJUZSFMFBTFDIFDLMJTU <>   &SSPST w ॏཁͳૢ࡞͸ݩʹ໭ͤΔΑ͏ʹ͢Δඞཁ͕͋Δ w Τϥʔ͕දࣔ͞Ε͍ͯΔϑΟʔϧυʹ͸ՄೳͰ͋Ε͹मਖ਼ΛఏҊ <>IUUQTEPDT fl VUUFSEFWVJBDDFTTJCJMJUZBDDFTTJCJMJUZSFMFBTFDIFDLMJTU ΞΫηε Τϥʔͱमਖ਼ఏҊΛදࣔ

Slide 19

Slide 19 text

'MVUUFS"DDFTTJCJMJUZSFMFBTFDIFDLMJTU <>   $PMPSWJTJPOEF fi DJFODZUFTUJOH w ৭֮ҟৗϞʔυ͓ΑͼάϨʔεέʔϧϞʔυͰ࢖༻Մೳ͔ͭ൑ಡՄೳ άϥϑͷ۠ผ͕͖ͭ΍͍͢޻෉ ˞࢖༻͍ͯ͠Δͷ͸EBSUNBUIύοέʔδͷΈ <>IUUQTEPDT fl VUUFSEFWVJBDDFTTJCJMJUZBDDFTTJCJMJUZSFMFBTFDIFDLMJTU ΞΫηε

Slide 20

Slide 20 text

'MVUUFS"DDFTTJCJMJUZSFMFBTFDIFDLMJTU <>   4DBMFGBDUPST w ςΩεταΠζͱσΟεϓϨΠͷεέʔϧ͕େ͖͍৔߹Ͱ΋ಡΈ΍͘͢࢖༻Ͱ͖Δ <>IUUQTEPDT fl VUUFSEFWVJBDDFTTJCJMJUZBDDFTTJCJMJUZSFMFBTFDIFDLMJTU ΞΫηε 0WFS fl PXʹͳΒͳ͍͔ʁ ݟʹ͘͘ͳ͍ͬͯͳ͍͔ʁ

Slide 21

Slide 21 text

/FX"DDFTTJCJMJUZ'FBUVSFT JO'MVUUFS  <>  <>IUUQTEDNEFWCMPHBDDFTTJCJMJUZ fl VUUFSQSBDUJDBMUJQTUPPMTDPEFZPVMMBDUVBMMZVTF ΞΫηε

Slide 22

Slide 22 text

/FX"DDFTTJCJMJUZ'FBUVSFTJO'MVUUFS  <>    4FNBOUJDT5SFFͷίϯύΠϧΛ࠷దԽ w Ϗϧυ଎౓͕໿޲্  4FNBOUJDT3PMF"1*ͷ௥Ճ w ΢ΟδΣοτʹࡉ͔͍ηϚϯςΟοΫϩʔϧΛׂΓ౰ͯՄೳʹ  εΫϦʔϯϦʔμʔ͕ΑΓଟ͘ͷίϯςΩετΛఏڙͰ͖ΔΑ͏ʹ w ྫɿνΣοΫϘοΫεͷঢ়ଶ͕ʮΦϯʯ͔ʮΦϑʯ͔Λೝࣝͯ͠ಡΈ্͛ <>IUUQTEDNEFWCMPHBDDFTTJCJMJUZ fl VUUFSQSBDUJDBMUJQTUPPMTDPEFZPVMMBDUVBMMZVTF ΞΫηε "3*"SPMFʹϚοϐϯά͞ΕΔ ˞8FCͷΈ

Slide 23

Slide 23 text

/FX"DDFTTJCJMJUZ'FBUVSFTJO'MVUUFS  <>    ΢ΣϒͰͷϑΥʔΧεφϏήʔγϣϯ͕ΑΓεϜʔζʹ w ಥવͷδϟϯϓͳͲͷόάΛճආ  ϦϯΫΞΫηγϏϦςΟͱ5BML#BDL w ϦϯΫͱͯ͠ೝࣝ͠ʮμϒϧλοϓͯ͠ىಈʯͳͲͷώϯτΛදࣔ  8JOEPXTͷϋΠίϯτϥετϞʔυΛαϙʔτ  J04ͷԻ੠ίϯτϩʔϧͷվળ w ૢ࡞Ͱ͖ͳ͍΢ΟδΣοτʹ൪߸͕͔ͭͳ͍Α͏ʹ <>IUUQTEDNEFWCMPHBDDFTTJCJMJUZ fl VUUFSQSBDUJDBMUJQTUPPMTDPEFZPVMMBDUVBMMZVTF ΞΫηε ˞8FCͷΈ ˞7PJDF0WFSͱ͸ผ

Slide 24

Slide 24 text

4FNBOUJDTͱ͸ʁ 

Slide 25

Slide 25 text

4FNBOUJDTʹʮҙຯʯΛ఻͑Δ࢓૊Έ  w 4FNBOUJDT͕͋Δ͜ͱͰਓ͸ը໘্ͷߏ଄΍໨తΛཧղͰ͖Δ w ࠓͲͷը໘ɾঢ়ଶʹ͍Δͷ͔ʁ w Ͳ͜Λԡͤ͹࣍ͷϖʔδʹਐΊΔͷ͔ʁ w ॏཁͳ৘ใ͕Ͳ͜ʹ͋Δʁ w ͜ͷϘλϯ͸ԿͷͨΊʹ͋Δͷ͔ʁ w 'MVUUFSͰ͸֤8JEHFUʹରͯ͠ʮҙຯʯΛઃఆ͢Δ͜ͱ͕Ͱ͖Δ w ʮҙຯʯΛݩʹεΫϦʔϯϦʔμʔ͕Ի੠Ͱ಺༰΍໾ׂΛ఻͑Δ͜ͱ͕Ͱ͖Δ ࢹ֮ʹཔΒͳ͍Ϣʔβʔ΋ ֤෦෼ͷ໾ׂΛԻ੠Ͱཧղ͠ૢ࡞Ͱ͖Δ

Slide 26

Slide 26 text

4FNBOUJDT8JEHFU <>  w ೚ҙͷ8JEHFUʹ4FNBOUJDTΛ௥Ճ͢Δ͜ͱ͕Ͱ͖Δ <>IUUQTBQJ fl VUUFSEFW fl VUUFSXJEHFUT4FNBOUJDTDMBTTIUNM ΞΫηε 4FNBOUJDT8JEHFUͰ Ϙλϯͱ͍͏ҙຯΛ෇༩

Slide 27

Slide 27 text

4FNBOUJDT8JEHFU <>  w ೚ҙͷ8JEHFUʹ4FNBOUJDTΛ௥Ճ͢Δ͜ͱ͕Ͱ͖Δ <>IUUQTBQJ fl VUUFSEFW fl VUUFSXJEHFUT4FNBOUJDTDMBTTIUNM ΞΫηε 4FNBOUJDT8JEHFUͰ Ϙλϯͱ͍͏ҙຯΛ෇༩ ʮ͜Ε͸ϦϯΫͰ͋Δʯ ʮ͜Ε͸ςΩετϑΟʔϧυͰ͋Δʯ

Slide 28

Slide 28 text

4FNBOUJDT8JEHFU <>  w ೚ҙͷ8JEHFUʹ4FNBOUJDTΛ௥Ճ͢Δ͜ͱ͕Ͱ͖Δ w CPPMҎ֎ͷ߲໨΋͋Δ <>IUUQTBQJ fl VUUFSEFW fl VUUFSXJEHFUT4FNBOUJDTDMBTTIUNM ΞΫηε 4FNBOUJDT8JEHFUͰ Ϙλϯͱ͍͏ҙຯΛ෇༩ ಡΈ্͛จݴΛࢦఆͰ͖Δ ͲΜͳΞΫγϣϯͨ͠ΒԿ͕ى͜Δ͔Λ ఻͑Δ͜ͱ͕Ͱ͖Δ ʮ͜Ε͸ϦϯΫͰ͋Δʯ ʮ͜Ε͸ςΩετϑΟʔϧυͰ͋Δʯ

Slide 29

Slide 29 text

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Ͱ Ϙλϯͱ͍͏ҙຯΛ෇༩

Slide 30

Slide 30 text

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ͷͭ ಡΈ্͛͸ͭ ʮૹ৴Ϙλϯʯ

Slide 31

Slide 31 text

ඪ४8JEHFUͷϘλϯ࢖ͬͯ·͔͢ʁ 

Slide 32

Slide 32 text

NJYJͷ6*  ԡ͢ͱॖΉϘλϯ Ξχϝʔγϣϯ͢Δ'"# νΣΩ෩ͷը૾Ϙλϯ

Slide 33

Slide 33 text

NJYJͷ6*  ԡ͢ͱॖΉϘλϯ Ξχϝʔγϣϯ͢Δ'"# νΣΩ෩ͷը૾Ϙλϯ Ϙλϯ͸΄΅(FTUVSF%FUFDUPSͰ࣮૷

Slide 34

Slide 34 text

(FTUVSF%FUFDUPSͰϘλϯΛ࡞Δͱʜ  GestureDetector( onTap: () { setState(() { _message = '͍͍Ͷ͕λοϓ͞Ε·ͨ͠ʂ'; }); }, child: Container( … child: Text( '͍͍Ͷ', ), ), ),

Slide 35

Slide 35 text

(FTUVSF%FUFDUPSͰϘλϯΛ࡞Δͱʜ  GestureDetector( onTap: () { setState(() { _message = '͍͍Ͷ͕λοϓ͞Ε·ͨ͠ʂ'; }); }, child: Container( … child: Text( '͍͍Ͷ', ), ), ), (FTUVSF%FUFDUPS͸ σϑΥϧτͰ͸Ϙλϯѻ͍ʹͳΒͳ͍ͨΊ ʰʓʓϘλϯʱͱಡΈ্͛ΒΕͳ͍

Slide 36

Slide 36 text

(FTUVSF%FUFDUPSͰϘλϯΛ࡞Δͱʜ  GestureDetector( onTap: () { setState(() { _message = '͍͍Ͷ͕λοϓ͞Ε·ͨ͠ʂ'; }); }, child: Container( … child: Text( '͍͍Ͷ', ), ), ), ͞Βʹʜ

Slide 37

Slide 37 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 = '͍͍Ͷ͕λοϓ͞Ε·ͨ͠ʂ';

Slide 38

Slide 38 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΢ΟδΣοτ͸ੜͷϙΠϯλʔΠϕϯτΛर͏΋ͷͰ͋Γ εΫϦʔϯϦʔμʔܦ༝ͷԾ૝తͳλοϓ͸रΘͳ͍ ˞ճ໨ϩϯάλοϓͳͲͰඪ४δΣενϟʹ੾Γସ͑ͨΒಧ͘

Slide 39

Slide 39 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 = '͍͍Ͷ͕λοϓ͞Ε·ͨ͠ʂ'; PO1POUFS%PXOʹདྷͳ͍ͷͰ @BWBJMBCMF͕ͣͬͱUSVFʹͳΒͳ͍

Slide 40

Slide 40 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 = '͍͍Ͷ͕λοϓ͞Ε·ͨ͠ʂ'; PO5BQ͕ݺ͹Εͯ΋ Կ΋࣮ߦ͞Εͳ͍ʂ

Slide 41

Slide 41 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 = '͍͍Ͷ͕λοϓ͞Ε·ͨ͠ʂ'; PO5BQ͕ݺ͹Εͯ΋ Կ΋࣮ߦ͞Εͳ͍ʂ εΫϦʔϯϦʔμʔͷجຊૢ࡞Ͱ Կ΋ಈ͔ͤͳ͘ͳ͍ͬͯͨʜ μ ϒ ϧ λ ο ϓ

Slide 42

Slide 42 text

'MVUUFS,BJHJʹͯʜ 

Slide 43

Slide 43 text

IUUQTXXXZPVUVCFDPNXBUDI WYK-+#6+C2 ΞΫηε 

Slide 44

Slide 44 text

 IUUQTXXXZPVUVCFDPNXBUDI WYK-+#6+C2 ΞΫηε

Slide 45

Slide 45 text

 IUUQTXXXZPVUVCFDPNXBUDI WYK-+#6+C2 ΞΫηε J1IPOFͷϥΠτϞʔυͩͱϑΥϯτϨϯμϦϯά࣌ʹ ΞϯνΤΠϦΞεೱ౓͕ബ͘จࣈ͕ࡉ͘ݟ͑ͯ͠·͏໰୊

Slide 46

Slide 46 text

 IUUQTXXXZPVUVCFDPNXBUDI WYK-+#6+C2 ΞΫηε

Slide 47

Slide 47 text

 IUUQTXXXZPVUVCFDPNXBUDI WYK-+#6+C2 ΞΫηε J1IPOFͷϥΠτϞʔυͩͱϑΥϯτϨϯμϦϯά࣌ʹ ΞϯνΤΠϦΞεೱ౓͕ബ͘จࣈ͕ࡉ͘ݟ͑ͯ͠·͏໰୊ ➡︎ 4UBDLͰ5FYUΛॏͶͯղܾ

Slide 48

Slide 48 text

4UBDLͰ5FYUΛॏͶ͍ͯΔͱʜ 

Slide 49

Slide 49 text

4UBDLͰ5FYUΛॏͶ͍ͯΔͱʜ  ೋॏͰಡΈ্͛ΒΕͯ͠·͏

Slide 50

Slide 50 text



Slide 51

Slide 51 text

 NJYJͷΞΫηγϏϦςΟʹؔͯ͠ ୔ࢁ͝ҙݟΛ͍͖ͨͩ·ͨ͠

Slide 52

Slide 52 text

ͳͥ͜ͷΑ͏ͳ໰୊͕ى͖ͯ͠·ͬͨͷ͔  w νʔϜʹεΫϦʔϯϦʔμʔͷ࢖༻Ϣʔβ͕͍ͳͯ͘ؾ෇͚ͳ͔ͬͨ w ޙճ͠ʹͳΓ΍͍͢ w ࢓༷ͷᐆດ͞ w ͲΜͳಡΈ্͛จ͕͍͍ͷʁͲ͜·Ͱ΍ͬͨΒ׬੒ʁ w ༏ઌ౓ͷݟ͑ʹ͘͞ w ࣗ෼͝ͱͱͯ͠ଊ͑ͮΒ͍ w εέδϡʔϧͷ౎߹ w 'MVUUFS͸ര଎ͰϓϩμΫτΛ࡞Γͨͯ͘࠾༻͍ͯ͠Δͱ͜Ζ͕ଟ͍

Slide 53

Slide 53 text

গͣͭ͠Ͱ͖Δ͜ͱ͔Β࢝Ίͨ  w εΫϦʔϯϦʔμʔͰૢ࡞͕Ͱ͖Δ w εΫϦʔϯϦʔμʔͰίϯςϯπ͕ಡΈ্͛ΒΕΔ w Կ͕Ͱ͖ΔϘλϯͳͷ͔ಡΈ্͛ΒΕΔ w ը૾ʹ୅ସςΩετʢ"MUʣΛ෇༩Ͱ͖Δ Wʹͯ"MUػೳΛϦϦʔεʂ

Slide 54

Slide 54 text

νʔϜͰରԠ͍ͯ͘͠ମ੍Λ  w $MBVEFϨϏϡʔͰΞΫηγϏϦςΟ؍఺΋ϨϏϡʔͯ͘͠ΕΔΑ͏ʹઃఆ w νʔϜ಺ͰಡΈ্͛จݴʹ͍ͭͯٞ࿦ w ৭΍ܗ͸Ͳ͏఻͑Δʁ w ϦΞΫγϣϯΛͲ͜·ͰಡΈ্͛Δʁ ʰ͚͓͋Ίʱ͚ͩͰྑ͍ʁ ৭΋఻͑Δʁ ೥όʔδϣϯͰ͋Δ͜ͱΛ఻͑Δʁ

Slide 55

Slide 55 text

খωλɿԿΛಡΈ্͛ͤ͞Ε͹͍͍ͷʁ  w આ໌Ͱ͸ͳ͘Կ͕Ͱ͖Δͷ͔ʹϑΥʔΧε ϋʔτͷΞΠίϯϘλϯ º ͍͍ͶΛ͢ΔϘλϯ

Slide 56

Slide 56 text

খωλɿԿΛಡΈ্͛ͤ͞Ε͹͍͍ͷʁ  w આ໌Ͱ͸ͳ͘Կ͕Ͱ͖Δͷ͔ʹϑΥʔΧε w ೔ຊޠͳΒʰɺʱͱʰɻʱΛ࢖͏͜ͱͰಡΈ্͛࣌ʹฉ͖औΓ΍͘͢ͳΔ ϋʔτͷΞΠίϯϘλϯ º ͍͍ͶΛ͢ΔϘλϯ ʮ͍͍ͶϘλϯԡ͢ͱ౤ߘʹର͍͍ͯ͠Ͷ͠·͢ʯ ʮ͍͍ͶϘλϯɻԡ͢ͱ౤ߘʹରͯ͠ɺ͍͍Ͷ͠·͢ʯ

Slide 57

Slide 57 text

'MVUUFSط஌ͷ໰୊  w εΫϩʔϧͯ͠΋Ի͕໐Βͣϖʔδ਺ͷಡΈ্͕͛͞Εͳ͍<> w εΫϩʔϧ͍ͯ͠Δͱ్தͰϑΥʔΧε͕֎Ε"QQ#BS΁ඈΜͰ͠·͏<>  <>IUUQTHJUIVCDPN fl VUUFS fl VUUFSJTTVFT ΞΫηε <>IUUQTHJUIVCDPN fl VUUFS fl VUUFSJTTVFT ΞΫηε 4XJGUͰ࣮૷ εΫϩʔϧ͢ΔͱʮϐοϖʔδʯͱಡΈ্͛ 'MVUUFSͰ࣮૷

Slide 58

Slide 58 text

'MVUUFSط஌ͷ໰୊  w εΫϩʔϧͯ͠΋Ի͕໐Βͣϖʔδ਺ͷಡΈ্͕͛͞Εͳ͍<> w εΫϩʔϧ͍ͯ͠Δͱ్தͰϑΥʔΧε͕֎Ε"QQ#BS΁ඈΜͰ͠·͏<>  <>IUUQTHJUIVCDPN fl VUUFS fl VUUFSJTTVFT ΞΫηε <>IUUQTHJUIVCDPN fl VUUFS fl VUUFSJTTVFT ΞΫηε 4XJGUͰ࣮૷ εΫϩʔϧ͢ΔͱʮϐοϖʔδʯͱಡΈ্͛ 'MVUUFSͰ࣮૷ ίϯτϦϏϡʔτνϟϯεʂ

Slide 59

Slide 59 text

ࠓ೔͜ͷηογϣϯޙʹ ʰࣗ෼ͷΞϓϦ্ͰεΫϦʔϯϦʔμʔىಈͤͯ͞ΈΑ͏ʂʱ ʰΞΫηγϏϦςΟʹ͍ͭͯνʔϜͰ࿩ͯ͠Έ͍ͨͳʱ ͱࢥͬͯ͘ΕͨΒخ͍͠Ͱ͢ʂ 

Slide 60

Slide 60 text

͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ  w USZ4XJGU5PLZPʹग़ల͍ͯͨ͠%FTJHO-BC<> Ͱ৭ʑڭ͑ͯ΋Β͍·ͨ͠ w 8$"(ʹ͍ͭͯ΍ϛχϚϜͲ͜·ͰಡΈ্͛ͤ͞Δ΂͖͔ʁͳͲ w NJYJͷট଴ϦϯΫɺ͋Γ·͢ <>IUUQTYDPNTDJWPOFTUBUVT T ΞΫηε

Slide 61

Slide 61 text

௥ه  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 ΞΫηε