-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_Flutter
- 戻る
独自描画と、Dart言語(JavaScriptの該当節を参照)が特徴。
- Dart de discon と思いきや、
- Dart de 昨今、隆盛の予感。
- ReactNativeを強く意識した後発のフレームワークと言われている。
- 内部で他の技術を利用しておらず、OS以外の制限を受けない。
- 2018年2月に発表されたDart2&Flutterが進撃を開始した。
開発ツールは Node.js系ではない。
-
SDK形式だが、CUIなのでIDEからプラグイン可能。
-
VS Code(統合開発環境 (IDE)の該当節を参照)プラグインから使用可能。
-
お勧めのIDEは、Android Studioプラグイン。
-
なお、Xcodeのプラグインは存在しない模様
(エディットはせず、ビルドのみを行う)。
-
-
この方式は.NET Coreと同じ。
開発環境を見ると、
-
VM上で動作
- iOS : Xcode
- Android : Android Studio
- Windows : Flutter for Desktop
-
トランスパイル
- WWWブラウザ:Flutter for Web
を使用する事になっている。
なし。
- そう言う意味では、VB6やWindows Forms方式。
- XAMLやJSX(Reactの該当節を参照)などはデメリットも多いのだろうか?
-
Reactに似ている。
- DOM操作系ではなく、仮想DOM(Reactの該当節を参照)を持っている。
- stateが変化したときに再描画を指示する。
-
参考
- Reduxアーキテクチャでのflutter
https://qiita.com/ko2ic/items/97aeaa4bdbaa6a7e6cbe
FlutterはReactNativeにインスパイアされているので、flux/reduxと相性がいい。
- Reduxアーキテクチャでのflutter
Flutter for Webとか、Flutter on the webなどと呼ばれている。
-
FlutterによるSPA開発が可能。
-
順番が逆だけど、
- React(web) → ReactNative(native)
- Flutter(native) → Flutter on the web(web)
の様な関係。
※ ...と思ったら、「React Native for Web」と言うモノも在るらしい(...頭痛が)。
-
ただし、現時点では、
モバイルアプリ専用開発ツールと
考えていたほうが良いとのこと。 -
仕組みとしては、
スマホ上のVMで動作するのではなく、
JavaScriptにトランスパイルされて動作する。
Mac、Windows、Linux上で動作するFlutterアプリを開発するための仕組み。
- Flutter 2.10の安定版ビルドに同梱されている模様
- 「Microsoft Store」でアプリを公開することも可能
flutter_app以下
-
flutter_app.iml
モジュール定義ファイル -
pubspec.yaml
パッケージ構成ファイル
-
ソース
-
lib
ソース・コード(src的な)- main.dart
- 任意のdartファイル、フォルダ
-
test
テスト・コード
-
-
ビルド・スクリプト
- android
Gradle - ios
Xcode
- android
任意のファイル、フォルダ
App -> Page -> PageState -> その他のWidget
-
ReactのState(Reactの該当節を参照)と同じ。
-
Stateクラスは以下のメソッドを持つ。
-
Widgetの入れ子でFlutterは構成される。
-
Widgetクラスは必ず他のWidgetを返すbuildメソッドを持つ。
-
-
StatelessWidget
- 値を保持せず。画面の再描画を行わない。
- 必ず他のWidgetを返すbuildメソッドを持つ。
-
StatefulWidget
- Stateクラスで存続期間中は値を保持し、画面の再描画を行う。
- buildメソッドを持たない。createStateメソッドを持つ。
- createStateで生成されたStateクラスがbuildメソッドを持つ。
- このbuildメソッドは、要素の詰まったScaffoldを返す。
-
main.dart
import 'package:flutter/material.dart';
// メイン関数、実行時に最初に呼ばれる
// runAppメソッドは引数のwidgetをスクリーンにアタッチする
// runAppメソッドの引数のWidgetが画面いっぱいに表示される
void main() {
runApp(MyApp());
}
// アプリケーション全体管理する
// runAppの引数として生成され、
// 最初にインスタンス化される
// ルートのStatelessWidgetクラス
class MyApp extends StatelessWidget {
// buildのoverrideで、MaterialAppを返す。
@override
Widget build(BuildContext context) {
// MaterialAppで画面のtitle, theme, home等を設定
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
// themeは、"hot reload"に対応している云々...。
primarySwatch: Colors.blue,
),
// Home? Page?
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
// ホーム・ページは、StatefulWidget クラス
class MyHomePage extends StatefulWidget {
// コンストラクタ
MyHomePage({Key key, this.title}) : super(key: key);
// 定数定義
// MyAppのbuildメソッドの返すMaterialAppのコンストラクタのhome引数に設定される。
// 要するに、親Widget(MyApp)から提供される子Widget(MyHomePage)。
// - Stateのbuildメソッドで使用される値(ここではタイトル)を保持する。
// - Widgetサブクラスのフィールドは、常に "final "とマークされる。
final String title;
// createStateのoverrideでState(MyHomePageState)を設定する。
@override
_MyHomePageState createState() => _MyHomePageState();
}
// Widget(MyHomePage)から呼ばれるStateクラス
class _MyHomePageState extends State<MyHomePage> {
// メンバの定義
int _counter = 0;
// メソッドの定義
void _incrementCounter() {
// setStateにdelegateしてメンバを更新すると画面が再描画される。
// Stateを継承しているので、setState.Stateかな。
// https://api.flutter.dev/flutter/widgets/State/setState.html
setState(() {
_counter++;
});
}
// buildのoverrideで、Scaffoldを返す。
@override
Widget build(BuildContext context) {
// 画面全体のWidgetツリーを構成し
// 仮想DOMの部分描画を実現する。
// アプリケーションバー -> タイトル、
// ホーム画面のbodyプロパティを提供
return Scaffold(
// アプリバーWidget
appBar: AppBar(
// MyHomePage.titleを使用してtitleを設定。
title: Text(widget.title),
),
// 子Widgetを中央に配置するレイアウトWidget。
body: Center(
// 子Widgetを縦に並べるレイアウトWidget。
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
// ...
floatingActionButton: FloatingActionButton(
// ボタン押下時のアクションに、
// Stateクラスに定義したState更新(再描画)メソッドをセット
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
), // この末尾のコンマは、自動フォーマットのため。
);
}
}-
Flutter感想|mizchi|note
https://note.com/mizchi/n/n53d0b34b25ac -
iOSネイティブアプリ開発者から見たFlutter – Flutter 🇯🇵 – Medium
https://medium.com/flutter-jp/flutter-ios-5b2178018d3e
-
Google、「Flutter 1.9」リリース、Webアプリ生成機能を統合。
Flutterは単一コードでネイティブアプリとWebアプリを開発できるフレームワークに
https://www.publickey1.jp/blog/19/googleflutter_19webflutteriosandroidwindowsweb.html -
Flutter、Linuxデスクトップアプリの開発対応へ、アルファ版を発表。Canonicalと協業で
https://www.publickey1.jp/blog/20/flutterlinuxcanonical.html -
Dart言語のフレームワーク「Flutter 2」公開。
単一コードでiOS/Android/Web/Win/Mac/Linuxのネイティブアプリ実現。
WebAssemblyによるレンダリングエンジン搭載 - Publickey
https://www.publickey1.jp/blog/21/dartflutter_2iosandroidwebwinmaclinuxwebassembly.html
-
Set up an editor
https://flutter.dev/docs/get-started/editor -
Write Your First Flutter App
-
UI
- Widget catalog
https://flutter.dev/docs/development/ui/widgets
- Widget catalog
-
Packages & plugins
- Build and release an Android app
- Build and release an iOS app
- Build and release a Linux app
- Build and release a web app
- Continuous deployment
https://flutter.ctrnost.com/install/
https://flutter.ctrnost.com/tutorial/
- アプリ作成
https://flutter.ctrnost.com/tutorial/tutorial01/ - アプリの実行
https://flutter.ctrnost.com/tutorial/tutorial02/ - アプリ作成
https://flutter.ctrnost.com/tutorial/tutorial03/ - FlutterAppの基本
https://flutter.ctrnost.com/tutorial/tutorial04/ - 外部パッケージ
https://flutter.ctrnost.com/tutorial/tutorial05/ - Statefulウィジェット
https://flutter.ctrnost.com/tutorial/tutorial06/ - 無限スクロールListView
https://flutter.ctrnost.com/tutorial/tutorial07/
https://flutter.ctrnost.com/basic/
- レイアウト
https://flutter.ctrnost.com/basic/layout/ - インタラクティブ
https://flutter.ctrnost.com/basic/interactive/ - ナビゲーション
https://flutter.ctrnost.com/basic/navigation/
-
Flutter
https://qiita.com/tags/flutter -
Android開発はFlutterでやる方がいい説
https://qiita.com/ko2ic/items/b07d3ec73513c1bd8ba6
-
Flutterに入門した
https://qiita.com/Ryuichirou/items/029b5312e73374187fa3 -
【入門】はじめての Flutter
https://qiita.com/nskydiving/items/4fcf0dbad923d50601f9 -
nkmk1215
- WindowsでFlutterインストール
https://qiita.com/nkmk1215/items/2b741157bc253350ff18 - Flutterの基礎
https://qiita.com/nkmk1215/items/7d73b4fd8cb5ec5ac486
- WindowsでFlutterインストール
-
Flutter でよく使う(と思う)コードまとめ
https://qiita.com/chooyan_eng/items/e7f1fcca1eeb0cf150b5 -
初心者がFlutterでアプリ開発するための知見まとめ
https://qiita.com/okapee0608/items/9ed40d569bb06a59d12f
-
Windows
- Flutterの開発環境(Windows + Android Studio)を構築する
https://qiita.com/rubytomato@github/items/02262197e970f82ecefd - Flutter開発環境構築(Windows)
https://qiita.com/take0116/items/219847516987ee327040
- Flutterの開発環境(Windows + Android Studio)を構築する
-
Mac
- Flutter 開発環境構築手順 (2019年 保存版)
https://qiita.com/tomy0610/items/896dc8ec9ba95c33194f - Flutter開発環境構築(Mac編)
https://qiita.com/akatsukaha/items/3b8a5a6d94a3cdb1e047
- Flutter 開発環境構築手順 (2019年 保存版)
-
Flutter実行環境の構築(Android StudioとXcode)
https://qiita.com/henjiganai/items/3419ca49a3e36bc59828 -
Flutter for DesktopでWindowsアプリ開発環境を構築
https://qiita.com/karuhi/items/22dc9abd77890da8773c
- Flutter:Widget一覧
https://qiita.com/matsukatsu/items/e289e30231fffb1e4502 - Flutter開発する前に知っておきたい35のWidget一覧
https://qiita.com/coka__01/items/dedb569f6357f1b503fd
- Flutter for Webが発表されたので、早速動かしてみた!!
https://qiita.com/Kata_Oka/items/944a6f00ec49eeec450b - Flutter Webを動かしたときにつまづいたこと
https://qiita.com/Nkzn/items/402a29fe9bb517ce78aa
-
Flutterで始めるモバイルアプリ開発連載一覧
https://codezine.jp/article/corner/830-
Flutterとは何か? 使うメリットや特徴を理解する
https://codezine.jp/article/detail/12718 -
実際にFlutterを触ってみよう~初めてのアプリ開発
https://codezine.jp/article/detail/13143 -
FlutterのUIウィジェットを理解するための基本を知ろう!
https://codezine.jp/article/detail/13329 -
→ Dartの該当節を参照
-
https://zenn.dev/topics/flutter
- Flutter実践入門
~環境構築からAndroid/iOS/Webに広告を付けて同時にリリース!!~
https://zenn.dev/kazutxt/books/flutter_practice_introduction
-
Flutter 全部俺 Advent Calendar 2019
https://adventar.org/calendars/4140-
Flutterとはなにか
https://itome.team/blog/2019/12/flutter-advent-calendar-day1 -
Flutterのツールを使いこなして開発効率を上げる
https://itome.team/blog/2019/12/flutter-advent-calendar-day2 -
すぐにFlutterを始めたい人のためのDart入門(Dartの該当節を参照)
-
FlutterのWidgetが画面に描画されるまでを理解する
https://itome.team/blog/2019/12/flutter-advent-calendar-day5 -
FlutterのInheritedWidgetとBuildContextを理解する
https://itome.team/blog/2019/12/flutter-advent-calendar-day6 -
FlutterのProviderパッケージを使いこなす
https://itome.team/blog/2019/12/flutter-advent-calendar-day7 -
Flutterのパフォーマンスを改善する
https://itome.team/blog/2019/12/flutter-advent-calendar-day8 -
FlutterのBoxConstraintsを理解する
https://itome.team/blog/2019/12/flutter-advent-calendar-day9 -
FlutterのNavigationとRoutingを理解する
https://itome.team/blog/2019/12/flutter-advent-calendar-day10 -
FlutterのSliverWidgetを理解する
https://itome.team/blog/2019/12/flutter-advent-calendar-day11 -
FlutterのThemeを理解する
https://itome.team/blog/2019/12/flutter-advent-calendar-day12 -
FlutterのPlatformViewを理解する
https://itome.team/blog/2019/12/flutter-advent-calendar-day13 -
FlutterでAndroid/iOSのネイティブのAPIを使う
https://itome.team/blog/2019/12/flutter-advent-calendar-day14 -
Flutterのアニメーションを理解する
-
FlutterのAnimatedWidgetを使いこなす
https://itome.team/blog/2019/12/flutter-advent-calendar-day17 -
Flutterのアクセシビリティを理解する
https://itome.team/blog/2019/12/flutter-advent-calendar-day18 -
FlutterのInternationalization対応
https://itome.team/blog/2019/12/flutter-advent-calendar-day19 -
Flutterのテスト
https://itome.team/blog/2019/12/flutter-advent-calendar-day20 -
Flutterのアプリ設計
-
Flutterの自作パッケージを作る
https://itome.team/blog/2019/12/flutter-advent-calendar-day24 -
Flutter for Webを理解する
https://itome.team/blog/2019/12/flutter-advent-calendar-day25
-
- Flutterをヤッてみたが、Flutter、イイ感じでは?と言う感想。
https://www.osscons.jp/joxe28r0g-537/#_537
移行メモ
- 概要の「独事描画」→「独自描画」、要素の概要図の「PageSate」→「PageState」に修正した。
- 「Flutter for Desktop」の説明「〜開発するための」は文が途切れていたため 「〜開発するための仕組み。」とした。
- Dart のサンプル・コードで、コメント行の 1 つが
/(スラッシュ 1 つ)で 始まっていたため//に修正した。- 「Widget」の箇条書きにあった空の項目を除去した。
- 同名の見出し(「その他」「フォルダ」「Widget」)が複数あり GitHub Wiki で アンカが衝突するため、括弧で文脈を補って一意にした。
- マイクロソフト系技術情報 Wiki(techinfoofmicrosofttech.osscons.jp)への URL リンクは、移行済みの Windows Forms / XAML に張り替えた。
- PukiWiki のページ内アンカ(
#xxxxxxxx)は GitHub Wiki では再現できないため、 同一ページ内のアンカは見出しから生成されるアンカに張り替え、 他ページのアンカを指すリンクは「〜(ページ名の該当節を参照)」の形に置き換えた。- 本フェーズで新たに参照された「Flutter - ビルドとデプロイ」 「Flutterのファースト/セカンド/サード/4thステップ」を TODO.md に予約した。
Tags: 移行, Flutter, Dart, クロスプラットフォーム, Widget, State, モバイル, Flutter for Web
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。