diff --git a/CHANGELOG.md b/CHANGELOG.md index 5703fc8..117da4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.1 + +* remove DisplaysManager widget + ## 0.1.0 * Initial Open Source release. diff --git a/android/src/main/kotlin/com/namit/presentation_displays/PresentationDisplaysFactory.kt b/android/src/main/kotlin/com/namit/presentation_displays/PresentationDisplaysFactory.kt index aabf3ff..4a5c364 100644 --- a/android/src/main/kotlin/com/namit/presentation_displays/PresentationDisplaysFactory.kt +++ b/android/src/main/kotlin/com/namit/presentation_displays/PresentationDisplaysFactory.kt @@ -9,15 +9,15 @@ import io.flutter.plugin.common.StandardMessageCodec import io.flutter.plugin.platform.PlatformView import io.flutter.plugin.platform.PlatformViewFactory -class PresentationDisplaysFactory(private val messenger: BinaryMessenger, private val registrar: PluginRegistry.Registrar) - : PlatformViewFactory(StandardMessageCodec.INSTANCE){ - - /** - * @hide - */ - override fun create(context: Context?, viewId: Int, args: Any?): PlatformView { - val methodChannel = MethodChannel(messenger, "${PresentationDisplaysPlugin.viewTypeId}_$viewId") - val displayManager = context?.getSystemService(Context.DISPLAY_SERVICE) as DisplayManager - return PresentationDisplaysView(registrar, methodChannel, viewId, displayManager) - } -} \ No newline at end of file +//class PresentationDisplaysFactory(private val messenger: BinaryMessenger, private val registrar: PluginRegistry.Registrar) +// : PlatformViewFactory(StandardMessageCodec.INSTANCE){ +// +// /** +// * @hide +// */ +// override fun create(context: Context?, viewId: Int, args: Any?): PlatformView { +// val methodChannel = MethodChannel(messenger, "${PresentationDisplaysPlugin.viewTypeId}_$viewId") +// val displayManager = context?.getSystemService(Context.DISPLAY_SERVICE) as DisplayManager +// return PresentationDisplaysView(registrar, methodChannel, viewId, displayManager) +// } +//} \ No newline at end of file diff --git a/android/src/main/kotlin/com/namit/presentation_displays/PresentationDisplaysPlugin.kt b/android/src/main/kotlin/com/namit/presentation_displays/PresentationDisplaysPlugin.kt index a4bfcd1..b5f3e8f 100644 --- a/android/src/main/kotlin/com/namit/presentation_displays/PresentationDisplaysPlugin.kt +++ b/android/src/main/kotlin/com/namit/presentation_displays/PresentationDisplaysPlugin.kt @@ -1,17 +1,135 @@ package com.namit.presentation_displays -import io.flutter.plugin.common.PluginRegistry.Registrar +import android.content.ContentValues.TAG +import android.content.Context +import android.hardware.display.DisplayManager +import android.util.Log +import android.view.Display +import androidx.annotation.NonNull +import com.google.gson.Gson +import io.flutter.embedding.engine.FlutterEngine +import io.flutter.embedding.engine.FlutterEngineCache +import io.flutter.embedding.engine.dart.DartExecutor +import io.flutter.embedding.engine.plugins.FlutterPlugin +import io.flutter.embedding.engine.plugins.activity.ActivityAware +import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding +import io.flutter.plugin.common.MethodCall +import io.flutter.plugin.common.MethodChannel +import io.flutter.plugin.common.PluginRegistry +import org.json.JSONObject /** PresentationDisplaysPlugin */ -object PresentationDisplaysPlugin { +class PresentationDisplaysPlugin() : FlutterPlugin, ActivityAware, MethodChannel.MethodCallHandler { - const val viewTypeId = "presentation_displays_plugin" - /** - * @hide - */ - @JvmStatic - fun registerWith(registrar: Registrar) { - registrar.platformViewRegistry().registerViewFactory(viewTypeId, PresentationDisplaysFactory(registrar.messenger(),registrar)) + private lateinit var channel : MethodChannel + private var flutterEngineChannel: MethodChannel? = null + private var displayManager: DisplayManager? = null + private var context:Context?=null + + override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { + channel = MethodChannel(flutterPluginBinding.flutterEngine.dartExecutor, viewTypeId) + channel.setMethodCallHandler(this) + } + + companion object{ + private val viewTypeId = "presentation_displays_plugin" + + /** + * @hide + */ + @JvmStatic + fun registerWith(registrar: PluginRegistry.Registrar) { + val channel = MethodChannel(registrar.messenger(), viewTypeId) + channel.setMethodCallHandler(PresentationDisplaysPlugin()) + } + } + + override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { + channel.setMethodCallHandler(null) + } + + override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) { + Log.i(TAG, "Channel: method: ${call.method} | arguments: ${call.arguments}") + when (call.method) { + "showPresentation" -> { + try { + val obj = JSONObject(call.arguments as String) + Log.i(TAG, "Channel: method: ${call.method} | displayId: ${obj.getInt("displayId")} | routerName: ${obj.getString("routerName")}") + + val displayId: Int = obj.getInt("displayId") + val tag: String = obj.getString("routerName") + val display = displayManager?.getDisplay(displayId) + val flutterEngine = createFlutterEngine(tag) + + if (display != null) { + flutterEngine?.let { + flutterEngineChannel = MethodChannel(it.dartExecutor.binaryMessenger, "${viewTypeId}_engine") + val presentation = context?.let { it1 -> PresentationDisplay(it1, tag, display) } + presentation?.show() + result.success(true) + } ?: result.error("404", "Can't find FlutterEngine", null) + + } else { + result.error("404", "Can't find display with displayId is $displayId", null) + } + + } catch (e: Exception) { + result.error(call.method, e.message, null) + } + } + "listDisplay" -> { + val gson = Gson() + val category = call.arguments + val displays = displayManager?.getDisplays(category as String?) + val listJson = ArrayList() + + if (displays!=null) { + for (display: Display in displays) { + val d = DisplayJson(display.displayId, display.flags, display.rotation, display.name) + listJson.add(d) + } + result.success(gson.toJson(listJson)) + } + } + "transferDataToPresentation" -> { + try { + flutterEngineChannel?.invokeMethod("DataTransfer", call.arguments) + result.success(true) + } catch (e: Exception) { + result.success(false) + } + } + } + } + + private fun createFlutterEngine(tag: String): FlutterEngine? { + if(context == null) + return null + if (FlutterEngineCache.getInstance().get(tag) == null) { + val flutterEngine = FlutterEngine(context!!) + flutterEngine.navigationChannel.setInitialRoute(tag) + flutterEngine.dartExecutor.executeDartEntrypoint( + DartExecutor.DartEntrypoint.createDefault() + ) + flutterEngine.lifecycleChannel.appIsResumed() + // Cache the FlutterEngine to be used by FlutterActivity. + FlutterEngineCache.getInstance().put(tag, flutterEngine) + } + return FlutterEngineCache.getInstance().get(tag) + } + + override fun onDetachedFromActivity() { + } + + override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) { + } + + override fun onAttachedToActivity(binding: ActivityPluginBinding) { + this.context = binding.activity + this.displayManager = context?.getSystemService(Context.DISPLAY_SERVICE) as DisplayManager + } + + override fun onDetachedFromActivityForConfigChanges() { } } diff --git a/android/src/main/kotlin/com/namit/presentation_displays/PresentationDisplaysView.kt b/android/src/main/kotlin/com/namit/presentation_displays/PresentationDisplaysView.kt index b8541b0..724655a 100644 --- a/android/src/main/kotlin/com/namit/presentation_displays/PresentationDisplaysView.kt +++ b/android/src/main/kotlin/com/namit/presentation_displays/PresentationDisplaysView.kt @@ -14,99 +14,99 @@ import io.flutter.plugin.common.PluginRegistry import io.flutter.plugin.platform.PlatformView import org.json.JSONObject -class PresentationDisplaysView internal -constructor( - private val registrar: PluginRegistry.Registrar, - private val methodChannel: MethodChannel, - private val viewId: Int, - private val displayManager: DisplayManager) : - PlatformView, MethodChannel.MethodCallHandler { - - private val TAG = "${PresentationDisplaysPlugin.viewTypeId}_$viewId" - private var flutterEngineChannel: MethodChannel? = null - - init { - methodChannel.setMethodCallHandler(this) - } - - /** - * @hide - */ - override fun getView(): View { - return View(registrar.context()) - } - - /** - * @hide - */ - override fun dispose() { - } - - /** - * @hide - */ - override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) { - Log.i(TAG, "Channel: method: ${call.method} | arguments: ${call.arguments}") - when (call.method) { - "showPresentation" -> { - try { - val obj = JSONObject(call.arguments as String) - Log.i(TAG, "Channel: method: ${call.method} | displayId: ${obj.getInt("displayId")} | routerName: ${obj.getString("routerName")}") - - val displayId: Int = obj.getInt("displayId") - val tag: String = obj.getString("routerName") - val display = displayManager.getDisplay(displayId) - val flutterEngine = createFlutterEngine(tag) - - if (display != null) { - flutterEngine?.let { - flutterEngineChannel = MethodChannel(it.dartExecutor.binaryMessenger, "${TAG}_engine") - val presentation = PresentationDisplay(registrar.activity(), tag, display) - presentation.show() - result.success(true) - } ?: result.error("404", "Can't find FlutterEngine", null) - - } else { - result.error("404", "Can't find display with displayId is $displayId", null) - } - - } catch (e: Exception) { - result.error(call.method, e.message, null) - } - } - "listDisplay" -> { - val gson = Gson() - val category = call.arguments - val displays = displayManager.getDisplays(category as String?) - val listJson = ArrayList(); - for (display: Display in displays) { - val d = DisplayJson(display.displayId, display.flags, display.rotation, display.name) - listJson.add(d) - } - result.success(gson.toJson(listJson)) - } - "transferDataToPresentation" -> { - try { - flutterEngineChannel?.invokeMethod("DataTransfer", call.arguments) - result.success(true) - } catch (e: Exception) { - result.success(false) - } - } - } - } - - private fun createFlutterEngine(tag: String): FlutterEngine? { - if (FlutterEngineCache.getInstance().get(tag) == null) { - val flutterEngine = FlutterEngine(registrar.context()) - flutterEngine.navigationChannel.setInitialRoute(tag) - flutterEngine.dartExecutor.executeDartEntrypoint( - DartExecutor.DartEntrypoint.createDefault() - ) - flutterEngine.lifecycleChannel.appIsResumed() - // Cache the FlutterEngine to be used by FlutterActivity. - FlutterEngineCache.getInstance().put(tag, flutterEngine) - } - return FlutterEngineCache.getInstance().get(tag) - } -} \ No newline at end of file +//class PresentationDisplaysView internal +//constructor( +// private val registrar: PluginRegistry.Registrar, +// private val methodChannel: MethodChannel, +// private val viewId: Int, +// private val displayManager: DisplayManager) : +// PlatformView, MethodChannel.MethodCallHandler { +// +// private val TAG = "${PresentationDisplaysPlugin.viewTypeId}_$viewId" +// private var flutterEngineChannel: MethodChannel? = null +// +// init { +// methodChannel.setMethodCallHandler(this) +// } +// +// /** +// * @hide +// */ +// override fun getView(): View { +// return View(registrar.context()) +// } +// +// /** +// * @hide +// */ +// override fun dispose() { +// } +// +// /** +// * @hide +// */ +// override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) { +// Log.i(TAG, "Channel: method: ${call.method} | arguments: ${call.arguments}") +// when (call.method) { +// "showPresentation" -> { +// try { +// val obj = JSONObject(call.arguments as String) +// Log.i(TAG, "Channel: method: ${call.method} | displayId: ${obj.getInt("displayId")} | routerName: ${obj.getString("routerName")}") +// +// val displayId: Int = obj.getInt("displayId") +// val tag: String = obj.getString("routerName") +// val display = displayManager.getDisplay(displayId) +// val flutterEngine = createFlutterEngine(tag) +// +// if (display != null) { +// flutterEngine?.let { +// flutterEngineChannel = MethodChannel(it.dartExecutor.binaryMessenger, "${TAG}_engine") +// val presentation = PresentationDisplay(registrar.activity(), tag, display) +// presentation.show() +// result.success(true) +// } ?: result.error("404", "Can't find FlutterEngine", null) +// +// } else { +// result.error("404", "Can't find display with displayId is $displayId", null) +// } +// +// } catch (e: Exception) { +// result.error(call.method, e.message, null) +// } +// } +// "listDisplay" -> { +// val gson = Gson() +// val category = call.arguments +// val displays = displayManager.getDisplays(category as String?) +// val listJson = ArrayList(); +// for (display: Display in displays) { +// val d = DisplayJson(display.displayId, display.flags, display.rotation, display.name) +// listJson.add(d) +// } +// result.success(gson.toJson(listJson)) +// } +// "transferDataToPresentation" -> { +// try { +// flutterEngineChannel?.invokeMethod("DataTransfer", call.arguments) +// result.success(true) +// } catch (e: Exception) { +// result.success(false) +// } +// } +// } +// } +// +// private fun createFlutterEngine(tag: String): FlutterEngine? { +// if (FlutterEngineCache.getInstance().get(tag) == null) { +// val flutterEngine = FlutterEngine(registrar.context()) +// flutterEngine.navigationChannel.setInitialRoute(tag) +// flutterEngine.dartExecutor.executeDartEntrypoint( +// DartExecutor.DartEntrypoint.createDefault() +// ) +// flutterEngine.lifecycleChannel.appIsResumed() +// // Cache the FlutterEngine to be used by FlutterActivity. +// FlutterEngineCache.getInstance().put(tag, flutterEngine) +// } +// return FlutterEngineCache.getInstance().get(tag) +// } +//} \ No newline at end of file diff --git a/example/lib/main.dart b/example/lib/main.dart index 138f203..2d2bca3 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -7,9 +7,9 @@ import 'package:presentation_displays/display.dart'; Route generateRoute(RouteSettings settings) { switch (settings.name) { case '/': - return MaterialPageRoute(builder: (_) => DisplayManager()); + return MaterialPageRoute(builder: (_) => DisplayManagerScreen()); case 'presentation': - return MaterialPageRoute(builder: (_) => Presentation()); + return MaterialPageRoute(builder: (_) => PresentationScreen()); default: return MaterialPageRoute( builder: (_) => @@ -52,59 +52,55 @@ class Button extends StatelessWidget { } } -/// Displays manager - -class DisplayManager extends StatefulWidget { +/// Main Screen +class DisplayManagerScreen extends StatefulWidget { @override - _DisplayManagerState createState() => _DisplayManagerState(); + _DisplayManagerScreenState createState() => _DisplayManagerScreenState(); } -class _DisplayManagerState extends State { - DisplayController controller = DisplayController(); +class _DisplayManagerScreenState extends State { + DisplayManager displayManager = DisplayManager(); List displays = []; @override Widget build(BuildContext context) { - return DisplaysManager( - controller: controller, - child: Scaffold( - appBar: AppBar( - title: const Text('Plugin example app'), - ), - body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Wrap( - alignment: WrapAlignment.center, - children: [ - Button("Get Displays", () async { - final values = await controller.getDisplays(); - print(values); - displays.clear(); - displays.addAll(values); - print(displays); - }), - Button("ShowPresentation", () async { - final value = await controller.showPresentation(displayId: displays[1].displayId,routerName:"presentation"); - }), - Button("NameByDisplayId", () async { - final value = await controller - .getNameByDisplayId(displays[1].displayId); - print(value); - }), - Button("NameByIndex", () async { - final value = await controller.getNameByIndex(1); - print(value); - }), - Button("TransferData", () async { - final value = await controller.transferDataToPresentation("test transfer data"); - print(value); - }) - ], - ), - ], - ), + return Scaffold( + appBar: AppBar( + title: const Text('Plugin example app'), + ), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Wrap( + alignment: WrapAlignment.center, + children: [ + Button("Get Displays", () async { + final values = await displayManager.getDisplays(); + print(values); + displays.clear(); + displays.addAll(values); + print(displays); + }), + Button("ShowPresentation", () async { + final value = await displayManager.showPresentation(displayId: displays[1].displayId,routerName:"presentation"); + }), + Button("NameByDisplayId", () async { + final value = await displayManager + .getNameByDisplayId(displays[1].displayId); + print(value); + }), + Button("NameByIndex", () async { + final value = await displayManager.getNameByIndex(1); + print(value); + }), + Button("TransferData", () async { + final value = await displayManager.transferDataToPresentation("test transfer data"); + print(value); + }) + ], + ), + ], ), ), ); @@ -112,13 +108,13 @@ class _DisplayManagerState extends State { } -/// Presentation -class Presentation extends StatefulWidget { +/// UI of Presentation +class PresentationScreen extends StatefulWidget { @override - _PresentationState createState() => _PresentationState(); + _PresentationScreenState createState() => _PresentationScreenState(); } -class _PresentationState extends State { +class _PresentationScreenState extends State { String value = "init"; @override Widget build(BuildContext context) { diff --git a/example/pubspec.lock b/example/pubspec.lock index bdf7806..0c8163f 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -1,27 +1,13 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: - archive: - dependency: transitive - description: - name: archive - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.13" - args: - dependency: transitive - description: - name: args - url: "https://pub.dartlang.org" - source: hosted - version: "1.6.0" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.4.1" + version: "2.4.2" boolean_selector: dependency: transitive description: @@ -29,34 +15,34 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.0" - charcode: + characters: dependency: transitive description: - name: charcode + name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.3" - collection: + version: "1.0.0" + charcode: dependency: transitive description: - name: collection + name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.14.12" - convert: + version: "1.1.3" + clock: dependency: transitive description: - name: convert + name: clock url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" - crypto: + version: "1.0.1" + collection: dependency: transitive description: - name: crypto + name: collection url: "https://pub.dartlang.org" source: hosted - version: "2.1.4" + version: "1.14.13" cupertino_icons: dependency: "direct main" description: @@ -64,6 +50,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.1.3" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" flutter: dependency: "direct main" description: flutter @@ -74,20 +67,13 @@ packages: description: flutter source: sdk version: "0.0.0" - image: - dependency: transitive - description: - name: image - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.12" matcher: dependency: transitive description: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.6" + version: "0.12.8" meta: dependency: transitive description: @@ -101,14 +87,7 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.6.4" - petitparser: - dependency: transitive - description: - name: petitparser - url: "https://pub.dartlang.org" - source: hosted - version: "2.4.0" + version: "1.7.0" presentation_displays: dependency: "direct main" description: @@ -116,13 +95,6 @@ packages: relative: true source: path version: "0.1.0" - quiver: - dependency: transitive - description: - name: quiver - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.3" sky_engine: dependency: transitive description: flutter @@ -141,7 +113,7 @@ packages: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.9.3" + version: "1.9.5" stream_channel: dependency: transitive description: @@ -169,14 +141,14 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.15" + version: "0.2.17" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.1.6" + version: "1.2.0" vector_math: dependency: transitive description: @@ -184,13 +156,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.8" - xml: - dependency: transitive - description: - name: xml - url: "https://pub.dartlang.org" - source: hosted - version: "3.6.1" sdks: - dart: ">=2.7.0 <3.0.0" + dart: ">=2.9.0-14.0.dev <3.0.0" flutter: ">=1.10.0" diff --git a/lib/PresentationDisplays.dart b/lib/PresentationDisplays.dart index 14115c1..640812f 100644 --- a/lib/PresentationDisplays.dart +++ b/lib/PresentationDisplays.dart @@ -22,7 +22,7 @@ class PresentationDisplay extends StatefulWidget { } class _PresentationDisplayState extends State { - final _presentationChannel = "presentation_displays_plugin_0_engine"; + final _presentationChannel = "presentation_displays_plugin_engine"; MethodChannel _presentationMethodChannel; @override diff --git a/lib/displays_manager.dart b/lib/displays_manager.dart index 157cacb..2ae26db 100644 --- a/lib/displays_manager.dart +++ b/lib/displays_manager.dart @@ -3,7 +3,6 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:presentation_displays/PresentationDisplays.dart'; import 'package:presentation_displays/display.dart'; const _listDisplay = "listDisplay"; @@ -13,24 +12,14 @@ const _transferDataToPresentation = "transferDataToPresentation"; const String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION"; -class DisplayController { +/// it will provide you with the method for you to work with [PresentationDisplay]. +class DisplayManager { final _displayChannel = "presentation_displays_plugin"; - - var _viewId = 0; MethodChannel _displayMethodChannel; - - /// Callback to invoke after the platform view has been created. - /// May be null. - _onPlatformViewCreated(int viewId) { - if (_viewId != viewId || _displayMethodChannel == null) { - debugPrint('--------->: channel ${_displayChannel}_$viewId'); - _displayMethodChannel = MethodChannel("${_displayChannel}_$viewId"); - _displayMethodChannel.setMethodCallHandler((call) async { - debugPrint('--------->: method: ${call.method} | arguments: ${call.arguments}'); - }); - } + DisplayManager(){ + _displayMethodChannel = MethodChannel(_displayChannel); } /// Gets all currently valid logical displays of the specified category. @@ -122,32 +111,4 @@ class DisplayController { return _displayMethodChannel?.invokeMethod( _transferDataToPresentation, arguments); } -} - -/// Please wrap this theme on your Widget, it will provide you with the [DisplayController] method for you to work with [PresentationDisplay]. -class DisplaysManager extends StatefulWidget { - - DisplaysManager({@required this.controller,this.child}); - - final DisplayController controller; - final Widget child; - - @override - _DisplaysManagerState createState() => _DisplaysManagerState(); -} - -class _DisplaysManagerState extends State { - @override - Widget build(BuildContext context) { - return Stack( - children: [ - AndroidView( - viewType: widget.controller._displayChannel, - onPlatformViewCreated: (viewId) => - widget.controller._onPlatformViewCreated(viewId), - ), - widget.child - ], - ); - } -} +} \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index 4270840..ff7e9b7 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,27 +1,13 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: - archive: - dependency: transitive - description: - name: archive - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.13" - args: - dependency: transitive - description: - name: args - url: "https://pub.dartlang.org" - source: hosted - version: "1.6.0" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.4.1" + version: "2.4.2" boolean_selector: dependency: transitive description: @@ -29,6 +15,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" charcode: dependency: transitive description: @@ -36,27 +29,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.3" - collection: + clock: dependency: transitive description: - name: collection + name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.14.12" - convert: + version: "1.0.1" + collection: dependency: transitive description: - name: convert + name: collection url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" - crypto: + version: "1.14.13" + fake_async: dependency: transitive description: - name: crypto + name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "2.1.4" + version: "1.1.0" flutter: dependency: "direct main" description: flutter @@ -67,20 +60,13 @@ packages: description: flutter source: sdk version: "0.0.0" - image: - dependency: transitive - description: - name: image - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.12" matcher: dependency: transitive description: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.6" + version: "0.12.8" meta: dependency: transitive description: @@ -94,21 +80,7 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.6.4" - petitparser: - dependency: transitive - description: - name: petitparser - url: "https://pub.dartlang.org" - source: hosted - version: "2.4.0" - quiver: - dependency: transitive - description: - name: quiver - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.3" + version: "1.7.0" sky_engine: dependency: transitive description: flutter @@ -127,7 +99,7 @@ packages: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.9.3" + version: "1.9.5" stream_channel: dependency: transitive description: @@ -155,14 +127,14 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.15" + version: "0.2.17" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.1.6" + version: "1.2.0" vector_math: dependency: transitive description: @@ -170,13 +142,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.8" - xml: - dependency: transitive - description: - name: xml - url: "https://pub.dartlang.org" - source: hosted - version: "3.6.1" sdks: - dart: ">=2.7.0 <3.0.0" + dart: ">=2.9.0-14.0.dev <3.0.0" flutter: ">=1.10.0" diff --git a/pubspec.yaml b/pubspec.yaml index 79ca5c6..fc7cbc6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: presentation_displays description: Flutter plugin supports to run on two screens. It's basically a tablet connected to another screen via an HDMI or Wireless homepage: https://github.com/VNAPNIC/presentation-displays -version: 0.1.0 +version: 0.1.1 author: vn.apnic@gmail.com environment: