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
DartとFlutterでアプリ開発
Search
ken
July 05, 2019
Programming
0
1.3k
DartとFlutterでアプリ開発
2019/07/05
「宮城アプリ開発勉強会 #1」の資料です。
Dart/Flutterに興味はあるけどやった事無い、という皆さんに向けて、
こんな感じだよー、という雰囲気の資料です。
ken
July 05, 2019
Tweet
Share
Other Decks in Programming
See All in Programming
Catch Up: Go Style Guide Update
andpad
0
230
Web フロントエンドエンジニアに開かれる AI Agent プロダクト開発 - Vercel AI SDK を観察して AI Agent と仲良くなろう! #FEC余熱NIGHT
izumin5210
3
550
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
12
4.7k
CSC305 Lecture 06
javiergs
PRO
0
250
ALL CODE BASE ARE BELONG TO STUDY
uzulla
25
6.2k
なぜあの開発者はDevRelに伴走し続けるのか / Why Does That Developer Keep Running Alongside DevRel?
nrslib
3
410
AI Agent 時代的開發者生存指南
eddie
3
1.8k
AIと人間の共創開発!OSSで試行錯誤した開発スタイル
mae616
1
640
株式会社 Sun terras カンパニーデック
sunterras
0
340
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
440
私達はmodernize packageに夢を見るか feat. go/analysis, go/ast / Go Conference 2025
kaorumuta
2
590
2分台で1500examples完走!爆速CIを支える環境構築術 - Kaigi on Rails 2025
falcon8823
3
3.7k
Featured
See All Featured
For a Future-Friendly Web
brad_frost
180
10k
A designer walks into a library…
pauljervisheath
209
24k
Practical Orchestrator
shlominoach
190
11k
Thoughts on Productivity
jonyablonski
70
4.9k
Context Engineering - Making Every Token Count
addyosmani
7
260
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Java REST API Framework Comparison - PWX 2021
mraible
34
8.9k
The Invisible Side of Design
smashingmag
302
51k
Rails Girls Zürich Keynote
gr2m
95
14k
Six Lessons from altMBA
skipperchong
29
4k
Navigating Team Friction
lara
190
15k
Transcript
DartとFlutterで アプリ開発 宮城アプリ開発勉強会 2019/07/05
⾃⼰紹介 ๏ 佐藤健(さとうけん) • フリーランスのプログラマ ๏ ⾔語 • Flash/ActionScript •
TypeScript ๏ 趣味 • スラックライン(楽しいよ) • トランポリン(ハマるよ)
Dart? JavaScriptの代替になりたかった プログラミング⾔語
Flutter? iOS/Androidアプリ開発の Dart⽤フレームワーク
Dart、誕⽣ ๏ Googleが開発 ๏ 2011年初公開 • JavaScriptの代替として新規開発 • DartVMで動作する •
DartVMはいずれChromeに統合される • …はずだったのだが…
Dart、⽅向転換 ๏ 2015年 DartVMのChrome統合を断念 • JavaScriptへコンパイルする形へ ๏ 2017年 TypeScriptがGoogle社内標準⾔語に Ͳ͏ߟ͑ͯɺ
%BSUɺ͜ͷ··ফ͑ΔͩΖɻɻɻ
๏ 2018年2⽉ 突然の再起動 • 22⽇ Dart2の発表 • 27⽇ Flutter(Beta)の発表 ๏
2018年12⽉ • 4⽇ Flutter1.0 リリース ๏ 2019年7⽉現在 • Dart2.4.0(2019-06-27) • Flutter 1.5.4-hotfix.2 • 開発版は1.7.11が最新 Dart、再起動 ٸʹ׆ൃʹͳͬͨʜ
๏ Androidアプリが作れる ๏ iOSアプリが作れる ๏ 同じソースコードで両⽅作れる • iOSっぽいUIパーツも⽤意されている Flutter、概要 ಉ͡ιʔείʔυͰ࡞ΕΔΑɻ
ͪΖΜͦΕͳΓͷखؒඞཁ͚ͩͲͶɻ w w w
Flutter、余談 ๏ Fuchsia(フクシア、フクシャ、フューシャ) • Googleが開発中の新しいOS(謎) • UIとアプリはDart/Flutterで作成
Dart/Flutter、開発環境 ๏ Dartを試すだけなら • https://dartpad.dartlang.org/ ๏ きちんと環境を構築するなら • AndroidStudio もしくは
VSCode • https://flutter.dev/ • 「Get Started」の通り 1.FlutterSDKを落としてパス通す 2.flutter doctorコマンドの⾔う事聞く
Dart/Flutter Don't Think. Feel.
Flutter、画⾯構築 ๏ 画⾯の全てはWidget ๏ Widgetは基本的には2種類 • StatelessWidget • StatefulWidget ๏
全てのWidgetは上記2種の継承クラス
サンプルコード import 'package:flutter/material.dart'; void main() { return runApp(MyApp()); } class
MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Hello World App'), ), body: Center( child: Text( 'Hello World', style: TextStyle( color: Colors.green, fontSize: 90, ), ), ), ), ); } }
サンプルコード(1) import 'package:flutter/material.dart'; void main() { return runApp(MyApp()); } class
MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return (লུ) } } ๏ main関数が最初に呼ばれる ๏ ‘new’は省略可能 ๏ runApp関数にWidgetのインスタンスを渡す ๏ アプリルートのWidgetに
サンプルコード(2) class MyApp extends StatelessWidget { @override Widget build(BuildContext context)
{ return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Hello World App'), ), body: (লུ) ), ); } } ๏ MaterialAppWidget ๏ ScaffoldWidget ๏ AppBarWidget ๏ TextWidget
サンプルコード(3) class MyApp extends StatelessWidget { @override Widget build(BuildContext context)
{ return MaterialApp( home: Scaffold( appBar: (লུ), body: Center( child: Text( 'Hello World', style: TextStyle( color: Colors.green, fontSize: 90, ), ), ), ), ); } }
レイアウト(配置の調整) Center( child: Text( 'Hello World', style: TextStyle((লུ)), ), )
Align( alignment: Alignment.bottomRight, child: Text( 'Hello World', style: TextStyle((লུ)), ), )
レイアウト(縦に並べる) Center( child: Text( 'Hello World', style: TextStyle((লུ)), ), )
Column( children: <Widget>[ Text( 'Hello World', style: TextStyle((লུ)), ), Text( 'Hello World', style: TextStyle((লུ)), ), ], ),
レイアウト(横に並べる) Center( child: Text( 'Hello World', style: TextStyle((লུ)), ), )
Row( children: <Widget>[ Text( 'Hello World', style: TextStyle((লུ)), ), Text( 'Hello World', style: TextStyle((লུ)), ), ], ),
画像を表⽰ Center( child: Image.network( 'http://jinten.net/logo.jpg', ), )
ボタン Center( child: RaisedButton( child: Text( 'Ϙλϯ', style: TextStyle(fontSize: 20),
), onPressed: () { print('Button pressed!!'); }, ), ),
ダイアログ onPressed: () { showDialog( context: context, builder: (BuildContext context)
{ return AlertDialog( title: Text('λΠτϧ'), content: Text('ຊจຊจຊจຊจ'), actions: <Widget>[ FlatButton( child: Text('Cancel'), onPressed: () {}, ), FlatButton( child: Text('OK'), onPressed: () {}, ), ], ); }, ); },
ダイアログ(iOS⾵) onPressed: () { showDialog( context: context, builder: (BuildContext context)
{ return CupertinoAlertDialog( title: Text('λΠτϧ'), content: Text('ຊจຊจຊจຊจ'), actions: <Widget>[ CupertinoButton( child: Text('Cancel'), onPressed: () {}, ), CupertinoButton( child: Text('OK'), onPressed: () {}, ), ], ); }, ); },
Dartパッケージの追加 ๏ https://pub.dev
Dart/Flutterの 良い所・悪い所
良い! ๏ 並べる系レイアウトなら⾮常に簡単 ๏ よくあるUIパーツなら⽤意されてる • pub.dev探せばそこそこのモノは⾒つかる ๏ Googleが開発している •
Googleサービス/プロダクトとの⾼い親和性 • firebaseとか ๏ (少なくとも今は)とても活発 ๏ AndroidとiOSのどちらにも対応できる • 将来的にはWeb, Desktop, RaspberryPi, 他 w w (PPE
悪い… ๏ ⾃由なレイアウトには対応しづらい • ゲームとか ๏ まだまだ新しい • 情報が少ない •
知名度が低い ๏ 「AndroidとiOSをワンソースで」の暴⾛ ๏ iOS⾵のUIという罠 ๏ ネストが深くなりがち ๏ スタンダートな設計などが確⽴されていない w #BE
まとめ %BSU'MVUUFSɺ ࠓɺ·͞ʹաظʹ͋Δͷͩʂ ৽͍͠Ϟϊ͖ͳΒ ৮ͬͯΈΔՁΞϦʂ