Slide 1

Slide 1 text

Flutter × 2dimensions Flutter Meetup Tokyo #2 2018/05/31

Slide 2

Slide 2 text

About me Tazawa Kenji (@tazakeeeeeeee) Recruit Marketing Partners Co., Ltd. Data Analyst

Slide 3

Slide 3 text

2dimensions? https:/ /developers.googleblog.com/2018/05/ready-for-production-apps-flutter-beta-3.html

Slide 4

Slide 4 text

2D character animation tool vector animation tools for app and game designers alike released Coming soon as a free beta 2dimensions? %JNFOTJPOTP⒎FSTQPXFSGVMSFBMUJNFBOJNBUJPOUPPMT https:/ /www.2dimensions.com/

Slide 5

Slide 5 text

NIMA Supported Assets Nima supports most popular image formats, image sequences, and PSD files (8-bit mode). Be sure to flatten any PSD layer effects before importing into Nima. PSD Imported PSDs appear as a single top-level asset (with a PSD icon), which can be expanded to reveal all the layers included in it. Image Sequences Import an image sequence into Nima by dragging and dropping multiple images that are named sequentially (e.g. image_000.png, image_0001.png, image_0002.png, etc). https:/ /www.2dimensions.com/learn/manual/assets

Slide 6

Slide 6 text

NIMA Supported Assets Nima supports most popular image formats, image sequences, and PSD files (8-bit mode). Be sure to flatten any PSD layer effects before importing into Nima. PSD Imported PSDs appear as a single top-level asset (with a PSD icon), which can be expanded to reveal all the layers included in it. Image Sequences Import an image sequence into Nima by dragging and dropping multiple images that are named sequentially (e.g. image_000.png, image_0001.png, image_0002.png, etc). https:/ /www.2dimensions.com/learn/manual/assets

Slide 7

Slide 7 text

NIMA ·ͣ͸ը૾ͷΠϯϙʔτɺΞχϝʔγϣϯ࡞੒ɺΞχϝʔ γϣϯϑΝΠϧͷΤΫεϙʔτͷ࿩

Slide 8

Slide 8 text

NIMA https:/ /www.2dimensions.com/learn/manual/assets example) import PSD

Slide 9

Slide 9 text

NIMA import Image Sequences

Slide 10

Slide 10 text

NIMA

Slide 11

Slide 11 text

NIMA

Slide 12

Slide 12 text

