Committed by
GitHub
Added web support (#40)
* Added web support * Use JS interop library; Add null check for releasing WakeLockSentinel; * Update dependencies * Update dependencies * Refactoring * Update gitignore * Format wakelock_web folder * Remove unused JS variable * Bump github action versions * Bump checkout version * Update checks.yml * Use relative changelog Co-authored-by: creativecreatorormaybenot <creativecreatorormaybenot@gmail.com>
Showing
12 changed files
with
391 additions
and
11 deletions
| @@ -27,8 +27,8 @@ jobs: | @@ -27,8 +27,8 @@ jobs: | ||
| 27 | fail-fast: false | 27 | fail-fast: false |
| 28 | 28 | ||
| 29 | steps: | 29 | steps: |
| 30 | - - uses: actions/checkout@v2 | ||
| 31 | - - uses: subosito/flutter-action@v1.2.0 | 30 | + - uses: actions/checkout@v2.3.3 |
| 31 | + - uses: subosito/flutter-action@v1.3.2 | ||
| 32 | with: | 32 | with: |
| 33 | channel: ${{ matrix.channel }} | 33 | channel: ${{ matrix.channel }} |
| 34 | - name: Setup projects (root & example) | 34 | - name: Setup projects (root & example) |
| @@ -51,7 +51,7 @@ jobs: | @@ -51,7 +51,7 @@ jobs: | ||
| 51 | strategy: | 51 | strategy: |
| 52 | matrix: | 52 | matrix: |
| 53 | device: | 53 | device: |
| 54 | - - 'iPhone 11 Pro Max (13.5)' | 54 | + - 'iPhone 11 Pro Max (13.7)' |
| 55 | - 'Android' | 55 | - 'Android' |
| 56 | channel: | 56 | channel: |
| 57 | - 'stable' | 57 | - 'stable' |
| @@ -72,8 +72,8 @@ jobs: | @@ -72,8 +72,8 @@ jobs: | ||
| 72 | '$1 == device { print $2 }' | 72 | '$1 == device { print $2 }' |
| 73 | ) | 73 | ) |
| 74 | xcrun simctl boot "${UDID:?simulator not found}" | 74 | xcrun simctl boot "${UDID:?simulator not found}" |
| 75 | - - uses: actions/checkout@v2 | ||
| 76 | - - uses: subosito/flutter-action@v1.2.0 | 75 | + - uses: actions/checkout@v2.3.3 |
| 76 | + - uses: subosito/flutter-action@v1.3.2 | ||
| 77 | with: | 77 | with: |
| 78 | channel: ${{ matrix.channel }} | 78 | channel: ${{ matrix.channel }} |
| 79 | - name: Setup projects (root & example) | 79 | - name: Setup projects (root & example) |
| @@ -19,7 +19,7 @@ jobs: | @@ -19,7 +19,7 @@ jobs: | ||
| 19 | runs-on: ubuntu-latest | 19 | runs-on: ubuntu-latest |
| 20 | 20 | ||
| 21 | steps: | 21 | steps: |
| 22 | - - uses: actions/checkout@v2 | ||
| 23 | - - uses: axel-op/dart-package-analyzer@v2.0.0 | 22 | + - uses: actions/checkout@v2.3.3 |
| 23 | + - uses: axel-op/dart-package-analyzer@v3 | ||
| 24 | with: | 24 | with: |
| 25 | githubToken: ${{ secrets.GITHUB_TOKEN }} | 25 | githubToken: ${{ secrets.GITHUB_TOKEN }} |
| @@ -11,8 +11,8 @@ jobs: | @@ -11,8 +11,8 @@ jobs: | ||
| 11 | name: Check format, analyze, and test | 11 | name: Check format, analyze, and test |
| 12 | 12 | ||
| 13 | steps: | 13 | steps: |
| 14 | - - uses: actions/checkout@v2 | ||
| 15 | - - uses: subosito/flutter-action@v1.2.0 | 14 | + - uses: actions/checkout@v2.3.3 |
| 15 | + - uses: subosito/flutter-action@v1.3.2 | ||
| 16 | with: | 16 | with: |
| 17 | channel: stable | 17 | channel: stable |
| 18 | - name: Setup projects (root & example) | 18 | - name: Setup projects (root & example) |
| @@ -41,8 +41,8 @@ jobs: | @@ -41,8 +41,8 @@ jobs: | ||
| 41 | name: Publish plugin | 41 | name: Publish plugin |
| 42 | 42 | ||
| 43 | steps: | 43 | steps: |
| 44 | - - uses: actions/checkout@v2 | ||
| 45 | - - uses: sakebook/actions-flutter-pub-publisher@v1.2.1 | 44 | + - uses: actions/checkout@v2.3.3 |
| 45 | + - uses: sakebook/actions-flutter-pub-publisher@v1.3.1 | ||
| 46 | with: | 46 | with: |
| 47 | credential: ${{ secrets.PUB_CREDENTIALS }} | 47 | credential: ${{ secrets.PUB_CREDENTIALS }} |
| 48 | flutter_package: true | 48 | flutter_package: true |
assets/NoSleep.js
0 → 100644
| 1 | +var webm = | ||
| 2 | + 'data:video/webm;base64,GkXfo0AgQoaBAUL3gQFC8oEEQvOBCEKCQAR3ZWJtQoeBAkKFgQIYU4BnQI0VSalmQCgq17FAAw9CQE2AQAZ3aGFtbXlXQUAGd2hhbW15RIlACECPQAAAAAAAFlSua0AxrkAu14EBY8WBAZyBACK1nEADdW5khkAFVl9WUDglhohAA1ZQOIOBAeBABrCBCLqBCB9DtnVAIueBAKNAHIEAAIAwAQCdASoIAAgAAUAmJaQAA3AA/vz0AAA='; | ||
| 3 | +var mp4 = | ||
| 4 | + 'data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQAD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'; | ||
| 5 | + | ||
| 6 | +var _createClass = (function () { | ||
| 7 | + function defineProperties(target, props) { | ||
| 8 | + for (var i = 0; i < props.length; i++) { | ||
| 9 | + var descriptor = props[i]; | ||
| 10 | + descriptor.enumerable = descriptor.enumerable || false; | ||
| 11 | + descriptor.configurable = true; | ||
| 12 | + if ('value' in descriptor) descriptor.writable = true; | ||
| 13 | + Object.defineProperty(target, descriptor.key, descriptor); | ||
| 14 | + } | ||
| 15 | + } | ||
| 16 | + return function (Constructor, protoProps, staticProps) { | ||
| 17 | + if (protoProps) defineProperties(Constructor.prototype, protoProps); | ||
| 18 | + if (staticProps) defineProperties(Constructor, staticProps); | ||
| 19 | + return Constructor; | ||
| 20 | + }; | ||
| 21 | +})(); | ||
| 22 | + | ||
| 23 | +function _classCallCheck(instance, Constructor) { | ||
| 24 | + if (!(instance instanceof Constructor)) { | ||
| 25 | + throw new TypeError('Cannot call a class as a function'); | ||
| 26 | + } | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +// Detect iOS browsers < version 10 | ||
| 30 | +var oldIOS = | ||
| 31 | + typeof navigator !== 'undefined' && | ||
| 32 | + parseFloat( | ||
| 33 | + ( | ||
| 34 | + '' + | ||
| 35 | + (/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec( | ||
| 36 | + navigator.userAgent | ||
| 37 | + ) || [0, ''])[1] | ||
| 38 | + ) | ||
| 39 | + .replace('undefined', '3_2') | ||
| 40 | + .replace('_', '.') | ||
| 41 | + .replace('_', '') | ||
| 42 | + ) < 10 && | ||
| 43 | + !window.MSStream; | ||
| 44 | + | ||
| 45 | +// Detect native Wake Lock API support | ||
| 46 | +var nativeWakeLock = 'wakeLock' in navigator; | ||
| 47 | + | ||
| 48 | +var NoSleep = (function () { | ||
| 49 | + function NoSleep() { | ||
| 50 | + var _this = this; | ||
| 51 | + | ||
| 52 | + _classCallCheck(this, NoSleep); | ||
| 53 | + | ||
| 54 | + if (nativeWakeLock) { | ||
| 55 | + this._wakeLock = null; | ||
| 56 | + var handleVisibilityChange = function handleVisibilityChange() { | ||
| 57 | + if ( | ||
| 58 | + _this._wakeLock !== null && | ||
| 59 | + document.visibilityState === 'visible' | ||
| 60 | + ) { | ||
| 61 | + _this.enable(); | ||
| 62 | + } | ||
| 63 | + }; | ||
| 64 | + document.addEventListener('visibilitychange', handleVisibilityChange); | ||
| 65 | + document.addEventListener('fullscreenchange', handleVisibilityChange); | ||
| 66 | + } else if (oldIOS) { | ||
| 67 | + this.noSleepTimer = null; | ||
| 68 | + } else { | ||
| 69 | + // Set up no sleep video element | ||
| 70 | + this.noSleepVideo = document.createElement('video'); | ||
| 71 | + | ||
| 72 | + this.noSleepVideo.setAttribute('title', 'No Sleep'); | ||
| 73 | + this.noSleepVideo.setAttribute('playsinline', ''); | ||
| 74 | + | ||
| 75 | + this._addSourceToVideo(this.noSleepVideo, 'webm', webm); | ||
| 76 | + this._addSourceToVideo(this.noSleepVideo, 'mp4', mp4); | ||
| 77 | + | ||
| 78 | + this.noSleepVideo.addEventListener('loadedmetadata', function () { | ||
| 79 | + if (_this.noSleepVideo.duration <= 1) { | ||
| 80 | + // webm source | ||
| 81 | + _this.noSleepVideo.setAttribute('loop', ''); | ||
| 82 | + } else { | ||
| 83 | + // mp4 source | ||
| 84 | + _this.noSleepVideo.addEventListener('timeupdate', function () { | ||
| 85 | + if (_this.noSleepVideo.currentTime > 0.5) { | ||
| 86 | + _this.noSleepVideo.currentTime = Math.random(); | ||
| 87 | + } | ||
| 88 | + }); | ||
| 89 | + } | ||
| 90 | + }); | ||
| 91 | + } | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | + _createClass(NoSleep, [ | ||
| 95 | + { | ||
| 96 | + key: '_addSourceToVideo', | ||
| 97 | + value: function _addSourceToVideo(element, type, dataURI) { | ||
| 98 | + var source = document.createElement('source'); | ||
| 99 | + source.src = dataURI; | ||
| 100 | + source.type = 'video/' + type; | ||
| 101 | + element.appendChild(source); | ||
| 102 | + }, | ||
| 103 | + }, | ||
| 104 | + { | ||
| 105 | + key: 'enable', | ||
| 106 | + value: function enable() { | ||
| 107 | + var _this2 = this; | ||
| 108 | + | ||
| 109 | + if (nativeWakeLock) { | ||
| 110 | + navigator.wakeLock | ||
| 111 | + .request('screen') | ||
| 112 | + .then(function (wakeLock) { | ||
| 113 | + _this2._wakeLock = wakeLock; | ||
| 114 | + console.log('Wake Lock active.'); | ||
| 115 | + _this2._wakeLock.addEventListener('release', function () { | ||
| 116 | + // ToDo: Potentially emit an event for the page to observe since | ||
| 117 | + // Wake Lock releases happen when page visibility changes. | ||
| 118 | + // (https://web.dev/wakelock/#wake-lock-lifecycle) | ||
| 119 | + console.log('Wake Lock released.'); | ||
| 120 | + }); | ||
| 121 | + }) | ||
| 122 | + .catch(function (err) { | ||
| 123 | + console.error(err.name + ', ' + err.message); | ||
| 124 | + }); | ||
| 125 | + } else if (oldIOS) { | ||
| 126 | + this.disable(); | ||
| 127 | + console.warn( | ||
| 128 | + '\n NoSleep enabled for older iOS devices. This can interrupt\n active or long-running network requests from completing successfully.\n See https://github.com/richtr/NoSleep.js/issues/15 for more details.\n ' | ||
| 129 | + ); | ||
| 130 | + this.noSleepTimer = window.setInterval(function () { | ||
| 131 | + if (!document.hidden) { | ||
| 132 | + window.location.href = window.location.href.split('#')[0]; | ||
| 133 | + window.setTimeout(window.stop, 0); | ||
| 134 | + } | ||
| 135 | + }, 15000); | ||
| 136 | + } else { | ||
| 137 | + this.noSleepVideo.play(); | ||
| 138 | + } | ||
| 139 | + }, | ||
| 140 | + }, | ||
| 141 | + { | ||
| 142 | + key: 'disable', | ||
| 143 | + value: function disable() { | ||
| 144 | + if (nativeWakeLock) { | ||
| 145 | + if(this._wakeLock != null) { | ||
| 146 | + this._wakeLock.release(); | ||
| 147 | + } | ||
| 148 | + | ||
| 149 | + this._wakeLock = null; | ||
| 150 | + } else if (oldIOS) { | ||
| 151 | + if (this.noSleepTimer) { | ||
| 152 | + console.warn( | ||
| 153 | + '\n NoSleep now disabled for older iOS devices.\n ' | ||
| 154 | + ); | ||
| 155 | + window.clearInterval(this.noSleepTimer); | ||
| 156 | + this.noSleepTimer = null; | ||
| 157 | + } | ||
| 158 | + } else { | ||
| 159 | + this.noSleepVideo.pause(); | ||
| 160 | + } | ||
| 161 | + }, | ||
| 162 | + }, | ||
| 163 | + { | ||
| 164 | + key: 'isEnabled', | ||
| 165 | + value: function isEnabled() { | ||
| 166 | + if (oldIOS) { | ||
| 167 | + return this.noSleepTimer != null; | ||
| 168 | + } else { | ||
| 169 | + return !this.noSleepVideo.paused; | ||
| 170 | + } | ||
| 171 | + }, | ||
| 172 | + }, | ||
| 173 | + ]); | ||
| 174 | + | ||
| 175 | + return NoSleep; | ||
| 176 | +})(); | ||
| 177 | + | ||
| 178 | +var Wakelock = new NoSleep(); |
| @@ -10,6 +10,8 @@ environment: | @@ -10,6 +10,8 @@ environment: | ||
| 10 | dependencies: | 10 | dependencies: |
| 11 | flutter: | 11 | flutter: |
| 12 | sdk: flutter | 12 | sdk: flutter |
| 13 | + wakelock_web: | ||
| 14 | + path: wakelock_web/ | ||
| 13 | 15 | ||
| 14 | dev_dependencies: | 16 | dev_dependencies: |
| 15 | pedantic: 1.9.0 | 17 | pedantic: 1.9.0 |
| @@ -28,3 +30,8 @@ flutter: | @@ -28,3 +30,8 @@ flutter: | ||
| 28 | pluginClass: WakelockPlugin | 30 | pluginClass: WakelockPlugin |
| 29 | ios: | 31 | ios: |
| 30 | pluginClass: WakelockPlugin | 32 | pluginClass: WakelockPlugin |
| 33 | + web: | ||
| 34 | + default_package: wakelock_web | ||
| 35 | + | ||
| 36 | + assets: | ||
| 37 | + - assets/NoSleep.js |
wakelock_web/.gitignore
0 → 100644
| 1 | +# Miscellaneous | ||
| 2 | +*.class | ||
| 3 | +*.log | ||
| 4 | +*.pyc | ||
| 5 | +*.swp | ||
| 6 | +.DS_Store | ||
| 7 | +.atom/ | ||
| 8 | +.buildlog/ | ||
| 9 | +.history | ||
| 10 | +.svn/ | ||
| 11 | + | ||
| 12 | +# IntelliJ related | ||
| 13 | +*.iml | ||
| 14 | +*.ipr | ||
| 15 | +*.iws | ||
| 16 | +.idea/ | ||
| 17 | + | ||
| 18 | +# The .vscode folder contains launch configuration and tasks you configure in | ||
| 19 | +# VS Code which you may wish to be included in version control, so this line | ||
| 20 | +# is commented out by default. | ||
| 21 | +#.vscode/ | ||
| 22 | + | ||
| 23 | +# Flutter/Dart/Pub related | ||
| 24 | +**/doc/api/ | ||
| 25 | +.dart_tool/ | ||
| 26 | +.flutter-plugins | ||
| 27 | +.flutter-plugins-dependencies | ||
| 28 | +.packages | ||
| 29 | +.pub-cache/ | ||
| 30 | +.pub/ | ||
| 31 | +/build/ | ||
| 32 | + | ||
| 33 | +# Web related | ||
| 34 | +lib/generated_plugin_registrant.dart | ||
| 35 | + | ||
| 36 | +# Symbolication related | ||
| 37 | +app.*.symbols | ||
| 38 | + | ||
| 39 | +# Obfuscation related | ||
| 40 | +app.*.map.json | ||
| 41 | + | ||
| 42 | +# Exceptions to above rules. | ||
| 43 | +!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages | ||
| 44 | + | ||
| 45 | +# Cleanliness | ||
| 46 | +pubspec.lock | ||
| 47 | +.metadata | ||
| 48 | +test | ||
| 49 | +ios | ||
| 50 | +android | ||
| 51 | +web |
wakelock_web/CHANGELOG.md
0 → 100644
| 1 | +../CHANGELOG.md |
wakelock_web/LICENSE
0 → 100644
| 1 | +../LICENSE |
wakelock_web/README.md
0 → 100644
| 1 | +../README.md |
wakelock_web/lib/wakelock_js.dart
0 → 100644
wakelock_web/lib/wakelock_web.dart
0 → 100644
| 1 | +import 'dart:async'; | ||
| 2 | + | ||
| 3 | +import 'dart:js'; | ||
| 4 | + | ||
| 5 | +import 'package:flutter/services.dart'; | ||
| 6 | +import 'package:flutter_web_plugins/flutter_web_plugins.dart'; | ||
| 7 | +import 'package:import_js_library/import_js_library.dart'; | ||
| 8 | + | ||
| 9 | +import 'wakelock_js.dart' as wakelock; | ||
| 10 | + | ||
| 11 | +/// A web implementation of the Wakelock plugin. | ||
| 12 | +class WakelockWebPlugin { | ||
| 13 | + final _isNativeWakelockSupported = | ||
| 14 | + context['navigator'].hasProperty('wakeLock'); | ||
| 15 | + var _enabled = false; | ||
| 16 | + | ||
| 17 | + static void registerWith(Registrar registrar) { | ||
| 18 | + final MethodChannel channel = MethodChannel( | ||
| 19 | + 'wakelock', | ||
| 20 | + const StandardMethodCodec(), | ||
| 21 | + registrar.messenger, | ||
| 22 | + ); | ||
| 23 | + | ||
| 24 | + /// Import JS library | ||
| 25 | + importJsLibrary(url: './assets/NoSleep.js', flutterPluginName: 'wakelock'); | ||
| 26 | + | ||
| 27 | + final pluginInstance = WakelockWebPlugin(); | ||
| 28 | + channel.setMethodCallHandler(pluginInstance.handleMethodCall); | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + /// Handles method calls over the MethodChannel of this plugin. | ||
| 32 | + /// Note: Check the "federated" architecture for a new way of doing this: | ||
| 33 | + /// https://flutter.dev/go/federated-plugins | ||
| 34 | + Future<dynamic> handleMethodCall(MethodCall call) async { | ||
| 35 | + switch (call.method) { | ||
| 36 | + case 'toggle': | ||
| 37 | + final bool enable = call.arguments['enable']; | ||
| 38 | + return Future.value(_toggle(enable)); | ||
| 39 | + break; | ||
| 40 | + case 'isEnabled': | ||
| 41 | + return Future.value(_isEnabled()); | ||
| 42 | + break; | ||
| 43 | + default: | ||
| 44 | + throw PlatformException( | ||
| 45 | + code: 'Unimplemented', | ||
| 46 | + details: 'wakelock_web for web doesn\'t implement \'${call.method}\'', | ||
| 47 | + ); | ||
| 48 | + } | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + _toggle(bool enable) { | ||
| 52 | + if (enable) { | ||
| 53 | + wakelock.enable(); | ||
| 54 | + } else { | ||
| 55 | + wakelock.disable(); | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + _enabled = enable; | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + bool _isEnabled() { | ||
| 62 | + /// If the native WebLock API is supported | ||
| 63 | + /// since these APIs are async in nature | ||
| 64 | + /// Give immediate boolean value based on `_enabled` | ||
| 65 | + if (_isNativeWakelockSupported) { | ||
| 66 | + return _enabled; | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + return wakelock.isEnabled(); | ||
| 70 | + } | ||
| 71 | +} |
wakelock_web/pubspec.yaml
0 → 100644
| 1 | +name: wakelock_web | ||
| 2 | +description: This plugin allows you to keep the browser devices awake, i.e. prevent the screen from sleeping by toggling the wakelock of the device on or off. | ||
| 3 | +version: 0.1.4+2 | ||
| 4 | +homepage: https://github.com/creativecreatorormaybenot/wakelock | ||
| 5 | + | ||
| 6 | +environment: | ||
| 7 | + sdk: ">=2.7.0 <3.0.0" | ||
| 8 | + flutter: ">=1.20.0 <2.0.0" | ||
| 9 | + | ||
| 10 | +dependencies: | ||
| 11 | + flutter: | ||
| 12 | + sdk: flutter | ||
| 13 | + flutter_web_plugins: | ||
| 14 | + sdk: flutter | ||
| 15 | + import_js_library: ^1.0.1 | ||
| 16 | + js: ^0.6.2 | ||
| 17 | + | ||
| 18 | +dev_dependencies: | ||
| 19 | + flutter_test: | ||
| 20 | + sdk: flutter | ||
| 21 | + | ||
| 22 | +# For information on the generic Dart part of this file, see the | ||
| 23 | +# following page: https://dart.dev/tools/pub/pubspec | ||
| 24 | + | ||
| 25 | +# The following section is specific to Flutter. | ||
| 26 | +flutter: | ||
| 27 | + # This section identifies this Flutter project as a plugin project. | ||
| 28 | + # The 'pluginClass' and Android 'package' identifiers should not ordinarily | ||
| 29 | + # be modified. They are used by the tooling to maintain consistency when | ||
| 30 | + # adding or updating assets for this project. | ||
| 31 | + plugin: | ||
| 32 | + platforms: | ||
| 33 | + web: | ||
| 34 | + pluginClass: WakelockWebPlugin | ||
| 35 | + fileName: wakelock_web.dart | ||
| 36 | + | ||
| 37 | + # | ||
| 38 | + # For details regarding assets in packages, see | ||
| 39 | + # https://flutter.dev/assets-and-images/#from-packages | ||
| 40 | + # | ||
| 41 | + # An image asset can refer to one or more resolution-specific "variants", see | ||
| 42 | + # https://flutter.dev/assets-and-images/#resolution-aware. | ||
| 43 | + | ||
| 44 | + # To add custom fonts to your plugin package, add a fonts section here, | ||
| 45 | + # in this "flutter" section. Each entry in this list should have a | ||
| 46 | + # "family" key with the font family name, and a "fonts" key with a | ||
| 47 | + # list giving the asset and other descriptors for the font. For | ||
| 48 | + # example: | ||
| 49 | + # fonts: | ||
| 50 | + # - family: Schyler | ||
| 51 | + # fonts: | ||
| 52 | + # - asset: fonts/Schyler-Regular.ttf | ||
| 53 | + # - asset: fonts/Schyler-Italic.ttf | ||
| 54 | + # style: italic | ||
| 55 | + # - family: Trajan Pro | ||
| 56 | + # fonts: | ||
| 57 | + # - asset: fonts/TrajanPro.ttf | ||
| 58 | + # - asset: fonts/TrajanPro_Bold.ttf | ||
| 59 | + # weight: 700 | ||
| 60 | + # | ||
| 61 | + # For details regarding fonts in packages, see | ||
| 62 | + # https://flutter.dev/custom-fonts/#from-packages |
-
Please register or login to post a comment