From 04b4e162de608fc2870324d2171b76a5e5accbe4 Mon Sep 17 00:00:00 2001 From: Andrew Brogdon Date: Wed, 2 Oct 2019 10:31:05 -0700 Subject: [PATCH 01/12] Working on android --- .../app/src/main/AndroidManifest.xml | 2 +- .../example/androidfullscreen/MainActivity.kt | 18 ++++- .../androidfullscreen/MyFlutterActivity.kt | 37 ++++++++++ .../app/src/main/res/layout/activity_main.xml | 11 +++ .../add_to_app/flutter_module/lib/main.dart | 71 ++++++++++++++----- .../add_to_app/flutter_module/pubspec.lock | 7 ++ .../add_to_app/flutter_module/pubspec.yaml | 1 + 7 files changed, 127 insertions(+), 20 deletions(-) create mode 100644 experimental/add_to_app/android_fullscreen/app/src/main/java/dev/flutter/example/androidfullscreen/MyFlutterActivity.kt diff --git a/experimental/add_to_app/android_fullscreen/app/src/main/AndroidManifest.xml b/experimental/add_to_app/android_fullscreen/app/src/main/AndroidManifest.xml index 0f2788005a0..b3d0d662dcb 100644 --- a/experimental/add_to_app/android_fullscreen/app/src/main/AndroidManifest.xml +++ b/experimental/add_to_app/android_fullscreen/app/src/main/AndroidManifest.xml @@ -18,7 +18,7 @@ (R.id.launch_button) + button.setOnClickListener { - startActivity(FlutterActivity.createDefaultIntent(this)) + val intent = Intent(this, MyFlutterActivity::class.java) + startActivityForResult(intent, 1) + } + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (data != null) { + val counter = data.getIntExtra("counter", 0) + counterLabel?.text = "Current counter: $counter" } } } diff --git a/experimental/add_to_app/android_fullscreen/app/src/main/java/dev/flutter/example/androidfullscreen/MyFlutterActivity.kt b/experimental/add_to_app/android_fullscreen/app/src/main/java/dev/flutter/example/androidfullscreen/MyFlutterActivity.kt new file mode 100644 index 00000000000..85347b206d4 --- /dev/null +++ b/experimental/add_to_app/android_fullscreen/app/src/main/java/dev/flutter/example/androidfullscreen/MyFlutterActivity.kt @@ -0,0 +1,37 @@ +package dev.flutter.example.androidfullscreen + +import android.os.Bundle +import io.flutter.app.FlutterActivity +import io.flutter.plugin.common.MethodChannel +import io.flutter.plugins.GeneratedPluginRegistrant + +class MyFlutterActivity : FlutterActivity() { + private var count = 0 + private var channel : MethodChannel? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + GeneratedPluginRegistrant.registerWith(this) + + channel = MethodChannel(flutterView, "dev.flutter.example/counter") + + channel?.setMethodCallHandler { call, result -> + when (call.method) { + "incrementCounter" -> { + print("incrementCounter") + count++ + reportCounter() + } + "requestCounter" -> { + print("requestCounter") + reportCounter() + } + } + } + } + + private fun reportCounter() { + channel?.invokeMethod("reportCounter", count) + } +} \ No newline at end of file diff --git a/experimental/add_to_app/android_fullscreen/app/src/main/res/layout/activity_main.xml b/experimental/add_to_app/android_fullscreen/app/src/main/res/layout/activity_main.xml index 4d1c91af695..88b6cc85ccb 100644 --- a/experimental/add_to_app/android_fullscreen/app/src/main/res/layout/activity_main.xml +++ b/experimental/add_to_app/android_fullscreen/app/src/main/res/layout/activity_main.xml @@ -16,4 +16,15 @@ app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + \ No newline at end of file diff --git a/experimental/add_to_app/flutter_module/lib/main.dart b/experimental/add_to_app/flutter_module/lib/main.dart index faca10fda5a..354371cc101 100644 --- a/experimental/add_to_app/flutter_module/lib/main.dart +++ b/experimental/add_to_app/flutter_module/lib/main.dart @@ -4,8 +4,44 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:provider/provider.dart'; -void main() => runApp(MyApp()); +void main() { + WidgetsFlutterBinding.ensureInitialized(); + + final model = CounterModel(); + + runApp( + ChangeNotifierProvider.value( + value: model, + child: MyApp(), + ), + ); +} + +class CounterModel extends ChangeNotifier { + CounterModel() { + _channel.setMethodCallHandler(_handleMessage); + _channel.invokeMethod('requestCounter'); + } + + final _channel = MethodChannel('dev.flutter.example/counter'); + + int _count = 0; + + int get count => _count; + + void increment() { + _channel.invokeMethod('incrementCounter'); + } + + Future _handleMessage(MethodCall call) async { + if (call.method == 'reportCounter') { + _count = call.arguments as int; + notifyListeners(); + } + } +} class MyApp extends StatelessWidget { @override @@ -32,18 +68,11 @@ class FullScreenView extends StatelessWidget { } } -class Contents extends StatefulWidget { +class Contents extends StatelessWidget { final bool showExit; const Contents({this.showExit = false}); - @override - _ContentsState createState() => _ContentsState(); -} - -class _ContentsState extends State { - int count = 0; - @override Widget build(BuildContext context) { final mediaInfo = MediaQuery.of(context); @@ -73,20 +102,28 @@ class _ContentsState extends State { children: [ Text( 'Window is ${mediaInfo.size.width.toStringAsFixed(1)} x ' - '${mediaInfo.size.height.toStringAsFixed(1)}', + '${mediaInfo.size.height.toStringAsFixed(1)}', style: Theme.of(context).textTheme.headline, ), SizedBox(height: 16), - Text( - 'Taps: $count', - style: Theme.of(context).textTheme.headline, + Consumer( + builder: (context, model, child) { + return Text( + 'Taps: ${model.count}', + style: Theme.of(context).textTheme.headline, + ); + }, ), SizedBox(height: 16), - RaisedButton( - onPressed: () => setState(() => count++), - child: Text('Tap me!'), + Consumer( + builder: (context, model, child) { + return RaisedButton( + onPressed: () => model.increment(), + child: Text('Tap me!'), + ); + }, ), - if (widget.showExit) ...[ + if (showExit) ...[ SizedBox(height: 16), RaisedButton( onPressed: () => SystemNavigator.pop(), diff --git a/experimental/add_to_app/flutter_module/pubspec.lock b/experimental/add_to_app/flutter_module/pubspec.lock index 4df5619f301..5a2a7b187bc 100644 --- a/experimental/add_to_app/flutter_module/pubspec.lock +++ b/experimental/add_to_app/flutter_module/pubspec.lock @@ -109,6 +109,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.4.0" + provider: + dependency: "direct main" + description: + name: provider + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" quiver: dependency: transitive description: diff --git a/experimental/add_to_app/flutter_module/pubspec.yaml b/experimental/add_to_app/flutter_module/pubspec.yaml index ab6e75ff18a..4ae72de98c9 100644 --- a/experimental/add_to_app/flutter_module/pubspec.yaml +++ b/experimental/add_to_app/flutter_module/pubspec.yaml @@ -9,6 +9,7 @@ environment: dependencies: flutter: sdk: flutter + provider: ^3.1.0 dev_dependencies: flutter_test: From b928d00f9dac7ca94229649d5db0dc5aaab6595f Mon Sep 17 00:00:00 2001 From: Andrew Brogdon Date: Wed, 2 Oct 2019 14:02:22 -0700 Subject: [PATCH 02/12] iOS Working. --- .../app/src/main/AndroidManifest.xml | 2 +- .../example/androidfullscreen/MainActivity.kt | 22 +++--- .../androidfullscreen/MyFlutterActivity.kt | 72 +++++++++---------- .../IOSFullScreen/Base.lproj/Main.storyboard | 15 +++- .../IOSFullScreen/ViewController.swift | 33 +++++++++ .../add_to_app/ios_fullscreen/Podfile.lock | 2 +- 6 files changed, 96 insertions(+), 50 deletions(-) diff --git a/experimental/add_to_app/android_fullscreen/app/src/main/AndroidManifest.xml b/experimental/add_to_app/android_fullscreen/app/src/main/AndroidManifest.xml index b3d0d662dcb..0f2788005a0 100644 --- a/experimental/add_to_app/android_fullscreen/app/src/main/AndroidManifest.xml +++ b/experimental/add_to_app/android_fullscreen/app/src/main/AndroidManifest.xml @@ -18,7 +18,7 @@ (R.id.launch_button) button.setOnClickListener { - val intent = Intent(this, MyFlutterActivity::class.java) - startActivityForResult(intent, 1) + val intent = FlutterActivity.createDefaultIntent(this) + startActivity(intent) + // val intent = Intent(this, MyFlutterActivity::class.java) +// startActivityForResult(intent, 1) } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (data != null) { - val counter = data.getIntExtra("counter", 0) - counterLabel?.text = "Current counter: $counter" - } - } +// override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { +// super.onActivityResult(requestCode, resultCode, data) +// if (data != null) { +// val counter = data.getIntExtra("counter", 0) +// counterLabel?.text = "Current counter: $counter" +// } +// } } diff --git a/experimental/add_to_app/android_fullscreen/app/src/main/java/dev/flutter/example/androidfullscreen/MyFlutterActivity.kt b/experimental/add_to_app/android_fullscreen/app/src/main/java/dev/flutter/example/androidfullscreen/MyFlutterActivity.kt index 85347b206d4..5e5bf58e5c9 100644 --- a/experimental/add_to_app/android_fullscreen/app/src/main/java/dev/flutter/example/androidfullscreen/MyFlutterActivity.kt +++ b/experimental/add_to_app/android_fullscreen/app/src/main/java/dev/flutter/example/androidfullscreen/MyFlutterActivity.kt @@ -1,37 +1,37 @@ package dev.flutter.example.androidfullscreen - -import android.os.Bundle -import io.flutter.app.FlutterActivity -import io.flutter.plugin.common.MethodChannel -import io.flutter.plugins.GeneratedPluginRegistrant - -class MyFlutterActivity : FlutterActivity() { - private var count = 0 - private var channel : MethodChannel? = null - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - GeneratedPluginRegistrant.registerWith(this) - - channel = MethodChannel(flutterView, "dev.flutter.example/counter") - - channel?.setMethodCallHandler { call, result -> - when (call.method) { - "incrementCounter" -> { - print("incrementCounter") - count++ - reportCounter() - } - "requestCounter" -> { - print("requestCounter") - reportCounter() - } - } - } - } - - private fun reportCounter() { - channel?.invokeMethod("reportCounter", count) - } -} \ No newline at end of file +// +//import android.os.Bundle +//import io.flutter.embedding.android.FlutterActivity +//import io.flutter.plugin.common.MethodChannel +//import io.flutter.plugins.GeneratedPluginRegistrant +// +//class MyFlutterActivity : FlutterActivity() { +// private var count = 0 +// private var channel : MethodChannel? = null +// +// override fun onCreate(savedInstanceState: Bundle?) { +// super.onCreate(savedInstanceState) +// +//// GeneratedPluginRegistrant.registerWith(this) +// +//// channel = MethodChannel(flutterView, "dev.flutter.example/counter") +//// +//// channel?.setMethodCallHandler { call, result -> +//// when (call.method) { +//// "incrementCounter" -> { +//// print("incrementCounter") +//// count++ +//// reportCounter() +//// } +//// "requestCounter" -> { +//// print("requestCounter") +//// reportCounter() +//// } +//// } +//// } +// } +// +// private fun reportCounter() { +//// channel?.invokeMethod("reportCounter", count) +// } +//} \ No newline at end of file diff --git a/experimental/add_to_app/ios_fullscreen/IOSFullScreen/Base.lproj/Main.storyboard b/experimental/add_to_app/ios_fullscreen/IOSFullScreen/Base.lproj/Main.storyboard index 2f5ae7350ea..b8dcc7d36fe 100644 --- a/experimental/add_to_app/ios_fullscreen/IOSFullScreen/Base.lproj/Main.storyboard +++ b/experimental/add_to_app/ios_fullscreen/IOSFullScreen/Base.lproj/Main.storyboard @@ -18,21 +18,32 @@ - + + + + + + diff --git a/experimental/add_to_app/ios_fullscreen/IOSFullScreen/ViewController.swift b/experimental/add_to_app/ios_fullscreen/IOSFullScreen/ViewController.swift index 76976b3aa1d..3d038923416 100644 --- a/experimental/add_to_app/ios_fullscreen/IOSFullScreen/ViewController.swift +++ b/experimental/add_to_app/ios_fullscreen/IOSFullScreen/ViewController.swift @@ -6,6 +6,39 @@ import UIKit import Flutter class ViewController: UIViewController { + + @IBOutlet weak var counterLabel: UILabel! + + var methodChannel : FlutterMethodChannel? + + var count = 0 + + override func viewDidLoad() { + if let flutterEngine = (UIApplication.shared.delegate as? AppDelegate)?.flutterEngine { + methodChannel = FlutterMethodChannel(name: "dev.flutter.example/counter", + binaryMessenger: flutterEngine.binaryMessenger) + methodChannel?.setMethodCallHandler({ + (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in + switch(call.method) { + case "incrementCounter": + self.count += 1 + self.counterLabel.text = "Current counter: \(self.count)" + self.reportCounter() + case "requestCounter": + self.reportCounter() + default: + // Unrecognized method name + print("Unrecognized method name: \(call.method)") + } + }) + + } + } + + func reportCounter() { + methodChannel?.invokeMethod("reportCounter", arguments: count) + } + @IBAction func buttonWasTapped(_ sender: Any) { let flutterEngine = (UIApplication.shared.delegate as? AppDelegate)?.flutterEngine let flutterViewController = FlutterViewController(engine: flutterEngine, nibName: nil, bundle: nil)! diff --git a/experimental/add_to_app/ios_fullscreen/Podfile.lock b/experimental/add_to_app/ios_fullscreen/Podfile.lock index 3546304a9df..b22d00b200e 100644 --- a/experimental/add_to_app/ios_fullscreen/Podfile.lock +++ b/experimental/add_to_app/ios_fullscreen/Podfile.lock @@ -23,6 +23,6 @@ SPEC CHECKSUMS: flutter_module: 37f078337caf8acad3074374a49bf81442fd3e07 FlutterPluginRegistrant: d59dd07dd90e9c6430996073575a5bd1ea19677e -PODFILE CHECKSUM: 3a2cacb59163f4a25654a84fcd92b179f682c008 +PODFILE CHECKSUM: 1f9809794b37c933b7cb40791d64724dc2376c54 COCOAPODS: 1.7.5 From ff230fe6819998881070e7a7b6ee85321b148683 Mon Sep 17 00:00:00 2001 From: Andrew Brogdon Date: Fri, 4 Oct 2019 11:27:35 -0700 Subject: [PATCH 03/12] Working Android --- .../example/androidfullscreen/MainActivity.kt | 57 +++++++++++++++---- .../androidfullscreen/MyFlutterActivity.kt | 37 ------------ 2 files changed, 47 insertions(+), 47 deletions(-) delete mode 100644 experimental/add_to_app/android_fullscreen/app/src/main/java/dev/flutter/example/androidfullscreen/MyFlutterActivity.kt diff --git a/experimental/add_to_app/android_fullscreen/app/src/main/java/dev/flutter/example/androidfullscreen/MainActivity.kt b/experimental/add_to_app/android_fullscreen/app/src/main/java/dev/flutter/example/androidfullscreen/MainActivity.kt index c147d564d98..2bada617235 100644 --- a/experimental/add_to_app/android_fullscreen/app/src/main/java/dev/flutter/example/androidfullscreen/MainActivity.kt +++ b/experimental/add_to_app/android_fullscreen/app/src/main/java/dev/flutter/example/androidfullscreen/MainActivity.kt @@ -9,31 +9,68 @@ import android.widget.Button import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import io.flutter.embedding.android.FlutterActivity +import io.flutter.embedding.engine.FlutterEngine +import io.flutter.embedding.engine.FlutterEngineCache +import io.flutter.embedding.engine.dart.DartExecutor +import io.flutter.plugin.common.MethodChannel +import io.flutter.view.FlutterMain class MainActivity : AppCompatActivity() { + private val ENGINE_ID = "1" + + private var channel : MethodChannel? = null + private var count = 0 private var counterLabel : TextView? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + FlutterMain.ensureInitializationComplete(applicationContext, null) + + // Create and warm up Flutter engine. + val flutterEngine = FlutterEngine(this) + + flutterEngine + .dartExecutor + .executeDartEntrypoint( + DartExecutor.DartEntrypoint.createDefault() + ) + + FlutterEngineCache.getInstance().put(ENGINE_ID, flutterEngine) + + // Set up the method channel that will pass data to and from the Flutter module. + channel = MethodChannel(flutterEngine.dartExecutor, "dev.flutter.example/counter") + + channel?.setMethodCallHandler { call, _ -> + when (call.method) { + "incrementCounter" -> { + count++ + counterLabel?.text = "Current counter: $count" + reportCounter() + } + "requestCounter" -> { + print("requestCounter") + reportCounter() + } + } + } + + // Set up label and button. counterLabel = findViewById(R.id.counter_label) val button = findViewById