diff --git a/.github/workflows/dart-analyzer.yml b/.github/workflows/dart-analyzer.yml new file mode 100644 index 0000000..8253ff5 --- /dev/null +++ b/.github/workflows/dart-analyzer.yml @@ -0,0 +1,29 @@ +name: Dart Analyzer +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + package-analysis: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: axel-op/dart-package-analyzer@v3 + id: dart_analysis + with: + githubToken: ${{ secrets.GITHUB_TOKEN }} + - name: Check Scores + env: + TOTAL: ${{ steps.dart_analysis.outputs.total }} + TOTAL_MAX: ${{ steps.dart_analysis.outputs.total_max }} + run: | + SCORES=$(( $TOTAL + 10 / $TOTAL_MAX + 10 )) + if (( $SCORES < 0.8 )) + then + echo Score too low! + exit 1 + fi \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b92e68..a26a045 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,24 @@ +## [1.1.0] - [10.20.2021] +### Features +#### Dart +- **[Added]** `getMap` to `AudioModel`. +- **[Added]** a [`DART ANALYZER`](https://github.com/axel-op/dart-package-analyzer/) to `PULL_REQUEST` and `PUSH`. + +### Documentation +- Updated `README` documentation. +- Updated dependences. +- Updated `OnAudioEdit` and `OnAudioEditExample` documentation to support new `[Flutter 2.5]`. +- Created `DEPRECATED` file/history. + +### Changes +#### Dart +- Changed from `[AudiosTagModel]` to `[AudioModel]`. +- Removed `[IOS]` from `[pubspec]`. + +### ⚠ Important Changes +#### Dart +- Deprecated `[AudiosTagModel]` from `[AudioModel]`. + ## [1.0.2] - [04.20.2021] ### Features #### Dart/Kotlin @@ -72,6 +93,14 @@ ### Changes - TODO -### Important Changes +### ⚠ Important Changes +#### @**Deprecated** - TODO - --> \ No newline at end of file + --> + + \ No newline at end of file diff --git a/DEPRECATED.md b/DEPRECATED.md new file mode 100644 index 0000000..b7ad28c --- /dev/null +++ b/DEPRECATED.md @@ -0,0 +1,4 @@ +## [1.1.0] - [10.20.2021] -> [X.X.X] - [XX.XX.XXXX] +### Deprecated +- `[AudiosTagModel]`. + - Use `[AudioModel]` instead. \ No newline at end of file diff --git a/README.md b/README.md index f9da695..c2d1513 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ NOTE: Feel free to help with readme translations Add the following code to your `pubspec.yaml`: ```yaml dependencies: - on_audio_edit: ^1.0.2 + on_audio_edit: ^1.1.0 ``` #### Request Permission: diff --git a/README.pt-BR.md b/README.pt-BR.md index 752a3b3..b83e5a6 100644 --- a/README.pt-BR.md +++ b/README.pt-BR.md @@ -34,7 +34,7 @@ NOTE: Fique à vontade para ajudar nas traduções Adicione o seguinte codigo para seu `pubspec.yaml`: ```yaml dependencies: - on_audio_edit: ^1.0.2 + on_audio_edit: ^1.1.0 ``` #### Solicitar Permissões: diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..f065cf1 --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index 1ea265c..7759281 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -5,7 +5,7 @@ buildscript { ext.kotlin_version = '1.4.32' repositories { google() - jcenter() + mavenCentral() } dependencies { @@ -17,7 +17,7 @@ buildscript { rootProject.allprojects { repositories { google() - jcenter() + mavenCentral() // maven { url "https://jitpack.io" } } @@ -48,7 +48,7 @@ dependencies { implementation "androidx.documentfile:documentfile:1.0.1" implementation 'com.github.AdrienPoupa:jaudiotagger:2.2.3' // - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2' - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2-native-mt' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2-native-mt' implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" } diff --git a/example/analysis_options.yaml b/example/analysis_options.yaml new file mode 100644 index 0000000..f065cf1 --- /dev/null +++ b/example/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options \ No newline at end of file diff --git a/example/android/build.gradle b/example/android/build.gradle index b834f87..6446aaf 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -1,8 +1,8 @@ buildscript { - ext.kotlin_version = '1.3.50' + ext.kotlin_version = '1.4.32' repositories { google() - jcenter() + mavenCentral() } dependencies { @@ -14,7 +14,7 @@ buildscript { allprojects { repositories { google() - jcenter() + mavenCentral() } } diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index bc6a58a..fdbb6e4 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Jun 23 08:50:38 CEST 2017 +#Wed Oct 20 10:55:49 BRT 2021 distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +zipStoreBase=GRADLE_USER_HOME diff --git a/example/lib/main.dart b/example/lib/main.dart index b0e6852..1123039 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,10 +1,15 @@ /* +============= Author: Lucas Josino Github: https://github.com/LucasPJS -Plugin: on_audio_edit +Website: https://lucasjosino.com/ +============= +Plugin/Id: on_audio_edit#3 Homepage: https://github.com/LucasPJS/on_audio_edit -Copyright: © 2021, Lucas Josino. All rights reserved. +Pub: https://pub.dev/packages/on_audio_edit License: https://github.com/LucasPJS/on_audio_edit/blob/main/LICENSE +Copyright: © 2021, Lucas Josino. All rights reserved. +============= */ import 'package:flutter/material.dart'; @@ -13,65 +18,109 @@ import 'package:on_audio_query/on_audio_query.dart'; import 'package:on_toast_widget/on_toast_widget.dart'; void main() { - runApp(MyApp()); + runApp( + const MaterialApp( + home: MyApp(), + ), + ); } class MyApp extends StatefulWidget { + const MyApp({Key? key}) : super(key: key); + @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State with SingleTickerProviderStateMixin { - // + // OnAudioQuery instance + final OnAudioQuery _audioQuery = OnAudioQuery(); + // OnAudioQuery instance + final OnAudioEdit _audioEdit = OnAudioEdit(); + + // Texts controllers TextEditingController name = TextEditingController(); TextEditingController artist = TextEditingController(); - // - late AnimationController _controller = - AnimationController(vsync: this, duration: Duration(seconds: 2)); + // OnToastWidget animation controller + late final AnimationController _controller = AnimationController( + vsync: this, + duration: const Duration(seconds: 2), + ); - // + // Main parameters List songList = []; bool? result; + @override + void initState() { + super.initState(); + requestPermission(); + } + + requestPermission() async { + bool permissionStatus = await _audioQuery.permissionsStatus(); + if (!permissionStatus) { + await _audioQuery.permissionsRequest(); + setState(() {}); + } + } + @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( - title: Text("Songs"), + title: const Text("Songs"), elevation: 2, ), body: Stack( children: [ - FutureBuilder( - future: OnAudioQuery().querySongs(SongSortType.DEFAULT, - OrderType.ASC_OR_SMALLER, UriType.EXTERNAL, true), - builder: (context, AsyncSnapshot> item) { - if (item.data != null) { - songList = item.data!; - return RefreshIndicator( - onRefresh: () async { - setState(() {}); + FutureBuilder>( + future: _audioQuery.querySongs(), + builder: (context, item) { + // Loading content + if (item.data == null) return const CircularProgressIndicator(); + + // When you try "query" without asking for [READ] or [Library] permission + // the plugin will return a [Empty] list. + if (item.data!.isEmpty) return const Text("Nothing found!"); + + songList = item.data!; + return RefreshIndicator( + onRefresh: () async { + setState(() {}); + }, + child: ListView.builder( + itemCount: songList.length, + itemBuilder: (context, index) { + return ListTile( + // [onTap] will open a dialog with two options: + // + // * Edit audio tags. + // * Edit audio artwork. + onTap: () => optionsDialog(context, index), + // [onLongPress] will read all information about selected items: + onLongPress: () async { + var result = await _audioEdit.readAudios( + [songList[index].data], + ); + // Print the result. + debugPrint(result[0].toString()); + }, + title: Text(songList[index].title), + subtitle: Text( + songList[index].artist ?? '', + ), + trailing: const Icon(Icons.arrow_forward_rounded), + leading: QueryArtworkWidget( + id: songList[index].id, + type: ArtworkType.AUDIO, + ), + ); }, - child: ListView.builder( - physics: BouncingScrollPhysics(), - itemCount: songList.length, - itemBuilder: (context, index) { - return ListTile( - onTap: () => optionsDialog(context, index), - title: Text(songList[index].title), - subtitle: Text(songList[index].artist), - trailing: Icon(Icons.arrow_forward_rounded), - leading: QueryArtworkWidget( - id: songList[index].id, - type: ArtworkType.AUDIO, - )); - }, - ), - ); - } - return CircularProgressIndicator(); + ), + ); }, ), OnToastWidget( @@ -86,7 +135,7 @@ class _MyAppState extends State with SingleTickerProviderStateMixin { mainAxisAlignment: MainAxisAlignment.center, children: [ Text(result.toString()), - SizedBox(height: 10), + const SizedBox(height: 10), Text(result == true ? "Pull to refresh to see the magic happening" : "Opps, something wrong happened") @@ -103,26 +152,27 @@ class _MyAppState extends State with SingleTickerProviderStateMixin { optionsDialog(BuildContext context, int index) { return showDialog( context: context, - builder: (widget) { + builder: (context) { return AlertDialog( - title: Text("Choose a option"), - content: Container( + title: const Text("Choose a option"), + content: SizedBox( height: 120, child: Column( children: [ ListTile( - title: Text("Edit Audio"), + title: const Text("Edit Audio"), onTap: () { Navigator.pop(context); editAudioDialog(context, index); }, ), ListTile( - title: Text("Edit Artwork"), + title: const Text("Edit Artwork"), onTap: () async { Navigator.pop(context); - result = - await OnAudioEdit().editArtwork(songList[index].data); + result = await OnAudioEdit().editArtwork( + songList[index].data, + ); setState(() { _controller.forward(); }); @@ -136,7 +186,7 @@ class _MyAppState extends State with SingleTickerProviderStateMixin { onPressed: () { Navigator.pop(context); }, - child: Text("Cancel"), + child: const Text("Cancel"), ) ], ); @@ -147,17 +197,17 @@ class _MyAppState extends State with SingleTickerProviderStateMixin { editAudioDialog(BuildContext context, int index) { return showDialog( context: context, - builder: (widget) { + builder: (context) { return AlertDialog( - title: Text("Change info"), - content: Container( + title: const Text("Change info"), + content: SizedBox( height: 120, child: Column( children: [ TextFormField( controller: name, ), - SizedBox( + const SizedBox( height: 20, ), TextField( @@ -174,23 +224,25 @@ class _MyAppState extends State with SingleTickerProviderStateMixin { TagType.ARTIST: artist.text, }; Navigator.pop(context); - result = - await OnAudioEdit().editAudio(songList[index].data, tag); + result = await OnAudioEdit().editAudio( + songList[index].data, + tag, + ); setState(() { _controller.forward(); }); }, - child: Text("Create"), + child: const Text("Create"), ), MaterialButton( onPressed: () { Navigator.pop(context); }, - child: Text("Cancel"), + child: const Text("Cancel"), ) ], ); }, ); } -} \ No newline at end of file +} diff --git a/example/pubspec.yaml b/example/pubspec.yaml index e9026cf..1e67a09 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -9,11 +9,11 @@ environment: sdk: '>=2.12.0 <3.0.0' dependencies: - on_audio_query: ^1.0.6 + # Toast on_toast_widget: ^1.0.0 - flutter: - sdk: flutter + # Audio + on_audio_query: ^2.5.1 on_audio_edit: # When depending on this package from a real application you should use: # on_audio_edit: ^x.y.z @@ -22,11 +22,17 @@ dependencies: # the parent directory to use the current plugin's version. path: ../ + # Flutter + flutter: + sdk: flutter + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 dev_dependencies: + # Flutter + flutter_lints: ^1.0.4 flutter_test: sdk: flutter diff --git a/lib/details/models/audio_model.dart b/lib/details/models/audio_model.dart new file mode 100644 index 0000000..b8e4b71 --- /dev/null +++ b/lib/details/models/audio_model.dart @@ -0,0 +1,117 @@ +part of on_audio_edit; + +/// [AudioModel] contains all Song Tag/Information. +class AudioModel { + AudioModel(this._info); + + /// The type dynamic is used for both but, the map is always based in [String, dynamic] + final Map _info; + + /// Return song [albumArtist] + String get albumArtist => _info["ALBUM_ARTIST"]; + + /// Return song [artist] + String get artist => _info["ARTIST"]; + + /// Return song [artists] + String get artists => _info["ARTISTS"]; + + /// Return song [beatsPerMinutes] + String get beatsPerMinutes => _info["BEATS_PER_MINUTE"]; + + /// Return song [bitrate] + String get bitrate => _info["BITRATE"]; + + /// Return song [channels] + String get channels => _info["CHANNELS"]; + + /// Return song [composer] + String get composer => _info["COMPOSER"]; + + /// Return song [country] + String get country => _info["COUNTRY"]; + + /// Return song [country] + String get coverArt => _info["COVER_ART"]; + + /// Return song [country] + String get firstArtwork => _info["FIRST_ARTWORK"]; + + /// Return song [format] + String get format => _info["FORMAT"]; + + /// Return song [genre] + String get genre => _info["GENRE"]; + + /// Return song [id] + String get id => _info["ID"]; + + /// Return song [isrc] + String get isrc => _info["ISRC"]; + + /// Return song [key] + String get key => _info["KEY"]; + + /// Return song [language] + String get language => _info["LANGUAGE"]; + + /// Return song [length] + String get length => _info["LENGTH"]; + + /// Return song [lyrics] + String get lyrics => _info["LYRICS"]; + + /// Return song [originalAlbum] + String get originalAlbum => _info["ORIGINAL_ALBUM"]; + + /// Return song [originalAlbum] + String get originalArtist => _info["ORIGINAL_ARTIST"]; + + /// Return song [originalLyricist] + String get originalLyricist => _info["ORIGINAL_LYRICIST"]; + + /// Return song [originalYear] + String get originalYear => _info["ORIGINAL_YEAR"]; + + /// Return song [producer] + String get producer => _info["PRODUCER"]; + + /// Return song [quality] + String get quality => _info["QUALITY"]; + + /// Return song [rating] + String get rating => _info["RATING"]; + + /// Return song [recordLabel] + String get recordLabel => _info["RECORD_LABEL"]; + + /// Return song [sampleRate] + String get sampleRate => _info["SAMPLE_RATE"]; + + /// Return song [subTitle] + String get subTitle => _info["SUBTITLE"]; + + /// Return song [tags] + String get tags => _info["TAGS"]; + + /// Return song [tempo] + String get tempo => _info["TEMPO"]; + + /// Return song [title] + String get title => _info["TITLE"]; + + /// Return song [track] + String get track => _info["TRACK"]; + + /// Return song [type] + String get type => _info["TYPE"]; + + /// Return song [year] + String get year => _info["YEAR"]; + + /// Return a map with all [keys] and [values] from specific song. + Map get getMap => _info; + + @override + String toString() => _info.toString(); +} diff --git a/lib/details/models/audios_model.dart b/lib/details/models/audios_model.dart index 63d7e1e..cb0275f 100644 --- a/lib/details/models/audios_model.dart +++ b/lib/details/models/audios_model.dart @@ -1,11 +1,12 @@ part of on_audio_edit; -/// [AudiosTagModel] contains all Songs Tags. +// Deprecated after [1.1.0] +@Deprecated('Use [AudioModel] instead.') class AudiosTagModel { AudiosTagModel(this._info); /// The type dynamic is used for both but, the map is always based in [String, dynamic] - Map _info; + final Map _info; /// Return song [albumArtist] String get albumArtist => _info["ALBUM_ARTIST"]; diff --git a/lib/details/on_audio_edit_controller.dart b/lib/details/on_audio_edit_controller.dart index 94e5136..0e48356 100644 --- a/lib/details/on_audio_edit_controller.dart +++ b/lib/details/on_audio_edit_controller.dart @@ -1,10 +1,15 @@ /* +============= Author: Lucas Josino Github: https://github.com/LucasPJS -Plugin: on_audio_edit +Website: https://lucasjosino.com/ +============= +Plugin/Id: on_audio_edit#3 Homepage: https://github.com/LucasPJS/on_audio_edit -Copyright: © 2021, Lucas Josino. All rights reserved. +Pub: https://pub.dev/packages/on_audio_edit License: https://github.com/LucasPJS/on_audio_edit/blob/main/LICENSE +Copyright: © 2021, Lucas Josino. All rights reserved. +============= */ part of on_audio_edit; @@ -12,8 +17,8 @@ part of on_audio_edit; ///Interface and Main method for use on_audio_edit class OnAudioEdit { //Dart <-> Kotlin communication - static const String _CHANNEL_ID = "com.lucasjosino.on_audio_edit"; - static const MethodChannel _channel = const MethodChannel(_CHANNEL_ID); + static const String channelId = "com.lucasjosino.on_audio_edit"; + static const MethodChannel _channel = MethodChannel(channelId); /// Used to return unique song info. /// @@ -91,12 +96,12 @@ class OnAudioEdit { /// * Calling any method without [READ] and [WRITE] permission will throw a error. /// Use [permissionsStatus] to see permissions status. /// * Most audios have no information other than the [title] and [artist]. - Future> readAudios(List data) async { + Future> readAudios(List data) async { final List resultReadAudio = await _channel.invokeMethod("readAudios", { "data": data, }); - return resultReadAudio.map((e) => AudiosTagModel(e)).toList(); + return resultReadAudio.map((e) => AudioModel(e)).toList(); } /// Used to return unique song tag. @@ -159,9 +164,9 @@ class OnAudioEdit { Future> readSpecificsAudioTags( String data, List tags) async { List tagsIndex = []; - tags.forEach((it) { + for (var it in tags) { tagsIndex.add(it.index); - }); + } final Map readSpecificsAudioTags = await _channel.invokeMethod("readSpecificsAudioTags", { "data": data, @@ -258,13 +263,13 @@ class OnAudioEdit { Future editAudios( List data, List> tags) async { List> finalList = []; - tags.forEach((it1) { + for (var it1 in tags) { Map finalTags = {}; it1.forEach((key, value) { finalTags[key.index] = value; }); finalList.add(finalTags); - }); + } final bool resultEditAudios = await _channel.invokeMethod("editAudios", { "data": data, "tags": finalList, diff --git a/lib/details/types/artwork_type.dart b/lib/details/types/artwork_type.dart index 152999e..1249dc8 100644 --- a/lib/details/types/artwork_type.dart +++ b/lib/details/types/artwork_type.dart @@ -1,3 +1,5 @@ +// ignore_for_file: constant_identifier_names + part of on_audio_edit; /// Defines the type of image. diff --git a/lib/details/types/tag_type.dart b/lib/details/types/tag_type.dart index a0ef560..ce8659e 100644 --- a/lib/details/types/tag_type.dart +++ b/lib/details/types/tag_type.dart @@ -1,3 +1,5 @@ +// ignore_for_file: constant_identifier_names + part of on_audio_edit; /// All the songs tags type. diff --git a/lib/on_audio_edit.dart b/lib/on_audio_edit.dart index 5551b23..4c2f9db 100644 --- a/lib/on_audio_edit.dart +++ b/lib/on_audio_edit.dart @@ -1,3 +1,17 @@ +/* +============= +Author: Lucas Josino +Github: https://github.com/LucasPJS +Website: https://lucasjosino.com/ +============= +Plugin/Id: on_audio_edit#3 +Homepage: https://github.com/LucasPJS/on_audio_edit +Pub: https://pub.dev/packages/on_audio_edit +License: https://github.com/LucasPJS/on_audio_edit/blob/main/LICENSE +Copyright: © 2021, Lucas Josino. All rights reserved. +============= +*/ + library on_audio_edit; //Dart/Flutter @@ -13,3 +27,4 @@ part 'details/types/artwork_type.dart'; // Models part 'details/models/audios_model.dart'; +part 'details/models/audio_model.dart'; diff --git a/pubspec.yaml b/pubspec.yaml index 4ce301f..629c5a8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,19 +1,25 @@ name: on_audio_edit description: Flutter Plugin used to edit and read audios/songs infos/tags [Mp3, OggVorbis, Wav, etc...]. -version: 1.0.2 -# https://github.com/LucasPJS -# author: Lucas Josino +version: 1.1.0 homepage: https://github.com/LucasPJS/on_audio_edit +# pub.dev: https://pub.dev/packages/on_audio_query +# ======== +# author: Lucas Josino +# github: https://github.com/LucasPJS +# website: https://lucasjosino.com/ environment: sdk: '>=2.12.0 <3.0.0' flutter: ">=1.20.0" dependencies: + # Flutter flutter: sdk: flutter dev_dependencies: + # Flutter + flutter_lints: ^1.0.4 flutter_test: sdk: flutter @@ -24,5 +30,5 @@ flutter: android: package: com.lucasjosino.on_audio_edit pluginClass: OnAudioEditPlugin - ios: - pluginClass: OnAudioEditPlugin \ No newline at end of file +# ios: +# pluginClass: OnAudioEditPlugin \ No newline at end of file