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
What's Add2App project?(Flutter)
Search
kosuke matsumura
March 26, 2019
Technology
2
1.4k
What's Add2App project?(Flutter)
About Flutter Add2App project.
How to use Flutter from existing Android/iOS project.
kosuke matsumura
March 26, 2019
Tweet
Share
More Decks by kosuke matsumura
See All by kosuke matsumura
Add Material touch ripples / FlutterKaigi 2023
kosukematsumura
0
460
TabBarの色を変えたかっただけなのに
kosukematsumura
3
1.5k
Flutter Plugin Score
kosukematsumura
4
1.6k
Navigationのバックキーハンドリング.pdf
kosukematsumura
1
890
Navigation
kosukematsumura
0
270
Other Decks in Technology
See All in Technology
「データ無い! 腹立つ! 推論する!」から 「データ無い! 腹立つ! データを作る」へ チームでデータを作り、育てられるようにするまで / How can we create, use, and maintain data ourselves?
moznion
8
4.6k
手を動かしながら学ぶデータモデリング - 論理設計から物理設計まで / Data modeling
soudai
PRO
25
6.2k
AIを前提に、業務を”再構築”せよ IVRyの9ヶ月にわたる挑戦と未来の働き方 (BTCONJP2025)
yueda256
1
790
重厚長大企業で、顧客価値をスケールさせるためのプロダクトづくりとプロダクト開発チームづくりの裏側 / Developers X Summit 2025
mongolyy
0
160
Bedrock のコスト監視設計
fohte
2
200
Moto: Latent Motion Token as the Bridging Language for Learning Robot Manipulation from Videos
peisuke
0
160
生成AI時代に若手エンジニアが最初に覚えるべき内容と、その学習法
starfish719
2
550
JavaScript パーサーに using 対応をする過程で与えたエコシステムへの影響
baseballyama
1
110
OSだってコンテナしたい❗Image Modeが切り拓くLinux OS運用の新時代
tsukaman
0
110
2ヶ月で新規事業のシステムを0から立ち上げるスタートアップの舞台裏
shmokmt
0
240
Javaコミュニティの歩き方 ~参加から貢献まで、すべて教えます~
tabatad
0
140
巨大モノリスのリプレイス──機能整理とハイブリッドアーキテクチャで挑んだ再構築戦略
zozotech
PRO
0
200
Featured
See All Featured
Fireside Chat
paigeccino
41
3.7k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.1k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Faster Mobile Websites
deanohume
310
31k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
680
Git: the NoSQL Database
bkeepers
PRO
432
66k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Transcript
What’s Add2App project Flutter Meetup Tokyo #8 2019/3/26 Kosuke Matsumura
About Me • দଜߤ༟(Kosuke Matsumura) • NAVITIME JAPAN Co., Ltd.
Android/iOS Developer • Kawasaki Frontale Supporter • Twitter m.kosuke @kosuke_mtm
Add2App project
Add2App project • Make it easy to add Flutter on
existing application • In preview(as of 2019.3.17) • Available in master channel
OUTLINE
OUTLINE Standard Flutter Project Add2App Project Existing Android/iOS project should
import Flutter project as a module. Flutter project includes Android/iOS project from the beginning. Import with CocoaPods Import with cradle
OUTLINE $ flutter --version Flutter 1.3.11-pre.34 • channel master Framework
• 2019-03-15 22:03:13 -0700 Tools • Dart 2.2.1 (build 2.2.1-dev.1.0 None) Execution environment Warning: https://github.com/flutter/flutter/wiki/Bad-Builds
OUTLINE $ flutter --version Flutter 1.3.11-pre.34 • channel master Framework
• 2019-03-15 22:03:13 -0700 Tools • Dart 2.2.1 (build 2.2.1-dev.1.0 None) Execution environment Warning: https://github.com/flutter/flutter/wiki/Bad-Builds
SETUP
SETUP Create “Flutter module” $ flutter channel master $ flutter
create -t module my_flutter `-t` option is `template`. This command create the Flutter module project template. Existing Android/iOS project will import this module. set branch to `master`
SETUP Create “Flutter module” $ flutter create -t module my_flutter
In the Flutter module project, there are hidden subfolder: `.android/` and `.ios/`
SETUP -Android-
SETUP -Android- Add compile option: using java1.8 build.gradle android {
compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } …
SETUP -Android- Add path to the Flutter module project setting.gradle
include ':app' // add below setBinding(new Binding([gradle: this])) evaluate(new File( settingsDir.parentFile, 'my_flutter/.android/include_flutter.groovy' ))
SETUP -Android- Introduce an implementation dependency on the Flutter module
from app app/build.gradle dependencies { implementation project(‘:flutter') … }
SETUP -Android- [optional] Apply AndroidX to the Flutter module project
ɾExecute on Android Project(not Flutter module project) ɾYou should correct import manually
SETUP -iOS-
SETUP -iOS- Setup Podfile ※If you don’t have Podfile, execute
`pod init` Podfile flutter_application_path = ‘../my_flutter/‘ eval(File.read( File.join(flutter_application_path, ‘.ios’, ‘Flutter’, ‘podhelper.rb’)), binding) And execute `pod install`
SETUP -iOS- Disable bitcode As Flutter does not support bitcode
now.
SETUP -iOS- Add a build phase for building Dart code
SETUP -iOS- Add a build phase for building Dart code
Run Script “$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh” build “$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" embed
SETUP -iOS- Add a build phase for building Dart code
Drag after `Target Dependencies`
USING in Native Code
USING -Android-
USING -Android- As a View MainActivity.kt val flutterView = Flutter.createView(
this, // Activity lifecycle, // Lifecycle "route1" ) Talk about this later
USING -Android- As a Fragment MainActivity.kt val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.container, Flutter.createFragment(“route2”)) transaction.commit() What is “route”?
What is “route”? Dart code is able to receive String
main.dar void main() => runApp(_widgetForRoute(window.defaultRouteName)); Widget _widgetForRoute(String route) { switch (route) { case 'route1': return SomeWidget(…); case 'route2': return SomeWidget(…); default: return Center(child: Text('Unknown route: $route')); } }
USING -iOS-
USING -iOS- AppDelegate.swift import Flutter Replace super class with `FlutterAppDelegate`
} FlutterAppDelegate.swift @interface FlutterAppDelegate: UIResponder <UIApplicationDelegate, …> @UIApplicationMain class AppDelegate: FlutterAppDelegate {
USING -iOS- AppDelegate.swift import Flutter Case of using Flutter plugin
} @UIApplicationMain class AppDelegate: FlutterAppDelegate {
USING -iOS- AppDelegate.swift import Flutter Case of using Flutter plugin
@UIApplicationMain class AppDelegate: FlutterAppDelegate { import FlutterPluginRegistrant var flutterEngine: FlutterEngine? override func application(_ application: UIApplication,didFinishLaunching… { self.flutterEngine = FlutterEngine(name: "io.flutter", project: nil) self.flutterEngine?.run(withEntrypoint: nil) GeneratedPluginRegistrant.register(with: self.flutterEngine) return super.application(application, didFinishLaunchingWithOptions:… }
USING -iOS- ViewController.swift let flutterViewController = FlutterViewController() flutterViewController.setInitialRoute(“route3") present(flutterViewController, animated:
false, completion: nil) Call Flutter from ViewController
Back to NativeCode
Back to NativeCode main.dart SystemNavigator.pop(); Call Flutter from ViewController
Hot Reload
Hot Reload $ cd xxxxx/my_flutter $ flutter attach IDE Support
Hot Reload for Add2App is in progress. But Flutter command line tools are already present.
Hot Reload IDE Support Hot Reload for Add2App is in
progress. But Flutter command line tools are already present. Dart Observatory web user interface URL
Hot Reload IDE Support Hot Reload for Add2App is in
progress. But Flutter command line tools are already present. Dart Observatory web user interface URL
Method Channel
Method Channel • Official https://flutter.dev/docs/development/platform-integration/ platform-channels • Qiita https://qiita.com/mkosuke/items/ b384035e507ad0208c10
Thank you for your attention.
References • Add2App project https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps • github https://github.com/flutter/flutter/projects/28 • Google
Developer blog https://developers.googleblog.com/2018/12/flutter-10-googles-portable-ui- toolkit.html • gitHub https://github.com/shcahill/Add2AppSample