Flutterの魔法
Tim Messerschmidt
Regional Lead, Developer Relations
messerschmidt@google.com
@SeraAndroid
Translation by yokmama with google translate
Flutterとは
SDK を使えばモダンで美しいアプリを簡単につくることができます
実行 できる機種はiOSとAndroidの両機種です
これは Googleによって開発されたオープンソースのツールキットです*
100を超えるオープンソースコミュティーが貢献しています
* 現在はまだベータです
Flutterは誰のためのもの?
デザイナーはAndoridとiOSの両方でブランドドリブン開発ができます
試行者は試作品の開発時点で実際の動作にちかく、また高速に作れます
開発者は 素晴らしい開発ツール、容易に学習できる言語、豊富なウィジェット、素晴らしいIDEを使えるといったメリットがあります。Flutterの機能を使うことで、楽しいアプリ開発をすることができます。
デザイン指向の開発フロー
ここには何が見えますか?
レイアウトの図表
ボトムアップ設計
Flutterの中のアナログなHTML/CSS
var container = new Container( // grey box� child: new Text(� "Lorem ipsum",� style: new TextStyle(� fontSize: 24.0� fontWeight: FontWeight.w900,� fontFamily: "Georgia",� ),� ),� width: 320.0,� height: 240.0,� color: Colors.grey[300],�);
<div class="greybox">� Lorem ipsum�</div>�
.greybox {� background-color: #e0e0e0; /* grey 300 */� width: 320px;� height: 240px;� font: 900 24px Georgia;� }
効果的なツールの使い方
$ flutter doctor
Flutter環境を確認し、ターミナルにレポートを表示します
$ flutter upgrade
Flutter SDKとパッケージの両方を更新します
pubspec.yaml
name: flutter_project
description: An amazing Flutter project using Firebase Auth
dependencies:
flutter:
sdk: flutter
firebase_auth: "^0.2.5"
pubspec.yaml
name: flutter_project
description: An amazing Flutter project using Firebase Auth
dependencies:
flutter:
sdk: flutter
firebase_auth: ">=0.1.2 <0.2.6"
$ flutter packages get
Flutterのyamlに書かれたパッケージを取得しインストールします
$ flutter packages upgrade
パッケージで利用可能な最新のパッケージを取得しインストールします
$ flutter format
Flutterのコードスタイルに従ってコードをフォーマットします
$ flutter analyze
コードの文法ミスや簡単なコーディングミスを分析し間違いを発見します
ホットリロード
実行中のDart VMに更新されたソースコードを反映する
ステートフル: アプリケーションの状態はリロード後も保持されます.
深い入れ子になっている画面もすばやく更新されます
Dartの展望
ステートメントレベルにおける、シングルステッピングデバッガとプロファイラ
Flutter runを使用してアプリを起動すると自動的に実行されます
実行されたコードの行を見ることができます
メモリ割り当ての状態を確認できます
メモリリークや断片化したメモリをデバッグできます
ウィジェットの威力
素晴らしい見た目と高速なウィジェット
すべてウィジェットです
グローバルなレイアウトシステムとさよなら
new Center(
child: new Text('Centered Text', style: textStyle),
)
ローカルレイアウト: すべてのウイジェットはそれ自信のレイアウトを定義します。親に子がセンターになっているといった事は伝える必要はありません。
ステートフルウィジェット
vs.
ステートレスウィジェット
ウィジェットのカスタマイズと拡張
Flutterのウィジェットは簡単にカスタマイズできるように設計されています
構成: ウィジェットは小さなウィジェットで構築されており、組み合わせて新しいカスタムウィジェットを作成することができます。
class RaisedButton extends StatelessWidget {
...
}
各層は下の層によって構築されます
Skia
Dart
Text
Foundation
Animation
Painting
Rendering
Widgets
Material
Gestures
Engine
(C++)
Framework
(Dart)
Cupertino
プラットフォームチャンネル
プラットフォームチャンネルを使用すると、ネイティブと相互にメソッドのやり取りができます
例: バッテリーレベルの取得*
class MainActivity() : FlutterActivity() {� private val CHANNEL = "samples.flutter.io/battery"�� override fun onCreate(savedInstanceState: Bundle?) {� super.onCreate(savedInstanceState)� GeneratedPluginRegistrant.registerWith(this)�� MethodChannel(flutterView, CHANNEL).setMethodCallHandler { call, result ->� // TODO� }� }�}
* この例はAndroidのKotlinで書かれています
呼び出し時の引数を使う方法*
MethodChannel(flutterView, CHANNEL).setMethodCallHandler { call, result ->� if (call.method == "getBatteryLevel") {� val batteryLevel = getBatteryLevel()� if (batteryLevel != -1) {� result.success(batteryLevel)� } else {� result.error("UNAVAILABLE", "Battery level not available.", null)� }� } else {� result.notImplemented()� }�}
* この例はAndroidのKotlinで書かれています
Flutter側からネイティブのメソッドを使う方法
String _batteryLevel = 'Unknown battery level.';
Future<Null> _getBatteryLevel() async {
String batteryLevel;
try {
final int result = await platform.invokeMethod('getBatteryLevel');
batteryLevel = 'Battery level at $result % .';
} on PlatformException catch (e) {
batteryLevel = "Failed to get battery level: '${e.message}'.";
}
setState(() {
_batteryLevel = batteryLevel;
});
}
パフォーマンスのための最適化
Webのリアクションフレーム
Compare
Update
Real
DOM
Virtual DOM
Application
Platform
Rende
r
Canvas
Events
モバイルのリアクションフレーム
Compare
Update
Platform
Widgets
Virtual
Widgets
Application
Platform
Rende
r
Canvas
Events
Flutterを使うと
Widget
Tree
Rende
r
Canvas
Events
Application
Platform
Dartによる高速演算
“Flutterで作成されたUIは60fpsで動作し、他のクロスプラットフォーム開発にのフレームワークで作成されたアプリよりはるかに優れています”
code.tutsplus.com/tutorials/developing-an-android-app-with-flutter--cms-28270
“DartとFlutterを使ったコーディングは、私がモバイルデベロッパを初めたときの喜びを再現しました、いいえ B.S.”
traversoft.com/blog/2017/08/08/conference-app-flutter
"UIはバターのように滑らか (リリースビルドの場合), 私はこんなに滑らかなAndroidアプリを知りません。"
Pascal Welsch, Speaker at Droidcon Berlin
その他の資料
ブログ: WmLelerによるFlutterについて革新的なことについて: goo.gl/bZcFR9
動画: Adam BarthによるFlutterのレンダリングパイプラインについて: youtu.be/UUfXWzp0-DU
動画: Ian Hicksonによる、マホガニーの階段: youtu.be/dkyY9WCGMi0
もちろんこれも: github.com/flutter & flutter.io
ありがとう!
Tim Messerschmidt
Regional Lead, Developer Relations
messerschmidt@google.com
@SeraAndroid
Translated by yokmama with google translate.