NIMA export ϑΝΠϧ໊͸/*."Ͱͷ ϓϩδΣΫτ໊͕࢖ΘΕ Δɻ

Slide 13

Slide 13 text

NIMA #PZ3VOQOH㱺֤ύʔπ ͕QOHϑΝΠϧʹऩΊͯ ͍ΔɻQOHϑΝΠϧʹ· ͱΊͯಡΈࠐΈෛՙ௿ݮɻ #PZ3VOOJNB㱺Ξχϝʔ γϣϯͷ಺༰ͱQOHͷ࢖ ༻ΤϦΞΛอ࣋

Slide 14

Slide 14 text

NIMA example) export PSD 14%ΛΠϯϙʔτͯ͠Ξ χϝʔγϣϯΛੜ੒ͨ͠ ΄͏͕ϑΝΠϧ༰ྔͷ࡟ ݮʹͭͳ͕Δɻ

Slide 15

Slide 15 text

NIMA ࣍͸ɺ࣮૷ํ๏ʹ͍ͭͯ

Slide 16

Slide 16 text

Flutter Code dependencies: flutter: sdk: flutter nima: ^1.0.0 flutter: uses-material-design: true assets: - assets/BoyRun.nima - assets/BoyRun.png pubspec.yaml

Slide 17

Slide 17 text

Flutter Code import 'package:nima/nima_actor.dart'; return new Scaffold( … body: new NimaActor("assets/BoyRun", alignment: Alignment.center, fit: BoxFit.contain, animation: ‘run’, mixSeconds: 0.5, completed: (String animationName) {//do something}); ); main.dart BOJNBUJPOʹ͸/*."Ͱ࡞੒ͨ͠Ξχϝʔγϣϯͷ໊લΛࢦఆ͢Δɻ

Slide 18

Slide 18 text

NIMA ͜Ε͚ͩͰऴྃʂ ͍Ζ͍Ζ૊Έ߹ΘͤͨαϯϓϧΛޚཡ͍ͩ͘͞ɻ

Slide 19

Slide 19 text

NIMA *NBHF4FRVFODFTͰ &YQPSUͨ͠ϑΝΠϧͰ࣮ ߦ͢Δͱ(FOFSJDTͰ &YDFQUJPO͕ൃੜ͠· ͢ɻ 13Λग़ͯ͠ରԠࡁΈɻ

Slide 20

Slide 20 text

Sample ෳ਺ͷ/JNB"DUPSʢΞόλʔͱഎܠͭʣ Λ4UBDLͤͨ͞αϯϓϧͰ͢ʢ"OESPJE ΤϛϡϨʔλʣ˞ελσΟαϓϦӳ୯ޠ ͷ࠶ݱ ΞόλʔͷΞχϝʔγϣϯ͸૸Δεϐʔ υΛஈ֊෼༻ҙ͠ɺϘλϯΛԡ͢ͱΞ χϝʔγϣϯΛ੾Γସ͑ΔΑ͏ʹ࣮૷͠ ͍ͯ·͢ɻ ೥͙Β͍લͷ"OESPJE୺຤Ͱىಈ͞ ͤͨͱ͜ΖಡΈࠐΈ࣌ʹগ͠ΧΫ͍ͭͨɻ

Slide 21

Slide 21 text

NIMA OJNBQBDLBHFͷඳը࣮૷ʹ͍ͭͯ

Slide 22

Slide 22 text

nima Impelement class NimaActor extends LeafRenderObjectWidget /// A superclass for RenderObjectWidgets that configure RenderObject subclasses /// that have no children. abstract class LeafRenderObjectWidget extends RenderObjectWidget { … @override LeafRenderObjectElement createElement() => new LeafRenderObjectElement(this); } /// An [Element] that uses a [LeafRenderObjectWidget] as its configuration. class LeafRenderObjectElement extends RenderObjectElement { /// Creates an element that uses the given widget as its configuration. LeafRenderObjectElement(LeafRenderObjectWidget widget): super(widget); … }

Slide 23

Slide 23 text

nima Impelement class NimaActor extends LeafRenderObjectWidget LeafRenderObjectWidget͸ࢠΛ࣋ͨͳ͍RenderObjectWidgetɻLeafRenderObjectElement͸ͦͷઃఆɻ RenderObjectWidget͸ @protected RenderObject createRenderObject(BuildContext context); @protected void updateRenderObject(BuildContext context, covariant RenderObject renderObject) { } createRenderObjectϝιουͰRenderObjectΛੜ੒ɺupdateRenderObjectϝιου Ͱߋ৽Λͯ͠ඳըΛ੾Γସ͍͑ͯΔײ͡ɻ ࣮ࡍͷඳըॲཧ͸RenderObject಺ͷpaintϝιουͰPaintingContext͕อ͍࣋ͯ͠Δ canvasΦϒδΣΫτ࢖༻͍ͯ͠Δɻ

Slide 24

Slide 24 text

nima Impelement class NimaActorRenderObject extends RenderBox{ … @override void paint(PaintingContext context, Offset offset){ final Canvas canvas = context.canvas; … } } nima_actiorͰ͸RenderObjectΛܧঝͨ͠RenderBoxΛܧঝͯ͠NimaActorRenderObject Λ࡞੒͍ͯ͠Δɻ ※paintϝιου಺ͷcanvas΁ͷॲཧίʔυΛ࡟ͬͨΒԿ΋ඳը͞Εͳ͘ͳͬͨ ࢀর RenderObject | https://docs.flutter.io/flutter/rendering/RenderObject-class.html RenderBox | https://docs.flutter.io/flutter/rendering/RenderBox-class.html

Slide 25

Slide 25 text

nima Impelement class NimaActor extends LeafRenderObjectWidget{ @override RenderObject createRenderObject(BuildContext context){ return new NimaActorRenderObject() } @override void updateRenderObject(BuildContext context, covariant NimaActorRenderObject renderObject){ } } class NimaActorRenderObject extends RenderBox{ @override void paint(PaintingContext context, Offset offset){ final Canvas canvas = context.canvas; … //ඳըॲཧ } }

Slide 26

Slide 26 text

nima Impelement ;ͱͨ͠ॠؒؾʹͳͬͨͷͰࢼ͠ʹRaisedButtonͷ࣮૷Λ௥ͬͯΈͨͱ ͜Ζɺͪ͜Β͸SingleChildRenderObjectWidgetʹͨͲΓண͍ͨɻ NimaActor΋RaisedButton΋ݩ͸RenderObjectWidgetɻࢠΛڐ͢ ͔ͱ͔ͷϓϩύςΟɺ੍໿͕ҟͳΔ͚ͩɻ ͳͷͰجຊී௨ͷwidgetͱͯ͠NimaActor͸ѻ͑Δɻ͸ͣɻɻɻ ઌఔͷαϯϓϧͰ͸࣮ࡍʹTransformΛ࢖༻ͯ͠NimaActorͷॖখΛ͠ ͍ͯΔ͠ɺGestureDetectorͰϥοϓ͢Δ͜ͱͰΫϦοΫΠϕϯτ΋औ ಘͰ͖ͨɻ

Slide 27

Slide 27 text

Impressions ͪΐͬͱͨ͠ΞχϝʔγϣϯΛ࡞࣮ͬͯ૷͢Δʹ͸ָɻࣗྗͰ࣮૷͢ Δʹͯ͠΋RenderObjectWidgetͷαϒΫϥεୡΛ࢖͏࣮૷ʹͳΔؾ ͕͢ΔͷͰ޻਺Λߟ͑Δͱ࢖ͬͯଛ͸ͳ͍ ͍͏ͯwidgetͰ͢ ࠓճ͸ૉࡐͷ౎߹΋͋ΓImageSequencesͰ࣮૷͕ͨ͠ɺ࣮ࡍʹ࢖༻ ͢Δ৔߹͸PSDϑΝΠϧͰΞχϝʔγϣϯΛ࡞੒ͨ͠΄͏༰ྔ࡟ݮͷ ؍఺͔Β͸ྑͦ͞͏ NIMAͷτϥΠΞϧظ͕ؒ7೔ؒͳͷͰݕূɾ࣮૷͔ΒεϥΠυ࡞੒ͷ ؒʹτϥΠΞϧظ͕ؒऴྃͯ͠εΫγϣͱΕͳ͘ͳͬͯࠔͬͨ ݒ೦ ୭͕Ξχϝʔγϣϯ࡞ΔͶΜ໰୊͸͋Γͦ͏ ෳ਺ղ૾౓΁ͷରԠ→export࣌ʹը૾αΠζࢦఆͰ͖Δ͔ΒରԠͰ͖ ͦ͏͔ͳʢը࣭͸Ͳ͏ͳΔ͔

Slide 28

Slide 28 text

thank you.