Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DartとFlutterでアプリ開発

ken
July 05, 2019

 DartとFlutterでアプリ開発

2019/07/05
「宮城アプリ開発勉強会 #1」の資料です。

Dart/Flutterに興味はあるけどやった事無い、という皆さんに向けて、
こんな感じだよー、という雰囲気の資料です。

ken

July 05, 2019
Tweet

Other Decks in Programming

Transcript

  1. ⾃⼰紹介 ๏ 佐藤健(さとうけん) • フリーランスのプログラマ ๏ ⾔語 • Flash/ActionScript •

    TypeScript ๏ 趣味 • スラックライン(楽しいよ) • トランポリン(ハマるよ)
  2. ๏ 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、再起動 ٸʹ׆ൃʹͳͬͨʜ
  3. Dart/Flutter、開発環境 ๏ Dartを試すだけなら • https://dartpad.dartlang.org/ ๏ きちんと環境を構築するなら • AndroidStudio もしくは

    VSCode • https://flutter.dev/ • 「Get Started」の通り
 1.FlutterSDKを落としてパス通す
 2.flutter doctorコマンドの⾔う事聞く
  4. サンプルコード 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, ), ), ), ), ); } }
  5. サンプルコード(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に
  6. サンプルコード(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
  7. サンプルコード(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, ), ), ), ), ); } }
  8. レイアウト(配置の調整) Center( child: Text( 'Hello World', style: TextStyle((লུ)), ), )

    Align( alignment: Alignment.bottomRight, child: Text( 'Hello World', style: TextStyle((লུ)), ), )
  9. レイアウト(縦に並べる) Center( child: Text( 'Hello World', style: TextStyle((লུ)), ), )

    Column( children: <Widget>[ Text( 'Hello World', style: TextStyle((লུ)), ), Text( 'Hello World', style: TextStyle((লུ)), ), ], ),
  10. レイアウト(横に並べる) Center( child: Text( 'Hello World', style: TextStyle((লུ)), ), )

    Row( children: <Widget>[ Text( 'Hello World', style: TextStyle((লུ)), ), Text( 'Hello World', style: TextStyle((লུ)), ), ], ),
  11. ダイアログ 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: () {}, ), ], ); }, ); },
  12. ダイアログ(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: () {}, ), ], ); }, ); },
  13. 良い! ๏ 並べる系レイアウトなら⾮常に簡単 ๏ よくあるUIパーツなら⽤意されてる • pub.dev探せばそこそこのモノは⾒つかる ๏ Googleが開発している •

    Googleサービス/プロダクトとの⾼い親和性 • firebaseとか ๏ (少なくとも今は)とても活発 ๏ AndroidとiOSのどちらにも対応できる • 将来的にはWeb, Desktop, RaspberryPi, 他 w w (PPE
  14. 悪い… ๏ ⾃由なレイアウトには対応しづらい • ゲームとか ๏ まだまだ新しい • 情報が少ない •

    知名度が低い ๏ 「AndroidとiOSをワンソースで」の暴⾛ ๏ iOS⾵のUIという罠 ๏ ネストが深くなりがち ๏ スタンダートな設計などが確⽴されていない w #BE