[
  {
    "path": ".github/workflows/stale.yml",
    "content": "# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.\n#\n# You can adjust the behavior by modifying this file.\n# For more information, see:\n# https://github.com/actions/stale\nname: Mark stale issues and pull requests\n\non:\n  schedule:\n  - cron: '30 20 * * *'\n\njobs:\n  stale:\n\n    runs-on: ubuntu-latest\n    permissions:\n      issues: write\n      pull-requests: write\n\n    steps:\n    - uses: actions/stale@v5\n      with:\n        repo-token: ${{ secrets.GITHUB_TOKEN }}\n        stale-issue-message: 'This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of flutter doctor -v and a minimal reproduction of the issue.'\n        stale-pr-message: 'Stale pull request message'\n        stale-issue-label: 'no-issue-activity'\n        stale-pr-label: 'no-pr-activity'\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n.dart_tool/\n\n.packages\n.pub/\n\nbuild/\n"
  },
  {
    "path": ".gradle/5.1.1/gc.properties",
    "content": ""
  },
  {
    "path": ".gradle/buildOutputCleanup/cache.properties",
    "content": "#Thu May 09 15:59:56 ICT 2019\ngradle.version=5.1.1\n"
  },
  {
    "path": ".gradle/vcs-1/gc.properties",
    "content": ""
  },
  {
    "path": ".idea/.gitignore",
    "content": "# Default ignored files\n/workspace.xml"
  },
  {
    "path": ".idea/codeStyles/Project.xml",
    "content": "<component name=\"ProjectCodeStyleConfiguration\">\n  <code_scheme name=\"Project\" version=\"173\">\n    <JetCodeStyleSettings>\n      <option name=\"PACKAGES_TO_USE_STAR_IMPORTS\">\n        <value>\n          <package name=\"java.util\" alias=\"false\" withSubpackages=\"false\" />\n          <package name=\"kotlinx.android.synthetic\" alias=\"false\" withSubpackages=\"true\" />\n          <package name=\"io.ktor\" alias=\"false\" withSubpackages=\"true\" />\n        </value>\n      </option>\n      <option name=\"PACKAGES_IMPORT_LAYOUT\">\n        <value>\n          <package name=\"\" alias=\"false\" withSubpackages=\"true\" />\n          <package name=\"java\" alias=\"false\" withSubpackages=\"true\" />\n          <package name=\"javax\" alias=\"false\" withSubpackages=\"true\" />\n          <package name=\"kotlin\" alias=\"false\" withSubpackages=\"true\" />\n          <package name=\"\" alias=\"true\" withSubpackages=\"true\" />\n        </value>\n      </option>\n    </JetCodeStyleSettings>\n    <codeStyleSettings language=\"XML\">\n      <indentOptions>\n        <option name=\"CONTINUATION_INDENT_SIZE\" value=\"4\" />\n      </indentOptions>\n      <arrangement>\n        <rules>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>xmlns:android</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>^$</XML_NAMESPACE>\n                </AND>\n              </match>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>xmlns:.*</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>^$</XML_NAMESPACE>\n                </AND>\n              </match>\n              <order>BY_NAME</order>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>.*:id</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\n                </AND>\n              </match>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>.*:name</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\n                </AND>\n              </match>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>name</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>^$</XML_NAMESPACE>\n                </AND>\n              </match>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>style</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>^$</XML_NAMESPACE>\n                </AND>\n              </match>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>.*</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>^$</XML_NAMESPACE>\n                </AND>\n              </match>\n              <order>BY_NAME</order>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>.*</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\n                </AND>\n              </match>\n              <order>ANDROID_ATTRIBUTE_ORDER</order>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>.*</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>.*</XML_NAMESPACE>\n                </AND>\n              </match>\n              <order>BY_NAME</order>\n            </rule>\n          </section>\n        </rules>\n      </arrangement>\n    </codeStyleSettings>\n  </code_scheme>\n</component>"
  },
  {
    "path": ".idea/encodings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"Encoding\" addBOMForNewFiles=\"with NO BOM\" />\n</project>"
  },
  {
    "path": ".idea/libraries/Dart_SDK.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Dart SDK\">\n    <CLASSES>\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/async\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/cli\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/collection\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/convert\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/core\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/developer\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/ffi\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/html\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/indexed_db\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/io\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/isolate\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/js\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/js_util\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/math\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/mirrors\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/svg\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/typed_data\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/web_audio\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/web_gl\" />\n      <root url=\"file://$PROJECT_DIR$/../../flutter/bin/cache/dart-sdk/lib/web_sql\" />\n    </CLASSES>\n    <JAVADOC />\n    <SOURCES />\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Flutter_Plugins.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Flutter Plugins\" type=\"FlutterPluginsLibraryType\">\n    <CLASSES>\n      <root url=\"file://$PROJECT_DIR$\" />\n    </CLASSES>\n    <JAVADOC />\n    <SOURCES />\n  </library>\n</component>"
  },
  {
    "path": ".idea/libraries/Flutter_for_Android.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Flutter for Android\">\n    <CLASSES>\n      <root url=\"jar://D:/flutter/bin/cache/artifacts/engine/android-arm/flutter.jar!/\" />\n    </CLASSES>\n    <JAVADOC />\n    <SOURCES />\n  </library>\n</component>"
  },
  {
    "path": ".idea/misc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"FrameworkDetectionExcludesConfiguration\">\n    <type id=\"android\" />\n  </component>\n  <component name=\"ProjectRootManager\" version=\"2\" languageLevel=\"JDK_1_8\" project-jdk-name=\"1.8\" project-jdk-type=\"JavaSDK\" />\n  <component name=\"ProjectType\">\n    <option name=\"id\" value=\"io.flutter\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/modules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n      <module fileurl=\"file://$PROJECT_DIR$/blue_thermal_printer.iml\" filepath=\"$PROJECT_DIR$/blue_thermal_printer.iml\" />\n    </modules>\n  </component>\n</project>"
  },
  {
    "path": ".idea/runConfigurations/example_lib_main_dart.xml",
    "content": "<component name=\"ProjectRunConfigurationManager\">\n  <configuration default=\"false\" name=\"example/lib/main.dart\" type=\"FlutterRunConfigurationType\" factoryName=\"Flutter\" singleton=\"false\">\n    <option name=\"filePath\" value=\"$PROJECT_DIR$/example/lib/main.dart\" />\n    <method v=\"2\" />\n  </configuration>\n</component>"
  },
  {
    "path": ".idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"$PROJECT_DIR$\" vcs=\"Git\" />\n  </component>\n</project>"
  },
  {
    "path": ".metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled and should not be manually edited.\n\nversion:\n  revision: 7a4c33425ddd78c54aba07d86f3f9a4a0051769b\n  channel: stable\n\nproject_type: plugin\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "## 1.2.3\n* demonstrate using enum for readability\n* drawer pin by erica\n* fix bug on ios\n\n## 1.2.2\n* upgrading gradle\n\n## 1.2.1\n* fix android 12 permission\n\n## 1.2.0\n* fix web build issue\n\n## 1.1.9\n* fix bluetooth listener not working, add additional bluetooth state info, add get connected device function\n* Issue #123 fix - app will now automatically disconnect if device is turned off\n  thanks to knight-dev\n\n## 1.1.8\n* Fix bug on ios build\n\n## 1.1.7\n\n* dartdoc comments and Dart formatter\n\n## 1.1.6\n\n* Add print3Column method\n* Add print4Column method\n* Support format string\n\n## 1.1.5\n\n* Migrate to Android embedding v2\n\n## 1.1.4\n\n* Fix Error Null-Safety\n\n## 1.1.3\n\n* Fix Cast Error on getBondedDevices\n\n## 1.1.2\n\n* Migrate to null-safety\n\n## 1.1.1\n\n* Support different charset in print methods, thanks to danilof\n\n## 1.1.0\n\n* Add print image bytes method, thanks to mvanvu\n\n## 1.0.9\n\n* Avoiding activity null pointer, thanks to wmattei\n\n## 1.0.8\n\n* fix crash with \"Methods marked with @UiThread must be executed on the main thread, thanks to ricardochen\n\n## 1.0.7\n\n* change documentation\n\n## 1.0.6\n\n* add size to printleftright\n\n## 1.0.5\n\n* fix bug\n\n## 1.0.4\n\n* fix bug\n\n## 1.0.3\n\n* Add print left + right\n\n## 1.0.2\n\n* Add Endline in QRCODE\n\n## 1.0.1\n\n* Add Doc.\n\n## 1.0.0\n\n* initial release.\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2022 Zaki Mubarok (kakzaki.dev)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# blue_thermal_printer\n\n\n[![pub package](https://img.shields.io/pub/v/blue_thermal_printer.svg)](https://pub.dev/packages/blue_thermal_printer)\n[![pub package](https://img.shields.io/twitter/follow/kakzaki_id.svg?colorA=1da1f2&colorB=&label=Follow%20on%20Twitter)](https://twitter.com/kakzaki_id)\n\nA new Flutter plugin for connecting to thermal printer via bluetooth\n(Android Only),\nthis plugin is still under development\nNote: Migrate your project to AndroidX\n\n\n## Platform Support\n\n| Android | iOS | MacOS | Web | Linux | Windows |\n| :-----: | :-: | :---: | :-: | :---: | :-----: |\n|   ✔️    | ️X  |  ️X   | ️X  |  ️X   |   ️X    |\n\n\n\n## Getting Started\n\n1. Depend on it\n\nAdd this to your package's pubspec.yaml file:\n\n    dependencies:\n      blue_thermal_printer: ^any\n\n2. Install it\n\nYou can install packages from the command line:\n\nwith Flutter:\n\n    $ flutter packages get\n\nAlternatively, your editor might support flutter packages get. Check the docs for your editor to learn more.\n\n\n3. Import it\n\nNow in your Dart code, you can use:\n\n     import 'package:blue_thermal_printer/blue_thermal_printer.dart';\n\n\nEXAMPLE:\n\nFor detail demonstration please look at [example](https://github.com/kakzaki/blue_thermal_printer/tree/master/example) folder\n\nNote: make sure to upgrade your project to compileSdkVersion 31 or above\n\nIf you like my content, please consider buying me a coffee. Thank you for your support!\n\n<a href=\"https://www.buymeacoffee.com/QP1rCmf5L\" target=\"_blank\"><img src=\"https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png\" alt=\"Buy Me A Coffee\" style=\"height: 41px !important;width: 174px !important;box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;\" ></a>\n\n[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/Z8Z6656JW)\n\nbagi yang dari Indonesia bisa lewat saweria berikut\n\nhttps://saweria.co/kakzaki\n"
  },
  {
    "path": "android/.gitignore",
    "content": "*.iml\n.gradle\n/local.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\n"
  },
  {
    "path": "android/build.gradle",
    "content": "group 'id.kakzaki.blue_thermal_printer'\n\n\nbuildscript {\n    repositories {\n        google()\n        mavenCentral()\n    }\n\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.5.4'\n    }\n}\n\nrootProject.allprojects {\n    repositories {\n        google()\n        mavenCentral()\n    }\n}\n\napply plugin: 'com.android.library'\n\nandroid {\n    compileSdkVersion 31\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    defaultConfig {\n        minSdkVersion 18\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n    lintOptions {\n        disable 'InvalidPackage'\n    }\n}\ndependencies {\n    implementation 'androidx.appcompat:appcompat:1.4.2'\n    implementation 'com.google.zxing:core:3.3.3'\n    implementation 'com.android.support:multidex:1.0.3'\n    implementation 'com.journeyapps:zxing-android-embedded:3.6.0@aar'\n}\n"
  },
  {
    "path": "android/gradle.properties",
    "content": "org.gradle.jvmargs=-Xmx1536M\n\n"
  },
  {
    "path": "android/settings.gradle",
    "content": "rootProject.name = 'blue_thermal_printer'\n"
  },
  {
    "path": "android/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  package=\"id.kakzaki.blue_thermal_printer\">\n    <uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>\n    <!-- Request legacy Bluetooth permissions on older devices. -->\n    <uses-permission android:name=\"android.permission.BLUETOOTH\"\n        />\n    <uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>\n\n    <!-- Needed only if your app looks for Bluetooth devices.\n         You must add an attribute to this permission, or declare the\n         ACCESS_FINE_LOCATION permission, depending on the results when you\n         check location usage in your app. -->\n    <uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>\n    <uses-permission android:name=\"android.permission.BLUETOOTH_SCAN\" />\n\n    <!-- Needed only if your app makes the device discoverable to Bluetooth\n         devices. -->\n    <uses-permission android:name=\"android.permission.BLUETOOTH_ADVERTISE\" />\n\n    <!-- Needed only if your app communicates with already-paired Bluetooth\n         devices. -->\n    <uses-permission android:name=\"android.permission.BLUETOOTH_CONNECT\" />\n\n</manifest>\n"
  },
  {
    "path": "android/src/main/java/id/kakzaki/blue_thermal_printer/BlueThermalPrinterPlugin.java",
    "content": "package id.kakzaki.blue_thermal_printer;\n\nimport android.Manifest;\nimport android.app.Activity;\nimport android.app.Application;\nimport android.bluetooth.BluetoothAdapter;\nimport android.bluetooth.BluetoothDevice;\nimport android.bluetooth.BluetoothManager;\nimport android.bluetooth.BluetoothSocket;\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.content.pm.PackageManager;\n\nimport androidx.annotation.NonNull;\nimport androidx.core.app.ActivityCompat;\nimport androidx.core.content.ContextCompat;\n\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.os.Build;\nimport android.util.Log;\nimport android.os.AsyncTask;\nimport android.os.Handler;\nimport android.os.Looper;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\nimport java.io.PrintWriter;\nimport java.io.StringWriter;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.UUID;\n\nimport io.flutter.embedding.engine.plugins.FlutterPlugin;\nimport io.flutter.embedding.engine.plugins.activity.ActivityAware;\nimport io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;\nimport io.flutter.plugin.common.BinaryMessenger;\nimport io.flutter.plugin.common.EventChannel;\nimport io.flutter.plugin.common.EventChannel.StreamHandler;\nimport io.flutter.plugin.common.EventChannel.EventSink;\nimport io.flutter.plugin.common.MethodCall;\nimport io.flutter.plugin.common.MethodChannel;\nimport io.flutter.plugin.common.MethodChannel.MethodCallHandler;\nimport io.flutter.plugin.common.MethodChannel.Result;\nimport io.flutter.plugin.common.PluginRegistry.RequestPermissionsResultListener;\n\nimport com.google.zxing.BarcodeFormat;\nimport com.google.zxing.MultiFormatWriter;\nimport com.google.zxing.common.BitMatrix;\nimport com.journeyapps.barcodescanner.BarcodeEncoder;\n\npublic class BlueThermalPrinterPlugin implements FlutterPlugin, ActivityAware,MethodCallHandler, RequestPermissionsResultListener {\n\n  private static final String TAG = \"BThermalPrinterPlugin\";\n  private static final String NAMESPACE = \"blue_thermal_printer\";\n  private static final int REQUEST_COARSE_LOCATION_PERMISSIONS = 1451;\n  private static final UUID MY_UUID = UUID.fromString(\"00001101-0000-1000-8000-00805F9B34FB\");\n  private static ConnectedThread THREAD = null;\n  private BluetoothAdapter mBluetoothAdapter;\n\n  private Result pendingResult;\n\n  private EventSink readSink;\n  private EventSink statusSink;\n\n  private FlutterPluginBinding pluginBinding;\n  private ActivityPluginBinding activityBinding;\n  private final Object initializationLock = new Object();\n  private Context context;\n  private MethodChannel channel;\n\n  private EventChannel stateChannel;\n  private BluetoothManager mBluetoothManager;\n\n  private Activity activity;\n\n  public BlueThermalPrinterPlugin() {\n  }\n\n  @Override\n  public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {\n    pluginBinding = binding;\n  }\n\n  @Override\n  public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {\n    pluginBinding = null;\n  }\n\n  @Override\n  public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) {\n    activityBinding = binding;\n    setup(\n            pluginBinding.getBinaryMessenger(),\n            (Application) pluginBinding.getApplicationContext(),\n            activityBinding.getActivity(),\n            activityBinding);\n  }\n\n  @Override\n  public void onDetachedFromActivityForConfigChanges() {\n    onDetachedFromActivity();\n  }\n\n  @Override\n  public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) {\n    onAttachedToActivity(binding);\n  }\n\n  @Override\n  public void onDetachedFromActivity() {\n    detach();\n  }\n\n  private void setup(\n          final BinaryMessenger messenger,\n          final Application application,\n          final Activity activity,\n          final ActivityPluginBinding activityBinding) {\n    synchronized (initializationLock) {\n      Log.i(TAG, \"setup\");\n      this.activity = activity;\n      this.context = application;\n      channel = new MethodChannel(messenger, NAMESPACE + \"/methods\");\n      channel.setMethodCallHandler(this);\n      stateChannel = new EventChannel(messenger, NAMESPACE + \"/state\");\n      stateChannel.setStreamHandler(stateStreamHandler);\n      EventChannel readChannel = new EventChannel(messenger, NAMESPACE + \"/read\");\n      readChannel.setStreamHandler(readResultsHandler);\n      mBluetoothManager = (BluetoothManager) application.getSystemService(Context.BLUETOOTH_SERVICE);\n      mBluetoothAdapter = mBluetoothManager.getAdapter();\n      activityBinding.addRequestPermissionsResultListener(this);\n    }\n  }\n\n\n  private void detach() {\n    Log.i(TAG, \"detach\");\n    context = null;\n    activityBinding.removeRequestPermissionsResultListener(this);\n    activityBinding = null;\n    channel.setMethodCallHandler(null);\n    channel = null;\n    stateChannel.setStreamHandler(null);\n    stateChannel = null;\n    mBluetoothAdapter = null;\n    mBluetoothManager = null;\n  }\n\n  // MethodChannel.Result wrapper that responds on the platform thread.\n  private static class MethodResultWrapper implements Result {\n    private final Result methodResult;\n    private final Handler handler;\n\n    MethodResultWrapper(Result result) {\n      methodResult = result;\n      handler = new Handler(Looper.getMainLooper());\n    }\n\n    @Override\n    public void success(final Object result) {\n      handler.post(() -> methodResult.success(result));\n    }\n\n    @Override\n    public void error(@NonNull final String errorCode, final String errorMessage, final Object errorDetails) {\n      handler.post(() -> methodResult.error(errorCode, errorMessage, errorDetails));\n    }\n\n    @Override\n    public void notImplemented() {\n      handler.post(methodResult::notImplemented);\n    }\n  }\n\n  @Override\n  public void onMethodCall(@NonNull MethodCall call, @NonNull Result rawResult) {\n    Result result = new MethodResultWrapper(rawResult);\n\n    if (mBluetoothAdapter == null && !\"isAvailable\".equals(call.method)) {\n      result.error(\"bluetooth_unavailable\", \"the device does not have bluetooth\", null);\n      return;\n    }\n\n    final Map<String, Object> arguments = call.arguments();\n    switch (call.method) {\n\n      case \"state\":\n        state(result);\n        break;\n\n      case \"isAvailable\":\n        result.success(mBluetoothAdapter != null);\n        break;\n\n      case \"isOn\":\n        try {\n          result.success(mBluetoothAdapter.isEnabled());\n        } catch (Exception ex) {\n          result.error(\"Error\", ex.getMessage(), exceptionToString(ex));\n        }\n        break;\n\n      case \"isConnected\":\n        result.success(THREAD != null);\n        break;\n\n      case \"isDeviceConnected\":\n        if (arguments.containsKey(\"address\")) {\n          String address = (String) arguments.get(\"address\");\n          isDeviceConnected(result, address);\n        } else {\n          result.error(\"invalid_argument\", \"argument 'address' not found\", null);\n        }\n        break;\n\n      case \"openSettings\":\n        ContextCompat.startActivity(context, new Intent(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS),\n                null);\n        result.success(true);\n        break;\n\n      case \"getBondedDevices\":\n        try {\n\n          if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n\n            if (ContextCompat.checkSelfPermission(activity,\n                    Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED ||\n                    ContextCompat.checkSelfPermission(activity,\n                            Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED ||\n                    ContextCompat.checkSelfPermission(activity,\n                            Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {\n\n              ActivityCompat.requestPermissions(activity,new String[]{\n                      Manifest.permission.BLUETOOTH_SCAN,\n                      Manifest.permission.BLUETOOTH_CONNECT,\n                      Manifest.permission.ACCESS_FINE_LOCATION,\n              }, 1);\n\n              pendingResult = result;\n              break;\n            }\n          } else {\n            if (ContextCompat.checkSelfPermission(activity,\n                    Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED||ContextCompat.checkSelfPermission(activity,\n                    Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {\n\n              ActivityCompat.requestPermissions(activity,\n                      new String[] { Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION }, REQUEST_COARSE_LOCATION_PERMISSIONS);\n\n              pendingResult = result;\n              break;\n            }\n          }\n          getBondedDevices(result);\n\n        } catch (Exception ex) {\n          result.error(\"Error\", ex.getMessage(), exceptionToString(ex));\n        }\n\n        break;\n\n      case \"connect\":\n        if (arguments.containsKey(\"address\")) {\n          String address = (String) arguments.get(\"address\");\n          connect(result, address);\n        } else {\n          result.error(\"invalid_argument\", \"argument 'address' not found\", null);\n        }\n        break;\n\n      case \"disconnect\":\n        disconnect(result);\n        break;\n\n      case \"write\":\n        if (arguments.containsKey(\"message\")) {\n          String message = (String) arguments.get(\"message\");\n          write(result, message);\n        } else {\n          result.error(\"invalid_argument\", \"argument 'message' not found\", null);\n        }\n        break;\n\n      case \"writeBytes\":\n        if (arguments.containsKey(\"message\")) {\n          byte[] message = (byte[]) arguments.get(\"message\");\n          writeBytes(result, message);\n        } else {\n          result.error(\"invalid_argument\", \"argument 'message' not found\", null);\n        }\n        break;\n\n      case \"printCustom\":\n        if (arguments.containsKey(\"message\")) {\n          String message = (String) arguments.get(\"message\");\n          int size = (int) arguments.get(\"size\");\n          int align = (int) arguments.get(\"align\");\n          String charset = (String) arguments.get(\"charset\");\n          printCustom(result, message, size, align, charset);\n        } else {\n          result.error(\"invalid_argument\", \"argument 'message' not found\", null);\n        }\n        break;\n\n      case \"printNewLine\":\n        printNewLine(result);\n        break;\n\n      case \"paperCut\":\n        paperCut(result);\n        break;\n\n      case \"drawerPin2\":\n        drawerPin2(result);\n        break;\n\n      case \"drawerPin5\":\n        drawerPin5(result);\n        break;\n\n      case \"printImage\":\n        if (arguments.containsKey(\"pathImage\")) {\n          String pathImage = (String) arguments.get(\"pathImage\");\n          printImage(result, pathImage);\n        } else {\n          result.error(\"invalid_argument\", \"argument 'pathImage' not found\", null);\n        }\n        break;\n\n        case \"printImageBytes\":\n        if (arguments.containsKey(\"bytes\")) {\n          byte[] bytes = (byte[]) arguments.get(\"bytes\");\n          printImageBytes(result, bytes);\n        } else {\n          result.error(\"invalid_argument\", \"argument 'bytes' not found\", null);\n        }\n        break;\n\n      case \"printQRcode\":\n        if (arguments.containsKey(\"textToQR\")) {\n          String textToQR = (String) arguments.get(\"textToQR\");\n          int width = (int) arguments.get(\"width\");\n          int height = (int) arguments.get(\"height\");\n          int align = (int) arguments.get(\"align\");\n          printQRcode(result, textToQR, width, height, align);\n        } else {\n          result.error(\"invalid_argument\", \"argument 'textToQR' not found\", null);\n        }\n        break;\n      case \"printLeftRight\":\n        if (arguments.containsKey(\"string1\")) {\n          String string1 = (String) arguments.get(\"string1\");\n          String string2 = (String) arguments.get(\"string2\");\n          int size = (int) arguments.get(\"size\");\n          String charset = (String) arguments.get(\"charset\");\n          String format = (String) arguments.get(\"format\");\n          printLeftRight(result, string1, string2, size, charset,format);\n        } else {\n          result.error(\"invalid_argument\", \"argument 'message' not found\", null);\n        }\n        break;\n      case \"print3Column\":\n        if (arguments.containsKey(\"string1\")) {\n          String string1 = (String) arguments.get(\"string1\");\n          String string2 = (String) arguments.get(\"string2\");\n          String string3 = (String) arguments.get(\"string3\");\n          int size = (int) arguments.get(\"size\");\n          String charset = (String) arguments.get(\"charset\");\n          String format = (String) arguments.get(\"format\");\n          print3Column(result, string1, string2,string3, size, charset,format);\n        } else {\n          result.error(\"invalid_argument\", \"argument 'message' not found\", null);\n        }\n        break;\n      case \"print4Column\":\n        if (arguments.containsKey(\"string1\")) {\n          String string1 = (String) arguments.get(\"string1\");\n          String string2 = (String) arguments.get(\"string2\");\n          String string3 = (String) arguments.get(\"string3\");\n          String string4 = (String) arguments.get(\"string4\");\n          int size = (int) arguments.get(\"size\");\n          String charset = (String) arguments.get(\"charset\");\n          String format = (String) arguments.get(\"format\");\n          print4Column(result, string1, string2,string3,string4, size, charset,format);\n        } else {\n          result.error(\"invalid_argument\", \"argument 'message' not found\", null);\n        }\n        break;\n      default:\n        result.notImplemented();\n        break;\n    }\n  }\n\n  /**\n   * @param requestCode  requestCode\n   * @param permissions  permissions\n   * @param grantResults grantResults\n   * @return boolean\n   */\n  @Override\n  public boolean onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {\n\n    if (requestCode == REQUEST_COARSE_LOCATION_PERMISSIONS) {\n      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {\n        getBondedDevices(pendingResult);\n      } else {\n        pendingResult.error(\"no_permissions\", \"this plugin requires location permissions for scanning\", null);\n        pendingResult = null;\n      }\n      return true;\n    }\n    return false;\n  }\n\n  private void state(Result result) {\n    try {\n      switch (mBluetoothAdapter.getState()) {\n        case BluetoothAdapter.STATE_OFF:\n          result.success(BluetoothAdapter.STATE_OFF);\n          break;\n        case BluetoothAdapter.STATE_ON:\n          result.success(BluetoothAdapter.STATE_ON);\n          break;\n        case BluetoothAdapter.STATE_TURNING_OFF:\n          result.success(BluetoothAdapter.STATE_TURNING_OFF);\n          break;\n        case BluetoothAdapter.STATE_TURNING_ON:\n          result.success(BluetoothAdapter.STATE_TURNING_ON);\n          break;\n        default:\n          result.success(0);\n          break;\n      }\n    } catch (SecurityException e) {\n      result.error(\"invalid_argument\", \"Argument 'address' not found\", null);\n    }\n  }\n\n  /**\n   * @param result result\n   */\n  private void getBondedDevices(Result result) {\n\n    List<Map<String, Object>> list = new ArrayList<>();\n\n    for (BluetoothDevice device : mBluetoothAdapter.getBondedDevices()) {\n      Map<String, Object> ret = new HashMap<>();\n      ret.put(\"address\", device.getAddress());\n      ret.put(\"name\", device.getName());\n      ret.put(\"type\", device.getType());\n      list.add(ret);\n    }\n\n    result.success(list);\n  }\n\n\n  /**\n   * @param result  result\n   * @param address address\n   */\n  private void isDeviceConnected(Result result, String address) {\n\n    AsyncTask.execute(() -> {\n      try {\n        BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);\n\n        if (device == null) {\n          result.error(\"connect_error\", \"device not found\", null);\n          return;\n        }\n\n        if (THREAD != null && device.ACTION_ACL_CONNECTED.equals(new Intent(BluetoothDevice.ACTION_ACL_CONNECTED).getAction())) {\n          result.success(true);\n        }else{\n          result.success(false);\n        }\n\n      } catch (Exception ex) {\n        Log.e(TAG, ex.getMessage(), ex);\n        result.error(\"connect_error\", ex.getMessage(), exceptionToString(ex));\n      }\n    });\n  }\n\n  private String exceptionToString(Exception ex) {\n    StringWriter sw = new StringWriter();\n    PrintWriter pw = new PrintWriter(sw);\n    ex.printStackTrace(pw);\n    return sw.toString();\n  }\n\n  /**\n   * @param result  result\n   * @param address address\n   */\n  private void connect(Result result, String address) {\n\n    if (THREAD != null) {\n      result.error(\"connect_error\", \"already connected\", null);\n      return;\n    }\n    AsyncTask.execute(() -> {\n      try {\n        BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);\n\n        if (device == null) {\n          result.error(\"connect_error\", \"device not found\", null);\n          return;\n        }\n\n        BluetoothSocket socket = device.createRfcommSocketToServiceRecord(MY_UUID);\n\n        if (socket == null) {\n          result.error(\"connect_error\", \"socket connection not established\", null);\n          return;\n        }\n\n        // Cancel bt discovery, even though we didn't start it\n        mBluetoothAdapter.cancelDiscovery();\n\n        try {\n          socket.connect();\n          THREAD = new ConnectedThread(socket);\n          THREAD.start();\n          result.success(true);\n        } catch (Exception ex) {\n          Log.e(TAG, ex.getMessage(), ex);\n          result.error(\"connect_error\", ex.getMessage(), exceptionToString(ex));\n        }\n      } catch (Exception ex) {\n        Log.e(TAG, ex.getMessage(), ex);\n        result.error(\"connect_error\", ex.getMessage(), exceptionToString(ex));\n      }\n    });\n  }\n\n  /**\n   * @param result result\n   */\n  private void disconnect(Result result) {\n\n    if (THREAD == null) {\n      result.error(\"disconnection_error\", \"not connected\", null);\n      return;\n    }\n    AsyncTask.execute(() -> {\n      try {\n        THREAD.cancel();\n        THREAD = null;\n        result.success(true);\n      } catch (Exception ex) {\n        Log.e(TAG, ex.getMessage(), ex);\n        result.error(\"disconnection_error\", ex.getMessage(), exceptionToString(ex));\n      }\n    });\n  }\n\n  /**\n   * @param result  result\n   * @param message message\n   */\n  private void write(Result result, String message) {\n    if (THREAD == null) {\n      result.error(\"write_error\", \"not connected\", null);\n      return;\n    }\n\n    try {\n      THREAD.write(message.getBytes());\n      result.success(true);\n    } catch (Exception ex) {\n      Log.e(TAG, ex.getMessage(), ex);\n      result.error(\"write_error\", ex.getMessage(), exceptionToString(ex));\n    }\n  }\n\n  private void writeBytes(Result result, byte[] message) {\n    if (THREAD == null) {\n      result.error(\"write_error\", \"not connected\", null);\n      return;\n    }\n\n    try {\n      THREAD.write(message);\n      result.success(true);\n    } catch (Exception ex) {\n      Log.e(TAG, ex.getMessage(), ex);\n      result.error(\"write_error\", ex.getMessage(), exceptionToString(ex));\n    }\n  }\n\n  private void printCustom(Result result, String message, int size, int align, String charset) {\n    // Print config \"mode\"\n    byte[] cc = new byte[] { 0x1B, 0x21, 0x03 }; // 0- normal size text\n    // byte[] cc1 = new byte[]{0x1B,0x21,0x00}; // 0- normal size text\n    byte[] bb = new byte[] { 0x1B, 0x21, 0x08 }; // 1- only bold text\n    byte[] bb2 = new byte[] { 0x1B, 0x21, 0x20 }; // 2- bold with medium text\n    byte[] bb3 = new byte[] { 0x1B, 0x21, 0x10 }; // 3- bold with large text\n    byte[] bb4 = new byte[] { 0x1B, 0x21, 0x30 }; // 4- strong text\n    byte[] bb5 = new byte[] { 0x1B, 0x21, 0x50 }; // 5- extra strong text\n    if (THREAD == null) {\n      result.error(\"write_error\", \"not connected\", null);\n      return;\n    }\n\n    try {\n      switch (size) {\n        case 0:\n          THREAD.write(cc);\n          break;\n        case 1:\n          THREAD.write(bb);\n          break;\n        case 2:\n          THREAD.write(bb2);\n          break;\n        case 3:\n          THREAD.write(bb3);\n          break;\n        case 4:\n          THREAD.write(bb4);\n          break;\n        case 5:\n          THREAD.write(bb5);\n      }\n\n      switch (align) {\n        case 0:\n          // left align\n          THREAD.write(PrinterCommands.ESC_ALIGN_LEFT);\n          break;\n        case 1:\n          // center align\n          THREAD.write(PrinterCommands.ESC_ALIGN_CENTER);\n          break;\n        case 2:\n          // right align\n          THREAD.write(PrinterCommands.ESC_ALIGN_RIGHT);\n          break;\n      }\n      if(charset != null) {\n        THREAD.write(message.getBytes(charset));\n      } else {\n        THREAD.write(message.getBytes());\n      }\n      THREAD.write(PrinterCommands.FEED_LINE);\n      result.success(true);\n    } catch (Exception ex) {\n      Log.e(TAG, ex.getMessage(), ex);\n      result.error(\"write_error\", ex.getMessage(), exceptionToString(ex));\n    }\n  }\n\n  private void printLeftRight(Result result, String msg1, String msg2, int size ,String charset,String format) {\n    byte[] cc = new byte[] { 0x1B, 0x21, 0x03 }; // 0- normal size text\n    // byte[] cc1 = new byte[]{0x1B,0x21,0x00}; // 0- normal size text\n    byte[] bb = new byte[] { 0x1B, 0x21, 0x08 }; // 1- only bold text\n    byte[] bb2 = new byte[] { 0x1B, 0x21, 0x20 }; // 2- bold with medium text\n    byte[] bb3 = new byte[] { 0x1B, 0x21, 0x10 }; // 3- bold with large text\n    byte[] bb4 = new byte[] { 0x1B, 0x21, 0x30 }; // 4- strong text\n    if (THREAD == null) {\n      result.error(\"write_error\", \"not connected\", null);\n      return;\n    }\n    try {\n      switch (size) {\n        case 0:\n          THREAD.write(cc);\n          break;\n        case 1:\n          THREAD.write(bb);\n          break;\n        case 2:\n          THREAD.write(bb2);\n          break;\n        case 3:\n          THREAD.write(bb3);\n          break;\n        case 4:\n          THREAD.write(bb4);\n          break;\n      }\n      THREAD.write(PrinterCommands.ESC_ALIGN_CENTER);\n      String line = String.format(\"%-15s %15s %n\", msg1, msg2);\n      if(format != null) {\n        line = String.format(format, msg1, msg2);\n      }\n      if(charset != null) {\n        THREAD.write(line.getBytes(charset));\n      } else {\n        THREAD.write(line.getBytes());\n      }\n      result.success(true);\n    } catch (Exception ex) {\n      Log.e(TAG, ex.getMessage(), ex);\n      result.error(\"write_error\", ex.getMessage(), exceptionToString(ex));\n    }\n\n  }\n\n  private void print3Column(Result result, String msg1, String msg2, String msg3, int size ,String charset, String format) {\n    byte[] cc = new byte[] { 0x1B, 0x21, 0x03 }; // 0- normal size text\n    // byte[] cc1 = new byte[]{0x1B,0x21,0x00}; // 0- normal size text\n    byte[] bb = new byte[] { 0x1B, 0x21, 0x08 }; // 1- only bold text\n    byte[] bb2 = new byte[] { 0x1B, 0x21, 0x20 }; // 2- bold with medium text\n    byte[] bb3 = new byte[] { 0x1B, 0x21, 0x10 }; // 3- bold with large text\n    byte[] bb4 = new byte[] { 0x1B, 0x21, 0x30 }; // 4- strong text\n    if (THREAD == null) {\n      result.error(\"write_error\", \"not connected\", null);\n      return;\n    }\n    try {\n      switch (size) {\n        case 0:\n          THREAD.write(cc);\n          break;\n        case 1:\n          THREAD.write(bb);\n          break;\n        case 2:\n          THREAD.write(bb2);\n          break;\n        case 3:\n          THREAD.write(bb3);\n          break;\n        case 4:\n          THREAD.write(bb4);\n          break;\n      }\n      THREAD.write(PrinterCommands.ESC_ALIGN_CENTER);\n      String line = String.format(\"%-10s %10s %10s %n\", msg1, msg2  , msg3);\n      if(format != null) {\n        line = String.format(format, msg1, msg2, msg3);\n      }\n      if(charset != null) {\n        THREAD.write(line.getBytes(charset));\n      } else {\n        THREAD.write(line.getBytes());\n      }\n      result.success(true);\n    } catch (Exception ex) {\n      Log.e(TAG, ex.getMessage(), ex);\n      result.error(\"write_error\", ex.getMessage(), exceptionToString(ex));\n    }\n\n  }\n\n  private void print4Column(Result result, String msg1, String msg2,String msg3,String msg4, int size, String charset, String format) {\n    byte[] cc = new byte[] { 0x1B, 0x21, 0x03 }; // 0- normal size text\n    // byte[] cc1 = new byte[]{0x1B,0x21,0x00}; // 0- normal size text\n    byte[] bb = new byte[] { 0x1B, 0x21, 0x08 }; // 1- only bold text\n    byte[] bb2 = new byte[] { 0x1B, 0x21, 0x20 }; // 2- bold with medium text\n    byte[] bb3 = new byte[] { 0x1B, 0x21, 0x10 }; // 3- bold with large text\n    byte[] bb4 = new byte[] { 0x1B, 0x21, 0x30 }; // 4- strong text\n    if (THREAD == null) {\n      result.error(\"write_error\", \"not connected\", null);\n      return;\n    }\n    try {\n      switch (size) {\n        case 0:\n          THREAD.write(cc);\n          break;\n        case 1:\n          THREAD.write(bb);\n          break;\n        case 2:\n          THREAD.write(bb2);\n          break;\n        case 3:\n          THREAD.write(bb3);\n          break;\n        case 4:\n          THREAD.write(bb4);\n          break;\n      }\n      THREAD.write(PrinterCommands.ESC_ALIGN_CENTER);\n      String line = String.format(\"%-8s %7s %7s %7s %n\", msg1, msg2,msg3,msg4);\n      if(format != null) {\n        line = String.format(format, msg1, msg2,msg3,msg4);\n      }\n      if(charset != null) {\n        THREAD.write(line.getBytes(charset));\n      } else {\n        THREAD.write(line.getBytes());\n      }\n      result.success(true);\n    } catch (Exception ex) {\n      Log.e(TAG, ex.getMessage(), ex);\n      result.error(\"write_error\", ex.getMessage(), exceptionToString(ex));\n    }\n\n  }\n\n  private void printNewLine(Result result) {\n    if (THREAD == null) {\n      result.error(\"write_error\", \"not connected\", null);\n      return;\n    }\n    try {\n      THREAD.write(PrinterCommands.FEED_LINE);\n      result.success(true);\n    } catch (Exception ex) {\n      Log.e(TAG, ex.getMessage(), ex);\n      result.error(\"write_error\", ex.getMessage(), exceptionToString(ex));\n    }\n  }\n\n  private void paperCut(Result result) {\n    if (THREAD == null) {\n      result.error(\"write_error\", \"not connected\", null);\n      return;\n    }\n    try {\n      THREAD.write(PrinterCommands.FEED_PAPER_AND_CUT);\n      result.success(true);\n    } catch (Exception ex) {\n      Log.e(TAG, ex.getMessage(), ex);\n      result.error(\"write_error\", ex.getMessage(), exceptionToString(ex));\n    }\n  }\n\n  private void drawerPin2(Result result) {\n    if (THREAD == null) {\n      result.error(\"write_error\", \"not connected\", null);\n      return;\n    }\n    try {\n      THREAD.write(PrinterCommands.ESC_DRAWER_PIN2);\n      result.success(true);\n    } catch (Exception ex) {\n      Log.e(TAG, ex.getMessage(), ex);\n      result.error(\"write_error\", ex.getMessage(), exceptionToString(ex));\n    }\n  }\n\n  private void drawerPin5(Result result) {\n    if (THREAD == null) {\n      result.error(\"write_error\", \"not connected\", null);\n      return;\n    }\n    try {\n      THREAD.write(PrinterCommands.ESC_DRAWER_PIN5);\n      result.success(true);\n    } catch (Exception ex) {\n      Log.e(TAG, ex.getMessage(), ex);\n      result.error(\"write_error\", ex.getMessage(), exceptionToString(ex));\n    }\n  }\n\n  private void printImage(Result result, String pathImage) {\n    if (THREAD == null) {\n      result.error(\"write_error\", \"not connected\", null);\n      return;\n    }\n    try {\n      Bitmap bmp = BitmapFactory.decodeFile(pathImage);\n      if (bmp != null) {\n        byte[] command = Utils.decodeBitmap(bmp);\n        THREAD.write(PrinterCommands.ESC_ALIGN_CENTER);\n        THREAD.write(command);\n      } else {\n        Log.e(\"Print Photo error\", \"the file isn't exists\");\n      }\n      result.success(true);\n    } catch (Exception ex) {\n      Log.e(TAG, ex.getMessage(), ex);\n      result.error(\"write_error\", ex.getMessage(), exceptionToString(ex));\n    }\n  }\n\n  private void printImageBytes(Result result, byte[] bytes) {\n    if (THREAD == null) {\n      result.error(\"write_error\", \"not connected\", null);\n      return;\n    }\n    try {\n      Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);\n      if (bmp != null) {\n        byte[] command = Utils.decodeBitmap(bmp);\n        THREAD.write(PrinterCommands.ESC_ALIGN_CENTER);\n        THREAD.write(command);\n      } else {\n        Log.e(\"Print Photo error\", \"the file isn't exists\");\n      }\n      result.success(true);\n    } catch (Exception ex) {\n      Log.e(TAG, ex.getMessage(), ex);\n      result.error(\"write_error\", ex.getMessage(), exceptionToString(ex));\n    }\n  }\n\n  private void printQRcode(Result result, String textToQR, int width, int height, int align) {\n    MultiFormatWriter multiFormatWriter = new MultiFormatWriter();\n    if (THREAD == null) {\n      result.error(\"write_error\", \"not connected\", null);\n      return;\n    }\n    try {\n      switch (align) {\n        case 0:\n          // left align\n          THREAD.write(PrinterCommands.ESC_ALIGN_LEFT);\n          break;\n        case 1:\n          // center align\n          THREAD.write(PrinterCommands.ESC_ALIGN_CENTER);\n          break;\n        case 2:\n          // right align\n          THREAD.write(PrinterCommands.ESC_ALIGN_RIGHT);\n          break;\n      }\n      BitMatrix bitMatrix = multiFormatWriter.encode(textToQR, BarcodeFormat.QR_CODE, width, height);\n      BarcodeEncoder barcodeEncoder = new BarcodeEncoder();\n      Bitmap bmp = barcodeEncoder.createBitmap(bitMatrix);\n      if (bmp != null) {\n        byte[] command = Utils.decodeBitmap(bmp);\n        THREAD.write(command);\n      } else {\n        Log.e(\"Print Photo error\", \"the file isn't exists\");\n      }\n      result.success(true);\n    } catch (Exception ex) {\n      Log.e(TAG, ex.getMessage(), ex);\n      result.error(\"write_error\", ex.getMessage(), exceptionToString(ex));\n    }\n  }\n\n  private class ConnectedThread extends Thread {\n    private final BluetoothSocket mmSocket;\n    private final InputStream inputStream;\n    private final OutputStream outputStream;\n\n    ConnectedThread(BluetoothSocket socket) {\n      mmSocket = socket;\n      InputStream tmpIn = null;\n      OutputStream tmpOut = null;\n\n      try {\n        tmpIn = socket.getInputStream();\n        tmpOut = socket.getOutputStream();\n      } catch (IOException e) {\n        e.printStackTrace();\n      }\n      inputStream = tmpIn;\n      outputStream = tmpOut;\n    }\n\n    public void run() {\n      byte[] buffer = new byte[1024];\n      int bytes;\n      while (true) {\n        try {\n          bytes = inputStream.read(buffer);\n          readSink.success(new String(buffer, 0, bytes));\n        } catch (NullPointerException e) {\n          break;\n        } catch (IOException e) {\n          break;\n        }\n      }\n    }\n\n    public void write(byte[] bytes) {\n      try {\n        outputStream.write(bytes);\n      } catch (IOException e) {\n        e.printStackTrace();\n      }\n    }\n\n    public void cancel() {\n      try {\n        outputStream.flush();\n        outputStream.close();\n\n        inputStream.close();\n\n        mmSocket.close();\n      } catch (IOException e) {\n        e.printStackTrace();\n      }\n    }\n  }\n\n  private final StreamHandler stateStreamHandler = new StreamHandler() {\n\n    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {\n      @Override\n      public void onReceive(Context context, Intent intent) {\n        final String action = intent.getAction();\n\n        Log.d(TAG, action);\n\n        if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {\n          THREAD = null;\n          statusSink.success(intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1));\n        } else if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {\n          statusSink.success(1);\n        } else if (BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED.equals(action)) {\n          THREAD = null;\n          statusSink.success(2);\n        } else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {\n          THREAD = null;\n          statusSink.success(0);\n        }\n      }\n    };\n\n    @Override\n    public void onListen(Object o, EventSink eventSink) {\n      statusSink = eventSink;\n      context.registerReceiver(mReceiver, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));\n\n      context.registerReceiver(mReceiver, new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED));\n\n      context.registerReceiver(mReceiver, new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED));\n\n      context.registerReceiver(mReceiver, new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED));\n\n    }\n\n    @Override\n    public void onCancel(Object o) {\n      statusSink = null;\n      context.unregisterReceiver(mReceiver);\n    }\n  };\n\n  private final StreamHandler readResultsHandler = new StreamHandler() {\n    @Override\n    public void onListen(Object o, EventSink eventSink) {\n      readSink = eventSink;\n    }\n\n    @Override\n    public void onCancel(Object o) {\n      readSink = null;\n    }\n  };\n}"
  },
  {
    "path": "android/src/main/java/id/kakzaki/blue_thermal_printer/PrinterCommands.java",
    "content": "package id.kakzaki.blue_thermal_printer;\n\n/**\n * Created by https://goo.gl/UAfmBd on 2/6/2017.\n */\n\npublic class PrinterCommands {\n    public static final byte HT = 0x9;\n    public static final byte LF = 0x0A;\n    public static final byte CR = 0x0D;\n    public static final byte ESC = 0x1B;\n    public static final byte DLE = 0x10;\n    public static final byte GS = 0x1D;\n    public static final byte FS = 0x1C;\n    public static final byte STX = 0x02;\n    public static final byte US = 0x1F;\n    public static final byte CAN = 0x18;\n    public static final byte CLR = 0x0C;\n    public static final byte EOT = 0x04;\n\n    public static final byte[] INIT = {27, 64};\n    public static byte[] FEED_LINE = {10};\n\n    public static byte[] SELECT_FONT_A = {20, 33, 0};\n\n    public static byte[] SET_BAR_CODE_HEIGHT = {29, 104, 100};\n    public static byte[] PRINT_BAR_CODE_1 = {29, 107, 2};\n    public static byte[] SEND_NULL_BYTE = {0x00};\n\n    public static byte[] SELECT_PRINT_SHEET = {0x1B, 0x63, 0x30, 0x02};\n    public static byte[] FEED_PAPER_AND_CUT = {0x1D, 0x56, 66, 0x00};\n\n    public static byte[] SELECT_CYRILLIC_CHARACTER_CODE_TABLE = {0x1B, 0x74, 0x11};\n\n    public static byte[] SELECT_BIT_IMAGE_MODE = {0x1B, 0x2A, 33, -128, 0};\n    public static byte[] SET_LINE_SPACING_24 = {0x1B, 0x33, 24};\n    public static byte[] SET_LINE_SPACING_30 = {0x1B, 0x33, 30};\n\n    public static byte[] TRANSMIT_DLE_PRINTER_STATUS = {0x10, 0x04, 0x01};\n    public static byte[] TRANSMIT_DLE_OFFLINE_PRINTER_STATUS = {0x10, 0x04, 0x02};\n    public static byte[] TRANSMIT_DLE_ERROR_STATUS = {0x10, 0x04, 0x03};\n    public static byte[] TRANSMIT_DLE_ROLL_PAPER_SENSOR_STATUS = {0x10, 0x04, 0x04};\n\n    public static final byte[] ESC_FONT_COLOR_DEFAULT = new byte[] { 0x1B, 'r',0x00 };\n    public static final byte[] FS_FONT_ALIGN = new byte[] { 0x1C, 0x21, 1, 0x1B,\n            0x21, 1 };\n    public static final byte[] ESC_ALIGN_LEFT = new byte[] { 0x1b, 'a', 0x00 };\n    public static final byte[] ESC_ALIGN_RIGHT = new byte[] { 0x1b, 'a', 0x02 };\n    public static final byte[] ESC_ALIGN_CENTER = new byte[] { 0x1b, 'a', 0x01 };\n    public static final byte[] ESC_CANCEL_BOLD = new byte[] { 0x1B, 0x45, 0 };\n\n\n    /*********************************************/\n    public static final byte[] ESC_HORIZONTAL_CENTERS = new byte[] { 0x1B, 0x44, 20, 28, 00};\n    public static final byte[] ESC_CANCLE_HORIZONTAL_CENTERS = new byte[] { 0x1B, 0x44, 00 };\n    /*********************************************/\n\n    /*********** Open Cash Drawer ****************/    \n    public static final byte[] ESC_DRAWER_PIN2 = new byte[] { 0x1B, 'p', 0x30 };\n    public static final byte[] ESC_DRAWER_PIN5 = new byte[] { 0x1B, 'p', 0x31 };\n    /*********************************************/\n\n    public static final byte[] ESC_ENTER = new byte[] { 0x1B, 0x4A, 0x40 };\n    public static final byte[] PRINTE_TEST = new byte[] { 0x1D, 0x28, 0x41 };\n\n}"
  },
  {
    "path": "android/src/main/java/id/kakzaki/blue_thermal_printer/Utils.java",
    "content": "package id.kakzaki.blue_thermal_printer;\n\nimport android.graphics.Bitmap;\nimport android.util.Log;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class Utils {\n    // UNICODE 0x23 = #\n    public static final byte[] UNICODE_TEXT = new byte[] {0x23, 0x23, 0x23,\n            0x23, 0x23, 0x23,0x23, 0x23, 0x23,0x23, 0x23, 0x23,0x23, 0x23, 0x23,\n            0x23, 0x23, 0x23,0x23, 0x23, 0x23,0x23, 0x23, 0x23,0x23, 0x23, 0x23,\n            0x23, 0x23, 0x23};\n\n    private static String hexStr = \"0123456789ABCDEF\";\n    private static String[] binaryArray = { \"0000\", \"0001\", \"0010\", \"0011\",\n            \"0100\", \"0101\", \"0110\", \"0111\", \"1000\", \"1001\", \"1010\", \"1011\",\n            \"1100\", \"1101\", \"1110\", \"1111\" };\n\n    public static byte[] decodeBitmap(Bitmap bmp){\n        int bmpWidth = bmp.getWidth();\n        int bmpHeight = bmp.getHeight();\n\n        List<String> list = new ArrayList<String>(); //binaryString list\n        StringBuffer sb;\n\n\n        int bitLen = bmpWidth / 8;\n        int zeroCount = bmpWidth % 8;\n\n        String zeroStr = \"\";\n        if (zeroCount > 0) {\n            bitLen = bmpWidth / 8 + 1;\n            for (int i = 0; i < (8 - zeroCount); i++) {\n                zeroStr = zeroStr + \"0\";\n            }\n        }\n\n        for (int i = 0; i < bmpHeight; i++) {\n            sb = new StringBuffer();\n            for (int j = 0; j < bmpWidth; j++) {\n                int color = bmp.getPixel(j, i);\n\n                int r = (color >> 16) & 0xff;\n                int g = (color >> 8) & 0xff;\n                int b = color & 0xff;\n\n                // if color close to white，bit='0', else bit='1'\n                if (r > 160 && g > 160 && b > 160)\n                    sb.append(\"0\");\n                else\n                    sb.append(\"1\");\n            }\n            if (zeroCount > 0) {\n                sb.append(zeroStr);\n            }\n            list.add(sb.toString());\n        }\n\n        List<String> bmpHexList = binaryListToHexStringList(list);\n        String commandHexString = \"1D763000\";\n        String widthHexString = Integer\n                .toHexString(bmpWidth % 8 == 0 ? bmpWidth / 8\n                        : (bmpWidth / 8 + 1));\n        if (widthHexString.length() > 10) {\n            Log.e(\"decodeBitmap error\", \" width is too large\");\n            return null;\n        } else if (widthHexString.length() == 1) {\n            widthHexString = \"0\" + widthHexString;\n        }\n        widthHexString = widthHexString + \"00\";\n\n        String heightHexString = Integer.toHexString(bmpHeight);\n        if (heightHexString.length() > 10) {\n            Log.e(\"decodeBitmap error\", \" height is too large\");\n            return null;\n        } else if (heightHexString.length() == 1) {\n            heightHexString = \"0\" + heightHexString;\n        }\n        heightHexString = heightHexString + \"00\";\n\n        List<String> commandList = new ArrayList<String>();\n        commandList.add(commandHexString+widthHexString+heightHexString);\n        commandList.addAll(bmpHexList);\n\n        return hexList2Byte(commandList);\n    }\n\n    public static List<String> binaryListToHexStringList(List<String> list) {\n        List<String> hexList = new ArrayList<String>();\n        for (String binaryStr : list) {\n            StringBuffer sb = new StringBuffer();\n            for (int i = 0; i < binaryStr.length(); i += 8) {\n                String str = binaryStr.substring(i, i + 8);\n\n                String hexString = myBinaryStrToHexString(str);\n                sb.append(hexString);\n            }\n            hexList.add(sb.toString());\n        }\n        return hexList;\n\n    }\n\n    public static String myBinaryStrToHexString(String binaryStr) {\n        String hex = \"\";\n        String f4 = binaryStr.substring(0, 4);\n        String b4 = binaryStr.substring(4, 8);\n        for (int i = 0; i < binaryArray.length; i++) {\n            if (f4.equals(binaryArray[i]))\n                hex += hexStr.substring(i, i + 1);\n        }\n        for (int i = 0; i < binaryArray.length; i++) {\n            if (b4.equals(binaryArray[i]))\n                hex += hexStr.substring(i, i + 1);\n        }\n\n        return hex;\n    }\n\n    public static byte[] hexList2Byte(List<String> list) {\n        List<byte[]> commandList = new ArrayList<byte[]>();\n\n        for (String hexStr : list) {\n            commandList.add(hexStringToBytes(hexStr));\n        }\n        byte[] bytes = sysCopy(commandList);\n        return bytes;\n    }\n\n    public static byte[] hexStringToBytes(String hexString) {\n        if (hexString == null || hexString.equals(\"\")) {\n            return null;\n        }\n        hexString = hexString.toUpperCase();\n        int length = hexString.length() / 2;\n        char[] hexChars = hexString.toCharArray();\n        byte[] d = new byte[length];\n        for (int i = 0; i < length; i++) {\n            int pos = i * 2;\n            d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));\n        }\n        return d;\n    }\n\n    public static byte[] sysCopy(List<byte[]> srcArrays) {\n        int len = 0;\n        for (byte[] srcArray : srcArrays) {\n            len += srcArray.length;\n        }\n        byte[] destArray = new byte[len];\n        int destLen = 0;\n        for (byte[] srcArray : srcArrays) {\n            System.arraycopy(srcArray, 0, destArray, destLen, srcArray.length);\n            destLen += srcArray.length;\n        }\n        return destArray;\n    }\n\n    private static byte charToByte(char c) {\n        return (byte) \"0123456789ABCDEF\".indexOf(c);\n    }\n}\n"
  },
  {
    "path": "blue_thermal_printer.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module external.linked.project.id=\"blue_thermal_printer\" external.linked.project.path=\"$MODULE_DIR$\" external.root.project.path=\"$MODULE_DIR$\" external.system.id=\"GRADLE\" type=\"JAVA_MODULE\" version=\"4\">\n  <component name=\"FacetManager\">\n    <facet type=\"java-gradle\" name=\"Java-Gradle\">\n      <configuration>\n        <option name=\"BUILD_FOLDER_PATH\" value=\"$MODULE_DIR$/build\" />\n        <option name=\"BUILDABLE\" value=\"false\" />\n      </configuration>\n    </facet>\n  </component>\n  <component name=\"NewModuleRootManager\" LANGUAGE_LEVEL=\"JDK_1_6\" inherit-compiler-output=\"true\">\n    <exclude-output />\n    <content url=\"file://$MODULE_DIR$\">\n      <excludeFolder url=\"file://$MODULE_DIR$/.dart_tool\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/.gradle\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/.pub\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/example/.dart_tool\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/example/.pub\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/example/build\" />\n    </content>\n    <orderEntry type=\"jdk\" jdkName=\"1.8\" jdkType=\"JavaSDK\" />\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n    <orderEntry type=\"library\" name=\"Dart SDK\" level=\"project\" />\n    <orderEntry type=\"library\" name=\"Flutter Plugins\" level=\"project\" />\n  </component>\n</module>"
  },
  {
    "path": "example/.flutter-plugins-dependencies",
    "content": "{\"info\":\"This is a generated file; do not edit or check into version control.\",\"plugins\":{\"ios\":[{\"name\":\"blue_thermal_printer\",\"path\":\"E:\\\\\\\\MYPLUGIN\\\\\\\\blue_thermal_printer\\\\\\\\\",\"native_build\":true,\"dependencies\":[]},{\"name\":\"path_provider_ios\",\"path\":\"E:\\\\\\\\flutter\\\\\\\\.pub-cache\\\\\\\\hosted\\\\\\\\pub.dartlang.org\\\\\\\\path_provider_ios-2.0.10\\\\\\\\\",\"native_build\":true,\"dependencies\":[]}],\"android\":[{\"name\":\"blue_thermal_printer\",\"path\":\"E:\\\\\\\\MYPLUGIN\\\\\\\\blue_thermal_printer\\\\\\\\\",\"native_build\":true,\"dependencies\":[]},{\"name\":\"path_provider_android\",\"path\":\"E:\\\\\\\\flutter\\\\\\\\.pub-cache\\\\\\\\hosted\\\\\\\\pub.dartlang.org\\\\\\\\path_provider_android-2.0.16\\\\\\\\\",\"native_build\":true,\"dependencies\":[]}],\"macos\":[{\"name\":\"blue_thermal_printer\",\"path\":\"E:\\\\\\\\MYPLUGIN\\\\\\\\blue_thermal_printer\\\\\\\\\",\"native_build\":true,\"dependencies\":[]},{\"name\":\"path_provider_macos\",\"path\":\"E:\\\\\\\\flutter\\\\\\\\.pub-cache\\\\\\\\hosted\\\\\\\\pub.dartlang.org\\\\\\\\path_provider_macos-2.0.6\\\\\\\\\",\"native_build\":true,\"dependencies\":[]}],\"linux\":[{\"name\":\"path_provider_linux\",\"path\":\"E:\\\\\\\\flutter\\\\\\\\.pub-cache\\\\\\\\hosted\\\\\\\\pub.dartlang.org\\\\\\\\path_provider_linux-2.1.7\\\\\\\\\",\"native_build\":false,\"dependencies\":[]}],\"windows\":[{\"name\":\"path_provider_windows\",\"path\":\"E:\\\\\\\\flutter\\\\\\\\.pub-cache\\\\\\\\hosted\\\\\\\\pub.dartlang.org\\\\\\\\path_provider_windows-2.1.0\\\\\\\\\",\"native_build\":false,\"dependencies\":[]}],\"web\":[]},\"dependencyGraph\":[{\"name\":\"blue_thermal_printer\",\"dependencies\":[]},{\"name\":\"path_provider\",\"dependencies\":[\"path_provider_android\",\"path_provider_ios\",\"path_provider_linux\",\"path_provider_macos\",\"path_provider_windows\"]},{\"name\":\"path_provider_android\",\"dependencies\":[]},{\"name\":\"path_provider_ios\",\"dependencies\":[]},{\"name\":\"path_provider_linux\",\"dependencies\":[]},{\"name\":\"path_provider_macos\",\"dependencies\":[]},{\"name\":\"path_provider_windows\",\"dependencies\":[]}],\"date_created\":\"2022-07-19 16:38:12.856554\",\"version\":\"3.0.5\"}"
  },
  {
    "path": "example/.gitignore",
    "content": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# Visual Studio Code related\n.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n.dart_tool/\n.flutter-plugins\n.packages\n.pub-cache/\n.pub/\n/build/\n\n# Android related\n**/android/**/gradle-wrapper.jar\n**/android/.gradle\n**/android/captures/\n**/android/gradlew\n**/android/gradlew.bat\n**/android/local.properties\n**/android/**/GeneratedPluginRegistrant.java\n\n# iOS/XCode related\n**/ios/**/*.mode1v3\n**/ios/**/*.mode2v3\n**/ios/**/*.moved-aside\n**/ios/**/*.pbxuser\n**/ios/**/*.perspectivev3\n**/ios/**/*sync/\n**/ios/**/.sconsign.dblite\n**/ios/**/.tags*\n**/ios/**/.vagrant/\n**/ios/**/DerivedData/\n**/ios/**/Icon?\n**/ios/**/Pods/\n**/ios/**/.symlinks/\n**/ios/**/profile\n**/ios/**/xcuserdata\n**/ios/.generated/\n**/ios/Flutter/App.framework\n**/ios/Flutter/Flutter.framework\n**/ios/Flutter/Generated.xcconfig\n**/ios/Flutter/app.flx\n**/ios/Flutter/app.zip\n**/ios/Flutter/flutter_assets/\n**/ios/ServiceDefinitions.json\n**/ios/Runner/GeneratedPluginRegistrant.*\n\n# Exceptions to above rules.\n!**/ios/**/default.mode1v3\n!**/ios/**/default.mode2v3\n!**/ios/**/default.pbxuser\n!**/ios/**/default.perspectivev3\n!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages\n"
  },
  {
    "path": "example/.metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled and should not be manually edited.\n\nversion:\n  revision: 7a4c33425ddd78c54aba07d86f3f9a4a0051769b\n  channel: stable\n\nproject_type: app\n"
  },
  {
    "path": "example/README.md",
    "content": "# blue_thermal_printer_example\n\nDemonstrates how to use the blue_thermal_printer plugin.\n"
  },
  {
    "path": "example/android/app/build.gradle",
    "content": "def localProperties = new Properties()\ndef localPropertiesFile = rootProject.file('local.properties')\nif (localPropertiesFile.exists()) {\n    localPropertiesFile.withReader('UTF-8') { reader ->\n        localProperties.load(reader)\n    }\n}\n\ndef flutterRoot = localProperties.getProperty('flutter.sdk')\nif (flutterRoot == null) {\n    throw new GradleException(\"Flutter SDK not found. Define location with flutter.sdk in the local.properties file.\")\n}\n\ndef flutterVersionCode = localProperties.getProperty('flutter.versionCode')\nif (flutterVersionCode == null) {\n    flutterVersionCode = '1'\n}\n\ndef flutterVersionName = localProperties.getProperty('flutter.versionName')\nif (flutterVersionName == null) {\n    flutterVersionName = '1.0'\n}\n\napply plugin: 'com.android.application'\napply from: \"$flutterRoot/packages/flutter_tools/gradle/flutter.gradle\"\n\nandroid {\n    compileSdkVersion 31\n\n    lintOptions {\n        disable 'InvalidPackage'\n    }\n\n    defaultConfig {\n        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).\n        applicationId \"id.kakzaki.blue_thermal_printer_example\"\n        minSdkVersion 18\n        targetSdkVersion 31\n        multiDexEnabled true\n        versionCode flutterVersionCode.toInteger()\n        versionName flutterVersionName\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n\n    buildTypes {\n        release {\n            // TODO: Add your own signing config for the release build.\n            // Signing with the debug keys for now, so `flutter run --release` works.\n            signingConfig signingConfigs.debug\n        }\n    }\n//    buildToolsVersion '29.0.2'\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nflutter {\n    source '../..'\n}\n\ndependencies {\n    testImplementation 'junit:junit:4.13.2'\n    androidTestImplementation 'androidx.test:runner:1.5.0-alpha04'\n    implementation 'com.android.support:multidex:1.0.3'\n    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0-alpha07'\n}\n"
  },
  {
    "path": "example/android/app/src/debug/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"id.kakzaki.blue_thermal_printer_example\">\n    <!-- Flutter needs it to communicate with the running application\n         to allow setting breakpoints, to provide hot reload, etc.\n    -->\n    <uses-permission android:name=\"android.permission.INTERNET\"/>\n</manifest>\n"
  },
  {
    "path": "example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"id.kakzaki.blue_thermal_printer_example\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\"/>\n\n    <!-- io.flutter.app.FlutterApplication is an android.app.Application that\n         calls FlutterMain.startInitialization(this); in its onCreate method.\n         In most cases you can leave this as-is, but you if you want to provide\n         additional functionality it is fine to subclass or reimplement\n         FlutterApplication and put your custom class here. -->\n    <application\n        android:label=\"blue_thermal_printer_example\"\n        android:icon=\"@mipmap/ic_launcher\">\n        <activity\n            android:name=\".MainActivity\"\n            android:launchMode=\"singleTop\"\n            android:theme=\"@style/LaunchTheme\"\n            android:configChanges=\"orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode\"\n            android:hardwareAccelerated=\"true\"\n            android:windowSoftInputMode=\"adjustResize\"\n            android:exported=\"true\">\n            <!-- This keeps the window background of the activity showing\n                 until Flutter renders its first frame. It can be removed if\n                 there is no splash screen (such as the default splash screen\n                 defined in @style/LaunchTheme). -->\n            <meta-data\n                android:name=\"io.flutter.app.android.SplashScreenUntilFirstFrame\"\n                android:value=\"true\" />\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\"/>\n                <category android:name=\"android.intent.category.LAUNCHER\"/>\n            </intent-filter>\n        </activity>\n        <meta-data\n            android:name=\"flutterEmbedding\"\n            android:value=\"2\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "example/android/app/src/main/java/id/kakzaki/blue_thermal_printer_example/MainActivity.java",
    "content": "package id.kakzaki.blue_thermal_printer_example;\n\nimport io.flutter.embedding.android.FlutterActivity;\n\npublic class MainActivity extends FlutterActivity {\n}\n"
  },
  {
    "path": "example/android/app/src/main/res/drawable/launch_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@android:color/white\" />\n\n    <!-- You can insert your own image assets here -->\n    <!-- <item>\n        <bitmap\n            android:gravity=\"center\"\n            android:src=\"@mipmap/launch_image\" />\n    </item> -->\n</layer-list>\n"
  },
  {
    "path": "example/android/app/src/main/res/values/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <style name=\"LaunchTheme\" parent=\"@android:style/Theme.Black.NoTitleBar\">\n        <!-- Show a splash screen on the activity. Automatically removed when\n             Flutter draws its first frame -->\n        <item name=\"android:windowBackground\">@drawable/launch_background</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "example/android/app/src/profile/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"id.kakzaki.blue_thermal_printer_example\">\n    <!-- Flutter needs it to communicate with the running application\n         to allow setting breakpoints, to provide hot reload, etc.\n    -->\n    <uses-permission android:name=\"android.permission.INTERNET\"/>\n</manifest>\n"
  },
  {
    "path": "example/android/build.gradle",
    "content": "buildscript {\n    repositories {\n        google()\n        mavenCentral()\n    }\n\n    dependencies {\n        classpath 'com.android.tools.build:gradle:7.2.0'\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        mavenCentral()\n    }\n}\n\nrootProject.buildDir = '../build'\nsubprojects {\n    project.buildDir = \"${rootProject.buildDir}/${project.name}\"\n}\nsubprojects {\n    project.evaluationDependsOn(':app')\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "#Fri Aug 30 12:26:22 BRT 2019\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.3.3-all.zip\n"
  },
  {
    "path": "example/android/gradle.properties",
    "content": "android.enableJetifier=true\nandroid.useAndroidX=true\norg.gradle.jvmargs=-Xmx1536M\n"
  },
  {
    "path": "example/android/settings.gradle",
    "content": "include ':app'\n\ndef flutterProjectRoot = rootProject.projectDir.parentFile.toPath()\n\ndef plugins = new Properties()\ndef pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')\nif (pluginsFile.exists()) {\n    pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }\n}\n\nplugins.each { name, path ->\n    def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()\n    include \":$name\"\n    project(\":$name\").projectDir = pluginDirectory\n}\n"
  },
  {
    "path": "example/ios/Flutter/AppFrameworkInfo.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>App</string>\n  <key>CFBundleIdentifier</key>\n  <string>io.flutter.flutter.app</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>App</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>1.0</string>\n  <key>MinimumOSVersion</key>\n  <string>8.0</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "example/ios/Flutter/Debug.xcconfig",
    "content": "#include \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "example/ios/Flutter/Release.xcconfig",
    "content": "#include \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "example/ios/Flutter/flutter_export_environment.sh",
    "content": "#!/bin/sh\n# This is a generated file; do not edit or check into version control.\nexport \"FLUTTER_ROOT=E:\\flutter\"\nexport \"FLUTTER_APPLICATION_PATH=E:\\MYPLUGIN\\blue_thermal_printer\\example\"\nexport \"COCOAPODS_PARALLEL_CODE_SIGN=true\"\nexport \"FLUTTER_TARGET=lib\\main.dart\"\nexport \"FLUTTER_BUILD_DIR=build\"\nexport \"FLUTTER_BUILD_NAME=1.0.0\"\nexport \"FLUTTER_BUILD_NUMBER=1\"\nexport \"DART_OBFUSCATION=false\"\nexport \"TRACK_WIDGET_CREATION=false\"\nexport \"TREE_SHAKE_ICONS=false\"\nexport \"PACKAGE_CONFIG=.dart_tool/package_config.json\"\n"
  },
  {
    "path": "example/ios/Podfile",
    "content": "# Uncomment this line to define a global platform for your project\n# platform :ios, '9.0'\n\n# CocoaPods analytics sends network stats synchronously affecting flutter build latency.\nENV['COCOAPODS_DISABLE_STATS'] = 'true'\n\nproject 'Runner', {\n  'Debug' => :debug,\n  'Profile' => :release,\n  'Release' => :release,\n}\n\ndef parse_KV_file(file, separator='=')\n  file_abs_path = File.expand_path(file)\n  if !File.exists? file_abs_path\n    return [];\n  end\n  generated_key_values = {}\n  skip_line_start_symbols = [\"#\", \"/\"]\n  File.foreach(file_abs_path) do |line|\n    next if skip_line_start_symbols.any? { |symbol| line =~ /^\\s*#{symbol}/ }\n    plugin = line.split(pattern=separator)\n    if plugin.length == 2\n      podname = plugin[0].strip()\n      path = plugin[1].strip()\n      podpath = File.expand_path(\"#{path}\", file_abs_path)\n      generated_key_values[podname] = podpath\n    else\n      puts \"Invalid plugin specification: #{line}\"\n    end\n  end\n  generated_key_values\nend\n\ntarget 'Runner' do\n  use_frameworks!\n  use_modular_headers!\n\n  # Flutter Pod\n\n  copied_flutter_dir = File.join(__dir__, 'Flutter')\n  copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework')\n  copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec')\n  unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path)\n    # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet.\n    # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration.\n    # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist.\n\n    generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig')\n    unless File.exist?(generated_xcode_build_settings_path)\n      raise \"Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first\"\n    end\n    generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path)\n    cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR'];\n\n    unless File.exist?(copied_framework_path)\n      FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir)\n    end\n    unless File.exist?(copied_podspec_path)\n      FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir)\n    end\n  end\n\n  # Keep pod path relative so it can be checked into Podfile.lock.\n  pod 'Flutter', :path => 'Flutter'\n\n  # Plugin Pods\n\n  # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock\n  # referring to absolute paths on developers' machines.\n  system('rm -rf .symlinks')\n  system('mkdir -p .symlinks/plugins')\n  plugin_pods = parse_KV_file('../.flutter-plugins')\n  plugin_pods.each do |name, path|\n    symlink = File.join('.symlinks', 'plugins', name)\n    File.symlink(path, symlink)\n    pod name, :path => File.join(symlink, 'ios')\n  end\nend\n\npost_install do |installer|\n  installer.pods_project.targets.each do |target|\n    target.build_configurations.each do |config|\n      config.build_settings['ENABLE_BITCODE'] = 'NO'\n    end\n  end\nend\n"
  },
  {
    "path": "example/ios/Runner/AppDelegate.swift",
    "content": "import UIKit\nimport Flutter\n\n@UIApplicationMain\n@objc class AppDelegate: FlutterAppDelegate {\n  override func application(\n    _ application: UIApplication,\n    didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?\n  ) -> Bool {\n    GeneratedPluginRegistrant.register(with: self)\n    return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n  }\n}\n"
  },
  {
    "path": "example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-83.5x83.5@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"1024x1024\",\n      \"idiom\" : \"ios-marketing\",\n      \"filename\" : \"Icon-App-1024x1024@1x.png\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
    "content": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in this directory.\n\nYou can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images."
  },
  {
    "path": "example/ios/Runner/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"12121\" systemVersion=\"16G29\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"12089\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Ydg-fD-yQy\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xbc-2k-c8Z\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <imageView opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" image=\"LaunchImage\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"YRO-k0-Ey4\">\n                            </imageView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"YRO-k0-Ey4\" firstAttribute=\"centerX\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerX\" id=\"1a2-6s-vTC\"/>\n                            <constraint firstItem=\"YRO-k0-Ey4\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerY\" id=\"4X2-HB-R7a\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"LaunchImage\" width=\"168\" height=\"185\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "example/ios/Runner/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"10117\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"10085\"/>\n    </dependencies>\n    <scenes>\n        <!--Flutter View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"FlutterViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "example/ios/Runner/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>blue_thermal_printer_example</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(FLUTTER_BUILD_NAME)</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(FLUTTER_BUILD_NUMBER)</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UIViewControllerBasedStatusBarAppearance</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "example/ios/Runner/Runner-Bridging-Header.h",
    "content": "#import \"GeneratedPluginRegistrant.h\""
  },
  {
    "path": "example/ios/Runner.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };\n\t\t3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };\n\t\t3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; };\n\t\t3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };\n\t\t9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; };\n\t\t9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; };\n\t\t97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };\n\t\t97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };\n\t\t97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t9705A1C41CF9048500538489 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\t3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */,\n\t\t\t\t9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = \"<group>\"; };\n\t\t1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = \"<group>\"; };\n\t\t3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = \"<group>\"; };\n\t\t3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = \"<group>\"; };\n\t\t74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"Runner-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\t74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = \"<group>\"; };\n\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = \"<group>\"; };\n\t\t9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = \"<group>\"; };\n\t\t97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t97C146EB1CF9000F007C117D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */,\n\t\t\t\t3B80C3941E831B6300D905FE /* App.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t9740EEB11CF90186004384FC /* Flutter */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3B80C3931E831B6300D905FE /* App.framework */,\n\t\t\t\t3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,\n\t\t\t\t9740EEBA1CF902C7004384FC /* Flutter.framework */,\n\t\t\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */,\n\t\t\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */,\n\t\t\t\t9740EEB31CF90195004384FC /* Generated.xcconfig */,\n\t\t\t);\n\t\t\tname = Flutter;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146E51CF9000F007C117D = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9740EEB11CF90186004384FC /* Flutter */,\n\t\t\t\t97C146F01CF9000F007C117D /* Runner */,\n\t\t\t\t97C146EF1CF9000F007C117D /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146EF1CF9000F007C117D /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146EE1CF9000F007C117D /* Runner.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146F01CF9000F007C117D /* Runner */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146FA1CF9000F007C117D /* Main.storyboard */,\n\t\t\t\t97C146FD1CF9000F007C117D /* Assets.xcassets */,\n\t\t\t\t97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,\n\t\t\t\t97C147021CF9000F007C117D /* Info.plist */,\n\t\t\t\t97C146F11CF9000F007C117D /* Supporting Files */,\n\t\t\t\t1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,\n\t\t\t\t1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,\n\t\t\t\t74858FAE1ED2DC5600515810 /* AppDelegate.swift */,\n\t\t\t\t74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,\n\t\t\t);\n\t\t\tpath = Runner;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146F11CF9000F007C117D /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t97C146ED1CF9000F007C117D /* Runner */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget \"Runner\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9740EEB61CF901F6004384FC /* Run Script */,\n\t\t\t\t97C146EA1CF9000F007C117D /* Sources */,\n\t\t\t\t97C146EB1CF9000F007C117D /* Frameworks */,\n\t\t\t\t97C146EC1CF9000F007C117D /* Resources */,\n\t\t\t\t9705A1C41CF9048500538489 /* Embed Frameworks */,\n\t\t\t\t3B06AD1E1E4923F5004D2608 /* Thin Binary */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Runner;\n\t\t\tproductName = Runner;\n\t\t\tproductReference = 97C146EE1CF9000F007C117D /* Runner.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t97C146E61CF9000F007C117D /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0910;\n\t\t\t\tORGANIZATIONNAME = \"The Chromium Authors\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t97C146ED1CF9000F007C117D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3.1;\n\t\t\t\t\t\tLastSwiftMigration = 0910;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject \"Runner\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 97C146E51CF9000F007C117D;\n\t\t\tproductRefGroup = 97C146EF1CF9000F007C117D /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t97C146ED1CF9000F007C117D /* Runner */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t97C146EC1CF9000F007C117D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,\n\t\t\t\t9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */,\n\t\t\t\t97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,\n\t\t\t\t97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Thin Binary\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"/bin/sh \\\"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\\\" thin\";\n\t\t};\n\t\t9740EEB61CF901F6004384FC /* Run Script */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Run Script\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"/bin/sh \\\"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\\\" build\";\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t97C146EA1CF9000F007C117D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,\n\t\t\t\t1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t97C146FA1CF9000F007C117D /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146FB1CF9000F007C117D /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t97C147001CF9000F007C117D /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t249021D3217E4FDB00AE95B9 /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\t249021D4217E4FDB00AE95B9 /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(FLUTTER_BUILD_NUMBER)\";\n\t\t\t\tDEVELOPMENT_TEAM = S8QB4VV633;\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = id.kakzaki.blueThermalPrinterExample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\t97C147031CF9000F007C117D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t97C147041CF9000F007C117D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t97C147061CF9000F007C117D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(FLUTTER_BUILD_NUMBER)\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = id.kakzaki.blueThermalPrinterExample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Runner/Runner-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = On;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t97C147071CF9000F007C117D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(FLUTTER_BUILD_NUMBER)\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = id.kakzaki.blueThermalPrinterExample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Runner/Runner-Bridging-Header.h\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = On;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t97C146E91CF9000F007C117D /* Build configuration list for PBXProject \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t97C147031CF9000F007C117D /* Debug */,\n\t\t\t\t97C147041CF9000F007C117D /* Release */,\n\t\t\t\t249021D3217E4FDB00AE95B9 /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t97C147061CF9000F007C117D /* Debug */,\n\t\t\t\t97C147071CF9000F007C117D /* Release */,\n\t\t\t\t249021D4217E4FDB00AE95B9 /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\n\t};\n\trootObject = 97C146E61CF9000F007C117D /* Project object */;\n}\n"
  },
  {
    "path": "example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0910\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n               BuildableName = \"Runner.app\"\n               BlueprintName = \"Runner\"\n               ReferencedContainer = \"container:Runner.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      language = \"\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      language = \"\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Profile\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "example/ios/Runner.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "example/lib/main.dart",
    "content": "import 'package:blue_thermal_printer_example/testprint.dart';\nimport 'package:flutter/material.dart';\nimport 'dart:async';\nimport 'package:blue_thermal_printer/blue_thermal_printer.dart';\nimport 'package:flutter/services.dart';\n\nvoid main() => runApp(new MyApp());\n\nclass MyApp extends StatefulWidget {\n  @override\n  _MyAppState createState() => new _MyAppState();\n}\n\nclass _MyAppState extends State<MyApp> {\n  BlueThermalPrinter bluetooth = BlueThermalPrinter.instance;\n\n  List<BluetoothDevice> _devices = [];\n  BluetoothDevice? _device;\n  bool _connected = false;\n  TestPrint testPrint = TestPrint();\n\n  @override\n  void initState() {\n    super.initState();\n    initPlatformState();\n  }\n\n  Future<void> initPlatformState() async {\n    // TODO here add a permission request using permission_handler\n    // if permission is not granted, kzaki's thermal print plugin will ask for location permission\n    // which will invariably crash the app even if user agrees so we'd better ask it upfront\n\n    // var statusLocation = Permission.location;\n    // if (await statusLocation.isGranted != true) {\n    //   await Permission.location.request();\n    // }\n    // if (await statusLocation.isGranted) {\n    // ...\n    // } else {\n    // showDialogSayingThatThisPermissionIsRequired());\n    // }\n    bool? isConnected = await bluetooth.isConnected;\n    List<BluetoothDevice> devices = [];\n    try {\n      devices = await bluetooth.getBondedDevices();\n    } on PlatformException {}\n\n    bluetooth.onStateChanged().listen((state) {\n      switch (state) {\n        case BlueThermalPrinter.CONNECTED:\n          setState(() {\n            _connected = true;\n            print(\"bluetooth device state: connected\");\n          });\n          break;\n        case BlueThermalPrinter.DISCONNECTED:\n          setState(() {\n            _connected = false;\n            print(\"bluetooth device state: disconnected\");\n          });\n          break;\n        case BlueThermalPrinter.DISCONNECT_REQUESTED:\n          setState(() {\n            _connected = false;\n            print(\"bluetooth device state: disconnect requested\");\n          });\n          break;\n        case BlueThermalPrinter.STATE_TURNING_OFF:\n          setState(() {\n            _connected = false;\n            print(\"bluetooth device state: bluetooth turning off\");\n          });\n          break;\n        case BlueThermalPrinter.STATE_OFF:\n          setState(() {\n            _connected = false;\n            print(\"bluetooth device state: bluetooth off\");\n          });\n          break;\n        case BlueThermalPrinter.STATE_ON:\n          setState(() {\n            _connected = false;\n            print(\"bluetooth device state: bluetooth on\");\n          });\n          break;\n        case BlueThermalPrinter.STATE_TURNING_ON:\n          setState(() {\n            _connected = false;\n            print(\"bluetooth device state: bluetooth turning on\");\n          });\n          break;\n        case BlueThermalPrinter.ERROR:\n          setState(() {\n            _connected = false;\n            print(\"bluetooth device state: error\");\n          });\n          break;\n        default:\n          print(state);\n          break;\n      }\n    });\n\n    if (!mounted) return;\n    setState(() {\n      _devices = devices;\n    });\n\n    if (isConnected == true) {\n      setState(() {\n        _connected = true;\n      });\n    }\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      home: Scaffold(\n        appBar: AppBar(\n          title: Text('Blue Thermal Printer'),\n        ),\n        body: Padding(\n          padding: const EdgeInsets.all(8.0),\n          child: ListView(\n            children: <Widget>[\n              Row(\n                crossAxisAlignment: CrossAxisAlignment.center,\n                mainAxisAlignment: MainAxisAlignment.start,\n                children: <Widget>[\n                  const SizedBox(width: 10),\n                  const Text(\n                    'Device:',\n                    style: TextStyle(\n                      fontWeight: FontWeight.bold,\n                    ),\n                  ),\n                  const SizedBox(width: 30),\n                  Expanded(\n                    child: DropdownButton(\n                      items: _getDeviceItems(),\n                      onChanged: (BluetoothDevice? value) =>\n                          setState(() => _device = value),\n                      value: _device,\n                    ),\n                  ),\n                ],\n              ),\n              const SizedBox(height: 10),\n              Row(\n                crossAxisAlignment: CrossAxisAlignment.center,\n                mainAxisAlignment: MainAxisAlignment.end,\n                children: <Widget>[\n                  ElevatedButton(\n                    style: ElevatedButton.styleFrom(primary: Colors.brown),\n                    onPressed: () {\n                      initPlatformState();\n                    },\n                    child: const Text(\n                      'Refresh',\n                      style: TextStyle(color: Colors.white),\n                    ),\n                  ),\n                  const SizedBox(width: 20),\n                  ElevatedButton(\n                    style: ElevatedButton.styleFrom(\n                        primary: _connected ? Colors.red : Colors.green),\n                    onPressed: _connected ? _disconnect : _connect,\n                    child: Text(\n                      _connected ? 'Disconnect' : 'Connect',\n                      style: TextStyle(color: Colors.white),\n                    ),\n                  ),\n                ],\n              ),\n              Padding(\n                padding:\n                    const EdgeInsets.only(left: 10.0, right: 10.0, top: 50),\n                child: ElevatedButton(\n                  style: ElevatedButton.styleFrom(primary: Colors.brown),\n                  onPressed: () {\n                    testPrint.sample();\n                  },\n                  child: const Text('PRINT TEST',\n                      style: TextStyle(color: Colors.white)),\n                ),\n              ),\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n\n  List<DropdownMenuItem<BluetoothDevice>> _getDeviceItems() {\n    List<DropdownMenuItem<BluetoothDevice>> items = [];\n    if (_devices.isEmpty) {\n      items.add(DropdownMenuItem(\n        child: Text('NONE'),\n      ));\n    } else {\n      _devices.forEach((device) {\n        items.add(DropdownMenuItem(\n          child: Text(device.name ?? \"\"),\n          value: device,\n        ));\n      });\n    }\n    return items;\n  }\n\n  void _connect() {\n    if (_device != null) {\n      bluetooth.isConnected.then((isConnected) {\n        if (isConnected == false) {\n          bluetooth.connect(_device!).catchError((error) {\n            setState(() => _connected = false);\n          });\n          setState(() => _connected = true);\n        }\n      });\n    } else {\n      show('No device selected.');\n    }\n  }\n\n  void _disconnect() {\n    bluetooth.disconnect();\n    setState(() => _connected = false);\n  }\n\n  Future show(\n    String message, {\n    Duration duration: const Duration(seconds: 3),\n  }) async {\n    await new Future.delayed(new Duration(milliseconds: 100));\n    ScaffoldMessenger.of(context).showSnackBar(\n      SnackBar(\n        content: Text(\n          message,\n          style: const TextStyle(color: Colors.white),\n        ),\n        duration: duration,\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "example/lib/printerenum.dart",
    "content": "enum Size {\n  medium, //normal size text\n  bold, //only bold text\n  boldMedium, //bold with medium\n  boldLarge, //bold with large\n  extraLarge //extra large\n}\n\nenum Align {\n  left, //ESC_ALIGN_LEFT\n  center, //ESC_ALIGN_CENTER\n  right, //ESC_ALIGN_RIGHT\n}\n\nextension PrintSize on Size {\n  int get val {\n    switch (this) {\n      case Size.medium:\n        return 0;\n      case Size.bold:\n        return 1;\n      case Size.boldMedium:\n        return 2;\n      case Size.boldLarge:\n        return 3;\n      case Size.extraLarge:\n        return 4;\n      default:\n        return 0;\n    }\n  }\n}\n\nextension PrintAlign on Align {\n  int get val {\n    switch (this) {\n      case Align.left:\n        return 0;\n      case Align.center:\n        return 1;\n      case Align.right:\n        return 2;\n      default:\n        return 0;\n    }\n  }\n}\n"
  },
  {
    "path": "example/lib/testprint.dart",
    "content": "import 'dart:typed_data';\nimport 'package:blue_thermal_printer_example/printerenum.dart';\nimport 'package:flutter/services.dart';\nimport 'package:path_provider/path_provider.dart';\nimport 'package:blue_thermal_printer/blue_thermal_printer.dart';\nimport 'dart:io';\nimport 'package:http/http.dart' as http;\n\n///Test printing\nclass TestPrint {\n  BlueThermalPrinter bluetooth = BlueThermalPrinter.instance;\n\n  sample() async {\n    //image max 300px X 300px\n\n    ///image from File path\n    String filename = 'yourlogo.png';\n    ByteData bytesData = await rootBundle.load(\"assets/images/yourlogo.png\");\n    String dir = (await getApplicationDocumentsDirectory()).path;\n    File file = await File('$dir/$filename').writeAsBytes(bytesData.buffer\n        .asUint8List(bytesData.offsetInBytes, bytesData.lengthInBytes));\n\n    ///image from Asset\n    ByteData bytesAsset = await rootBundle.load(\"assets/images/yourlogo.png\");\n    Uint8List imageBytesFromAsset = bytesAsset.buffer\n        .asUint8List(bytesAsset.offsetInBytes, bytesAsset.lengthInBytes);\n\n    ///image from Network\n    var response = await http.get(Uri.parse(\n        \"https://raw.githubusercontent.com/kakzaki/blue_thermal_printer/master/example/assets/images/yourlogo.png\"));\n    Uint8List bytesNetwork = response.bodyBytes;\n    Uint8List imageBytesFromNetwork = bytesNetwork.buffer\n        .asUint8List(bytesNetwork.offsetInBytes, bytesNetwork.lengthInBytes);\n\n    bluetooth.isConnected.then((isConnected) {\n      if (isConnected == true) {\n        bluetooth.printNewLine();\n        bluetooth.printCustom(\"HEADER\", Size.boldMedium.val, Align.center.val);\n        bluetooth.printNewLine();\n        bluetooth.printImage(file.path); //path of your image/logo\n        bluetooth.printNewLine();\n        bluetooth.printImageBytes(imageBytesFromAsset); //image from Asset\n        bluetooth.printNewLine();\n        bluetooth.printImageBytes(imageBytesFromNetwork); //image from Network\n        bluetooth.printNewLine();\n        bluetooth.printLeftRight(\"LEFT\", \"RIGHT\", Size.medium.val);\n        bluetooth.printLeftRight(\"LEFT\", \"RIGHT\", Size.bold.val);\n        bluetooth.printLeftRight(\"LEFT\", \"RIGHT\", Size.bold.val,\n            format:\n                \"%-15s %15s %n\"); //15 is number off character from left or right\n        bluetooth.printNewLine();\n        bluetooth.printLeftRight(\"LEFT\", \"RIGHT\", Size.boldMedium.val);\n        bluetooth.printLeftRight(\"LEFT\", \"RIGHT\", Size.boldLarge.val);\n        bluetooth.printLeftRight(\"LEFT\", \"RIGHT\", Size.extraLarge.val);\n        bluetooth.printNewLine();\n        bluetooth.print3Column(\"Col1\", \"Col2\", \"Col3\", Size.bold.val);\n        bluetooth.print3Column(\"Col1\", \"Col2\", \"Col3\", Size.bold.val,\n            format:\n                \"%-10s %10s %10s %n\"); //10 is number off character from left center and right\n        bluetooth.printNewLine();\n        bluetooth.print4Column(\"Col1\", \"Col2\", \"Col3\", \"Col4\", Size.bold.val);\n        bluetooth.print4Column(\"Col1\", \"Col2\", \"Col3\", \"Col4\", Size.bold.val,\n            format: \"%-8s %7s %7s %7s %n\");\n        bluetooth.printNewLine();\n        bluetooth.printCustom(\"čĆžŽšŠ-H-ščđ\", Size.bold.val, Align.center.val,\n            charset: \"windows-1250\");\n        bluetooth.printLeftRight(\"Številka:\", \"18000001\", Size.bold.val,\n            charset: \"windows-1250\");\n        bluetooth.printCustom(\"Body left\", Size.bold.val, Align.left.val);\n        bluetooth.printCustom(\"Body right\", Size.medium.val, Align.right.val);\n        bluetooth.printNewLine();\n        bluetooth.printCustom(\"Thank You\", Size.bold.val, Align.center.val);\n        bluetooth.printNewLine();\n        bluetooth.printQRcode(\n            \"Insert Your Own Text to Generate\", 200, 200, Align.center.val);\n        bluetooth.printNewLine();\n        bluetooth.printNewLine();\n        bluetooth\n            .paperCut(); //some printer not supported (sometime making image not centered)\n        //bluetooth.drawerPin2(); // or you can use bluetooth.drawerPin5();\n      }\n    });\n  }\n\n//   sample(String pathImage) async {\n//     //SIZE\n//     // 0- normal size text\n//     // 1- only bold text\n//     // 2- bold with medium text\n//     // 3- bold with large text\n//     //ALIGN\n//     // 0- ESC_ALIGN_LEFT\n//     // 1- ESC_ALIGN_CENTER\n//     // 2- ESC_ALIGN_RIGHT\n//\n// //     var response = await http.get(\"IMAGE_URL\");\n// //     Uint8List bytes = response.bodyBytes;\n//     bluetooth.isConnected.then((isConnected) {\n//       if (isConnected == true) {\n//         bluetooth.printNewLine();\n//         bluetooth.printCustom(\"HEADER\", 3, 1);\n//         bluetooth.printNewLine();\n//         bluetooth.printImage(pathImage); //path of your image/logo\n//         bluetooth.printNewLine();\n// //      bluetooth.printImageBytes(bytes.buffer.asUint8List(bytes.offsetInBytes, bytes.lengthInBytes));\n//         bluetooth.printLeftRight(\"LEFT\", \"RIGHT\", 0);\n//         bluetooth.printLeftRight(\"LEFT\", \"RIGHT\", 1);\n//         bluetooth.printLeftRight(\"LEFT\", \"RIGHT\", 1, format: \"%-15s %15s %n\");\n//         bluetooth.printNewLine();\n//         bluetooth.printLeftRight(\"LEFT\", \"RIGHT\", 2);\n//         bluetooth.printLeftRight(\"LEFT\", \"RIGHT\", 3);\n//         bluetooth.printLeftRight(\"LEFT\", \"RIGHT\", 4);\n//         bluetooth.printNewLine();\n//         bluetooth.print3Column(\"Col1\", \"Col2\", \"Col3\", 1);\n//         bluetooth.print3Column(\"Col1\", \"Col2\", \"Col3\", 1,\n//             format: \"%-10s %10s %10s %n\");\n//         bluetooth.printNewLine();\n//         bluetooth.print4Column(\"Col1\", \"Col2\", \"Col3\", \"Col4\", 1);\n//         bluetooth.print4Column(\"Col1\", \"Col2\", \"Col3\", \"Col4\", 1,\n//             format: \"%-8s %7s %7s %7s %n\");\n//         bluetooth.printNewLine();\n//         String testString = \" čĆžŽšŠ-H-ščđ\";\n//         bluetooth.printCustom(testString, 1, 1, charset: \"windows-1250\");\n//         bluetooth.printLeftRight(\"Številka:\", \"18000001\", 1,\n//             charset: \"windows-1250\");\n//         bluetooth.printCustom(\"Body left\", 1, 0);\n//         bluetooth.printCustom(\"Body right\", 0, 2);\n//         bluetooth.printNewLine();\n//         bluetooth.printCustom(\"Thank You\", 2, 1);\n//         bluetooth.printNewLine();\n//         bluetooth.printQRcode(\"Insert Your Own Text to Generate\", 200, 200, 1);\n//         bluetooth.printNewLine();\n//         bluetooth.printNewLine();\n//         bluetooth.paperCut();\n//       }\n//     });\n//   }\n}\n"
  },
  {
    "path": "example/pubspec.yaml",
    "content": "name: blue_thermal_printer_example\ndescription: Demonstrates how to use the blue_thermal_printer plugin.\npublish_to: https://pub.dev/packages/blue_thermal_printer\n\nenvironment:\n  sdk: \">=2.12.0 <3.0.0\"\n\ndependencies:\n  flutter:\n    sdk: flutter\n\n  # The following adds the Cupertino Icons font to your application.\n  # Use with the CupertinoIcons class for iOS style icons.\n  path_provider: ^2.0.11\n  http: ^0.13.1\n\ndev_dependencies:\n  flutter_test:\n    sdk: flutter\n\n  blue_thermal_printer:\n    path: ../\n\n# For information on the generic Dart part of this file, see the\n# following page: https://www.dartlang.org/tools/pub/pubspec\n\n# The following section is specific to Flutter.\nflutter:\n\n  # The following line ensures that the Material Icons font is\n  # included with your application, so that you can use the icons in\n  # the material Icons class.\n  uses-material-design: true\n\n  # To add assets to your application, add an assets section, like this:\n  assets:\n    - assets/images/yourlogo.png\n  #  - images/a_dot_ham.jpeg\n\n  # An image asset can refer to one or more resolution-specific \"variants\", see\n  # https://flutter.dev/assets-and-images/#resolution-aware.\n\n  # For details regarding adding assets from package dependencies, see\n  # https://flutter.dev/assets-and-images/#from-packages\n\n  # To add custom fonts to your application, add a fonts section here,\n  # in this \"flutter\" section. Each entry in this list should have a\n  # \"family\" key with the font family name, and a \"fonts\" key with a\n  # list giving the asset and other descriptors for the font. For\n  # example:\n  # fonts:\n  #   - family: Schyler\n  #     fonts:\n  #       - asset: fonts/Schyler-Regular.ttf\n  #       - asset: fonts/Schyler-Italic.ttf\n  #         style: italic\n  #   - family: Trajan Pro\n  #     fonts:\n  #       - asset: fonts/TrajanPro.ttf\n  #       - asset: fonts/TrajanPro_Bold.ttf\n  #         weight: 700\n  #\n  # For details regarding fonts from package dependencies,\n  # see https://flutter.dev/custom-fonts/#from-packages\n"
  },
  {
    "path": "example/test/widget_test.dart",
    "content": "import 'package:blue_thermal_printer_example/main.dart';\nimport 'package:flutter_test/flutter_test.dart';\n\nvoid main() {\n  testWidgets('Verify Platform version', (WidgetTester tester) async {\n    // Build our app and trigger a frame.\n    await tester.pumpWidget(MyApp());\n  });\n}\n"
  },
  {
    "path": "gradle.properties",
    "content": "android.enableJetifier=true\nandroid.useAndroidX=true"
  },
  {
    "path": "ios/.gitignore",
    "content": ".idea/\n.vagrant/\n.sconsign.dblite\n.svn/\n\n.DS_Store\n*.swp\nprofile\n\nDerivedData/\nbuild/\nGeneratedPluginRegistrant.h\nGeneratedPluginRegistrant.m\n\n.generated/\n\n*.pbxuser\n*.mode1v3\n*.mode2v3\n*.perspectivev3\n\n!default.pbxuser\n!default.mode1v3\n!default.mode2v3\n!default.perspectivev3\n\nxcuserdata\n\n*.moved-aside\n\n*.pyc\n*sync/\nIcon?\n.tags*\n\n/Flutter/Generated.xcconfig\n"
  },
  {
    "path": "ios/Assets/.gitkeep",
    "content": ""
  },
  {
    "path": "ios/Classes/BlueThermalPrinterPlugin.h",
    "content": "#import <Flutter/Flutter.h>\n\n@interface BlueThermalPrinterPlugin : NSObject<FlutterPlugin>\n@end\n"
  },
  {
    "path": "ios/Classes/BlueThermalPrinterPlugin.m",
    "content": "#import \"BlueThermalPrinterPlugin.h\"\n#import <blue_thermal_printer/blue_thermal_printer-Swift.h>\n\n@implementation BlueThermalPrinterPlugin\n+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {\n  [SwiftBlueThermalPrinterPlugin registerWithRegistrar:registrar];\n}\n@end\n"
  },
  {
    "path": "ios/Classes/SwiftBlueThermalPrinterPlugin.swift",
    "content": "import Flutter\nimport UIKit\n\npublic class SwiftBlueThermalPrinterPlugin: NSObject, FlutterPlugin {\n  public static func register(with registrar: FlutterPluginRegistrar) {\n    let channel = FlutterMethodChannel(name: \"blue_thermal_printer\", binaryMessenger: registrar.messenger())\n    let instance = SwiftBlueThermalPrinterPlugin()\n    registrar.addMethodCallDelegate(instance, channel: channel)\n  }\n\n  public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {\n    result(\"iOS \" + UIDevice.current.systemVersion)\n  }\n}\n"
  },
  {
    "path": "ios/blue_thermal_printer.podspec",
    "content": "#\n# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html\n#\nPod::Spec.new do |s|\n  s.name             = 'blue_thermal_printer'\n  s.version          = '0.0.1'\n  s.summary          = 'A new Flutter plugin for connecting to thermal printer via bluetooth'\n  s.description      = <<-DESC\nA new Flutter plugin for connecting to thermal printer vie bluetooth\n                       DESC\n  s.homepage         = 'http://kakzaki.my.id'\n  s.license          = { :file => '../LICENSE' }\n  s.author           = { 'Zaki Mubarok' => 'kakzaki@gmail.com' }\n  s.source           = { :path => '.' }\n  s.source_files = 'Classes/**/*'\n  s.public_header_files = 'Classes/**/*.h'\n  s.dependency 'Flutter'\n\n  s.ios.deployment_target = '8.0'\nend\n\n"
  },
  {
    "path": "lib/blue_thermal_printer.dart",
    "content": "import 'dart:async';\nimport 'dart:typed_data';\n\nimport 'package:flutter/services.dart';\n\nclass BlueThermalPrinter {\n  static const int STATE_OFF = 10;\n  static const int STATE_TURNING_ON = 11;\n  static const int STATE_ON = 12;\n  static const int STATE_TURNING_OFF = 13;\n  static const int STATE_BLE_TURNING_ON = 14;\n  static const int STATE_BLE_ON = 15;\n  static const int STATE_BLE_TURNING_OFF = 16;\n  static const int ERROR = -1;\n  static const int CONNECTED = 1;\n  static const int DISCONNECTED = 0;\n  static const int DISCONNECT_REQUESTED = 2;\n\n  static const String namespace = 'blue_thermal_printer';\n\n  static const MethodChannel _channel =\n      const MethodChannel('$namespace/methods');\n\n  static const EventChannel _readChannel =\n      const EventChannel('$namespace/read');\n\n  static const EventChannel _stateChannel =\n      const EventChannel('$namespace/state');\n\n  final StreamController<MethodCall> _methodStreamController =\n      new StreamController.broadcast();\n\n  //Stream<MethodCall> get _methodStream => _methodStreamController.stream;\n\n  BlueThermalPrinter._() {\n    _channel.setMethodCallHandler((MethodCall call) async {\n      _methodStreamController.add(call);\n    });\n  }\n\n  static BlueThermalPrinter _instance = new BlueThermalPrinter._();\n\n  static BlueThermalPrinter get instance => _instance;\n\n  ///onStateChanged()\n  Stream<int?> onStateChanged() async* {\n    yield await _channel.invokeMethod('state').then((buffer) => buffer);\n\n    yield* _stateChannel.receiveBroadcastStream().map((buffer) => buffer);\n  }\n\n  ///onRead()\n  Stream<String> onRead() =>\n      _readChannel.receiveBroadcastStream().map((buffer) => buffer.toString());\n\n  Future<bool?> get isAvailable async =>\n      await _channel.invokeMethod('isAvailable');\n\n  Future<bool?> get isOn async => await _channel.invokeMethod('isOn');\n\n  Future<bool?> get isConnected async =>\n      await _channel.invokeMethod('isConnected');\n\n  Future<bool?> get openSettings async =>\n      await _channel.invokeMethod('openSettings');\n\n  ///getBondedDevices()\n  Future<List<BluetoothDevice>> getBondedDevices() async {\n    final List list = await (_channel.invokeMethod('getBondedDevices'));\n    return list.map((map) => BluetoothDevice.fromMap(map)).toList();\n  }\n\n  ///isDeviceConnected(BluetoothDevice device)\n  Future<bool?> isDeviceConnected(BluetoothDevice device) =>\n      _channel.invokeMethod('isDeviceConnected', device.toMap());\n\n  ///connect(BluetoothDevice device)\n  Future<dynamic> connect(BluetoothDevice device) =>\n      _channel.invokeMethod('connect', device.toMap());\n\n  ///disconnect()\n  Future<dynamic> disconnect() => _channel.invokeMethod('disconnect');\n\n  ///write(String message)\n  Future<dynamic> write(String message) =>\n      _channel.invokeMethod('write', {'message': message});\n\n  ///writeBytes(Uint8List message)\n  Future<dynamic> writeBytes(Uint8List message) =>\n      _channel.invokeMethod('writeBytes', {'message': message});\n\n  ///printCustom(String message, int size, int align,{String? charset})\n  Future<dynamic> printCustom(String message, int size, int align,\n          {String? charset}) =>\n      _channel.invokeMethod('printCustom', {\n        'message': message,\n        'size': size,\n        'align': align,\n        'charset': charset\n      });\n\n  ///printNewLine()\n  Future<dynamic> printNewLine() => _channel.invokeMethod('printNewLine');\n\n  ///paperCut()\n  Future<dynamic> paperCut() => _channel.invokeMethod('paperCut');\n\n  ///drawerPin5()\n  Future<dynamic> drawerPin2() => _channel.invokeMethod('drawerPin2');\n\n  ///drawerPin5()\n  Future<dynamic> drawerPin5() => _channel.invokeMethod('drawerPin5');\n\n  ///printImage(String pathImage)\n  Future<dynamic> printImage(String pathImage) =>\n      _channel.invokeMethod('printImage', {'pathImage': pathImage});\n\n  ///printImageBytes(Uint8List bytes)\n  Future<dynamic> printImageBytes(Uint8List bytes) =>\n      _channel.invokeMethod('printImageBytes', {'bytes': bytes});\n\n  ///printQRcode(String textToQR, int width, int height, int align)\n  Future<dynamic> printQRcode(\n          String textToQR, int width, int height, int align) =>\n      _channel.invokeMethod('printQRcode', {\n        'textToQR': textToQR,\n        'width': width,\n        'height': height,\n        'align': align\n      });\n\n  ///printLeftRight(String string1, String string2, int size,{String? charset, String? format})\n  Future<dynamic> printLeftRight(String string1, String string2, int size,\n          {String? charset, String? format}) =>\n      _channel.invokeMethod('printLeftRight', {\n        'string1': string1,\n        'string2': string2,\n        'size': size,\n        'charset': charset,\n        'format': format\n      });\n\n  ///print3Column(String string1, String string2, String string3, int size,{String? charset, String? format})\n  Future<dynamic> print3Column(\n          String string1, String string2, String string3, int size,\n          {String? charset, String? format}) =>\n      _channel.invokeMethod('print3Column', {\n        'string1': string1,\n        'string2': string2,\n        'string3': string3,\n        'size': size,\n        'charset': charset,\n        'format': format\n      });\n\n  ///print4Column(String string1, String string2, String string3,String string4, int size,{String? charset, String? format})\n  Future<dynamic> print4Column(String string1, String string2, String string3,\n          String string4, int size,\n          {String? charset, String? format}) =>\n      _channel.invokeMethod('print4Column', {\n        'string1': string1,\n        'string2': string2,\n        'string3': string3,\n        'string4': string4,\n        'size': size,\n        'charset': charset,\n        'format': format\n      });\n}\n\nclass BluetoothDevice {\n  final String? name;\n  final String? address;\n  final int type = 0;\n  bool connected = false;\n\n  BluetoothDevice(this.name, this.address);\n\n  BluetoothDevice.fromMap(Map map)\n      : name = map['name'],\n        address = map['address'];\n\n  Map<String, dynamic> toMap() => {\n        'name': this.name,\n        'address': this.address,\n        'type': this.type,\n        'connected': this.connected,\n      };\n\n  operator ==(Object other) {\n    return other is BluetoothDevice && other.address == this.address;\n  }\n\n  @override\n  int get hashCode => address.hashCode;\n}\n"
  },
  {
    "path": "local.properties",
    "content": "## This file must *NOT* be checked into Version Control Systems,\n# as it contains information specific to your local configuration.\n#\n# Location of the SDK. This is only used by Gradle.\n# For customization when using a Version Control System, please read the\n# header note.\n#Fri Mar 19 16:23:49 ICT 2021\nsdk.dir=E\\:\\\\Users\\\\ZAKI\\\\AppData\\\\Local\\\\Android\\\\sdk\n"
  },
  {
    "path": "macos/Classes/BlueThermalPrinterPlugin.h",
    "content": "#import <FlutterMacOS/FlutterMacOS.h>\n\n@interface BlueThermalPrinterPlugin : NSObject<FlutterPlugin>\n@end\n"
  },
  {
    "path": "macos/Classes/BlueThermalPrinterPlugin.m",
    "content": "#import \"BlueThermalPrinterPlugin.h\"\n\nstatic NSString *const CHANNEL_NAME = @\"plugins.kzaki.com/blue_thermal_printer\";\n\n\n@implementation BlueThermalPrinterPlugin\n+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {\n    FlutterMethodChannel* channel = [FlutterMethodChannel\n                                     methodChannelWithName:CHANNEL_NAME\n                                     binaryMessenger:[registrar messenger]];\n    BlueThermalPrinterPlugin* instance = [[BlueThermalPrinterPlugin alloc] init];\n    [registrar addMethodCallDelegate:instance channel:channel];\n}\n\n@end\n\n"
  },
  {
    "path": "macos/blue_thermal_printer.podspec",
    "content": "#\n# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html.\n# Run `pod lib lint flutter_blue.podspec' to validate before publishing.\n#\nPod::Spec.new do |s|\n  s.name             = 'blue_thermal_printer'\n  s.version          = '0.0.1'\n  s.summary          = 'A new Flutter plugin for connecting to thermal printer via bluetooth'\n  s.description      = <<-DESC\nA new Flutter plugin for connecting to thermal printer vie bluetooth\n                       DESC\n  s.homepage         = 'http://kakzaki.my.id'\n  s.license          = { :file => '../LICENSE' }\n  s.author           = { 'Zaki Mubarok' => 'kakzaki@gmail.com' }\n  s.source           = { :path => '.' }\n  s.source_files = 'Classes/**/*'\n  s.public_header_files = 'Classes/**/*.h'\n  s.dependency 'FlutterMacOS'\n  s.platform = :osx, '10.11'\n  s.framework = 'CoreBluetooth'\n\nend\n"
  },
  {
    "path": "pubspec.yaml",
    "content": "name: blue_thermal_printer\ndescription: A Flutter plugin for connecting to thermal printer via bluetooth\nversion: 1.2.3\nhomepage: https://kakzaki.dev\nrepository: https://github.com/kakzaki/blue_thermal_printer\nissue_tracker: https://github.com/kakzaki/blue_thermal_printer/issues\ndocumentation: https://github.com/kakzaki/blue_thermal_printer/blob/master/README.md\n\nenvironment:\n  sdk: '>=2.12.0 <3.0.0'\n  flutter: \">=1.10.0\"\n\ndependencies:\n  flutter:\n    sdk: flutter\n\ndev_dependencies:\n  flutter_test:\n    sdk: flutter\n\n# For information on the generic Dart part of this file, see the\n# following page: https://www.dartlang.org/tools/pub/pubspec\n\n# The following section is specific to Flutter.\nflutter:\n  # This section identifies this Flutter project as a plugin project.\n  # The androidPackage and pluginClass identifiers should not ordinarily\n  # be modified. They are used by the tooling to maintain consistency when\n  # adding or updating assets for this project.\n  plugin:\n    platforms:\n      android:\n        package: id.kakzaki.blue_thermal_printer\n        pluginClass: BlueThermalPrinterPlugin\n      ios:\n        pluginClass: BlueThermalPrinterPlugin\n      macos:\n        pluginClass: BlueThermalPrinterPlugin\n\n  # To add assets to your plugin package, add an assets section, like this:\n  # assets:\n  #  - images/a_dot_burr.jpeg\n  #  - images/a_dot_ham.jpeg\n  #\n  # For details regarding assets in packages, see\n  # https://flutter.dev/assets-and-images/#from-packages\n  #\n  # An image asset can refer to one or more resolution-specific \"variants\", see\n  # https://flutter.dev/assets-and-images/#resolution-aware.\n\n  # To add custom fonts to your plugin package, add a fonts section here,\n  # in this \"flutter\" section. Each entry in this list should have a\n  # \"family\" key with the font family name, and a \"fonts\" key with a\n  # list giving the asset and other descriptors for the font. For\n  # example:\n  # fonts:\n  #   - family: Schyler\n  #     fonts:\n  #       - asset: fonts/Schyler-Regular.ttf\n  #       - asset: fonts/Schyler-Italic.ttf\n  #         style: italic\n  #   - family: Trajan Pro\n  #     fonts:\n  #       - asset: fonts/TrajanPro.ttf\n  #       - asset: fonts/TrajanPro_Bold.ttf\n  #         weight: 700\n  #\n  # For details regarding fonts in packages, see\n  # https://flutter.dev/custom-fonts/#from-packages\n"
  },
  {
    "path": "test/blue_thermal_printer_test.dart",
    "content": "import 'package:flutter/services.dart';\nimport 'package:flutter_test/flutter_test.dart';\n\nvoid main() {\n  const MethodChannel channel = MethodChannel('blue_thermal_printer');\n\n  setUp(() {\n    channel.setMockMethodCallHandler((MethodCall methodCall) async {\n      return '42';\n    });\n  });\n\n  tearDown(() {\n    channel.setMockMethodCallHandler(null);\n  });\n\n  test('getPlatformVersion', () async {\n    //expect(await BlueThermalPrinter.platformVersion, '42');\n  });\n}\n"
  }
]