├── android ├── settings.gradle ├── gradle.properties ├── .gitignore ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── juliusgithaiga │ │ └── flutter_sms_inbox │ │ ├── SmsQueryRequest.java │ │ ├── SmsQuery.java │ │ ├── FlutterSmsInboxPlugin.java │ │ └── SmsQueryHandler.java ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── build.gradle ├── example ├── ios │ ├── Runner │ │ ├── Runner-Bridging-Header.h │ │ ├── Assets.xcassets │ │ │ ├── LaunchImage.imageset │ │ │ │ ├── LaunchImage.png │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ ├── README.md │ │ │ │ └── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ │ └── Contents.json │ │ ├── AppDelegate.swift │ │ ├── Base.lproj │ │ │ ├── Main.storyboard │ │ │ └── LaunchScreen.storyboard │ │ └── Info.plist │ ├── Flutter │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ └── AppFrameworkInfo.plist │ ├── Runner.xcodeproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── xcshareddata │ │ │ └── xcschemes │ │ │ │ └── Runner.xcscheme │ │ └── project.pbxproj │ ├── Runner.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ └── IDEWorkspaceChecks.plist │ ├── .gitignore │ └── Podfile ├── android │ ├── gradle.properties │ ├── app │ │ ├── src │ │ │ ├── main │ │ │ │ ├── res │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── drawable │ │ │ │ │ │ └── launch_background.xml │ │ │ │ │ ├── drawable-v21 │ │ │ │ │ │ └── launch_background.xml │ │ │ │ │ ├── values │ │ │ │ │ │ └── styles.xml │ │ │ │ │ └── values-night │ │ │ │ │ │ └── styles.xml │ │ │ │ ├── java │ │ │ │ │ └── com │ │ │ │ │ │ └── juliusgithaiga │ │ │ │ │ │ └── flutter_sms_inbox_example │ │ │ │ │ │ └── MainActivity.java │ │ │ │ └── AndroidManifest.xml │ │ │ ├── debug │ │ │ │ └── AndroidManifest.xml │ │ │ └── profile │ │ │ │ └── AndroidManifest.xml │ │ └── build.gradle │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ ├── .gitignore │ ├── build.gradle │ └── settings.gradle ├── .metadata ├── README.md ├── .gitignore ├── test │ └── widget_test.dart ├── analysis_options.yaml ├── lib │ └── main.dart ├── pubspec.yaml └── pubspec.lock ├── .github ├── dependabot.yaml └── workflows │ └── build.yml ├── analysis_options.yaml ├── lib ├── src │ ├── enums.dart │ ├── sms.message.dart │ └── sms.query.dart └── flutter_sms_inbox.dart ├── .metadata ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── test ├── flutter_sms_inbox_test.dart └── flutter_sms_inbox_test.mocks.dart ├── README.md ├── pubspec.yaml └── pubspec.lock /android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'flutter_sms_inbox' 2 | -------------------------------------------------------------------------------- /example/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /example/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | -------------------------------------------------------------------------------- /example/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /example/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /.github/dependabot.yaml: -------------------------------------------------------------------------------- 1 | version: 2 2 | enable-beta-ecosystems: true 3 | updates: 4 | - package-ecosystem: "pub" 5 | directory: "/" 6 | schedule: 7 | interval: "weekly" 8 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:flutter_lints/flutter.yaml 2 | 3 | # Additional information about this file can be found at 4 | # https://dart.dev/guides/language/analysis-options 5 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jgithaiga/flutter_sms_inbox/HEAD/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /example/android/app/src/main/java/com/juliusgithaiga/flutter_sms_inbox_example/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.juliusgithaiga.flutter_sms_inbox_example; 2 | 3 | import io.flutter.embedding.android.FlutterActivity; 4 | 5 | public class MainActivity extends FlutterActivity { 6 | } 7 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip 4 | validateDistributionUrl=true 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /lib/src/enums.dart: -------------------------------------------------------------------------------- 1 | part of flutter_sms_inbox; 2 | 3 | enum SmsMessageState { 4 | sending, 5 | sent, 6 | delivered, 7 | fail, 8 | none, 9 | } 10 | 11 | enum SmsMessageKind { 12 | sent, 13 | received, 14 | draft, 15 | } 16 | 17 | enum SmsQueryKind { inbox, sent, draft } 18 | -------------------------------------------------------------------------------- /example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 18116933e77adc82f80866c928266a5b4f1ed645 8 | channel: stable 9 | 10 | project_type: plugin 11 | -------------------------------------------------------------------------------- /example/.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 18116933e77adc82f80866c928266a5b4f1ed645 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /example/android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /example/android/build.gradle: -------------------------------------------------------------------------------- 1 | allprojects { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | } 6 | } 7 | 8 | rootProject.buildDir = '../build' 9 | subprojects { 10 | project.buildDir = "${rootProject.buildDir}/${project.name}" 11 | project.evaluationDependsOn(':app') 12 | } 13 | 14 | tasks.register("clean", Delete) { 15 | delete rootProject.buildDir 16 | } 17 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You 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. -------------------------------------------------------------------------------- /example/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # IntelliJ related 2 | *.iml 3 | *.ipr 4 | *.iws 5 | .idea/ 6 | 7 | # Flutter/Dart/Pub related 8 | **/doc/api/ 9 | .dart_tool/ 10 | .flutter-plugins 11 | .flutter-plugins-dependencies 12 | .packages 13 | .pub-cache/ 14 | .pub/ 15 | build/ 16 | 17 | # Miscellaneous 18 | *.class 19 | *.log 20 | *.pyc 21 | *.swp 22 | .DS_Store 23 | .atom/ 24 | .buildlog/ 25 | .history 26 | .svn/ 27 | coverage/ 28 | 29 | example/.flutter-plugins-dependencies 30 | -------------------------------------------------------------------------------- /example/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lib/flutter_sms_inbox.dart: -------------------------------------------------------------------------------- 1 | library flutter_sms_inbox; 2 | 3 | import 'dart:async'; 4 | import 'package:flutter/services.dart'; 5 | 6 | part 'src/enums.dart'; 7 | part 'src/sms.message.dart'; 8 | part 'src/sms.query.dart'; 9 | 10 | class FlutterSmsInbox { 11 | static const MethodChannel _channel = MethodChannel('flutter_sms_inbox'); 12 | 13 | static Future get platformVersion async { 14 | final String? version = await _channel.invokeMethod('getPlatformVersion'); 15 | return version; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /android/src/main/java/com/juliusgithaiga/flutter_sms_inbox/SmsQueryRequest.java: -------------------------------------------------------------------------------- 1 | package com.juliusgithaiga.flutter_sms_inbox; 2 | 3 | import android.net.Uri; 4 | 5 | public enum SmsQueryRequest { 6 | Inbox, 7 | Sent, 8 | Draft; 9 | 10 | Uri toUri() { 11 | if (this == Inbox) { 12 | return Uri.parse("content://sms/inbox"); 13 | } else if (this == Sent) { 14 | return Uri.parse("content://sms/sent"); 15 | } else { 16 | return Uri.parse("content://sms/draft"); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | # flutter_sms_inbox_example 2 | 3 | Demonstrates how to use the flutter_sms_inbox plugin. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) 13 | 14 | For help getting started with Flutter, view our 15 | [online documentation](https://flutter.dev/docs), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 1.0.4 2 | * Bump Android Gradle Plugin to 8.3.1 3 | * Bump minimum supported Android SDK to 19 4 | * Update the example app 5 | 6 | PR from https://github.com/Sahad2701 7 | * Migrated to FlutterPlugin using onAttachedToEngine 8 | * Removed deprecated PluginRegistry.Registrar usage 9 | * Preserved existing functionality with method channels 10 | 11 | ## 1.0.3 12 | * Added support for AGP 8.0 13 | * Update plugin test cases 14 | 15 | ## 1.0.2 16 | * Remove iOS platform 17 | * Update description and fix lint errors 18 | 19 | ## 1.0.1 20 | * Added `Null Safety` support 21 | * Update example app 22 | 23 | ## 0.0.1 24 | * TODO: Describe initial release. 25 | -------------------------------------------------------------------------------- /example/ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /example/android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | def flutterSdkPath = { 3 | def properties = new Properties() 4 | file("local.properties").withInputStream { properties.load(it) } 5 | def flutterSdkPath = properties.getProperty("flutter.sdk") 6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 7 | return flutterSdkPath 8 | }() 9 | 10 | includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") 11 | 12 | repositories { 13 | google() 14 | mavenCentral() 15 | gradlePluginPortal() 16 | } 17 | } 18 | 19 | plugins { 20 | id "dev.flutter.flutter-plugin-loader" version "1.0.0" 21 | id "com.android.application" version "8.3.1" apply false 22 | } 23 | 24 | include ":app" 25 | -------------------------------------------------------------------------------- /example/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 9.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 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 | **/ios/Flutter/.last_build_id 26 | .dart_tool/ 27 | .flutter-plugins 28 | .flutter-plugins-dependencies 29 | .packages 30 | .pub-cache/ 31 | .pub/ 32 | /build/ 33 | 34 | # Web related 35 | lib/generated_plugin_registrant.dart 36 | 37 | # Symbolication related 38 | app.*.symbols 39 | 40 | # Obfuscation related 41 | app.*.map.json 42 | 43 | # Android Studio will place build artifacts here 44 | /android/app/debug 45 | /android/app/profile 46 | /android/app/release 47 | 48 | /android/app/.cxx/ 49 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | group 'com.juliusgithaiga.flutter_sms_inbox' 2 | version '1.0-SNAPSHOT' 3 | 4 | buildscript { 5 | repositories { 6 | google() 7 | mavenCentral() 8 | } 9 | 10 | dependencies { 11 | classpath 'com.android.tools.build:gradle:8.3.1' 12 | } 13 | } 14 | 15 | rootProject.allprojects { 16 | repositories { 17 | google() 18 | mavenCentral() 19 | } 20 | } 21 | 22 | apply plugin: 'com.android.library' 23 | 24 | android { 25 | // Conditional for compatibility with AGP <4.2. 26 | if (project.android.hasProperty("namespace")) { 27 | namespace 'com.juliusgithaiga.flutter_sms_inbox' 28 | } 29 | 30 | compileSdkVersion 34 31 | 32 | compileOptions { 33 | sourceCompatibility JavaVersion.VERSION_1_8 34 | targetCompatibility JavaVersion.VERSION_1_8 35 | } 36 | 37 | defaultConfig { 38 | minSdkVersion 19 39 | } 40 | 41 | lintOptions { 42 | disable 'InvalidPackage' 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /example/test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:flutter_sms_inbox_example/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Verify Platform version', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(const MyApp()); 17 | 18 | // Verify that platform version is retrieved. 19 | expect( 20 | find.byWidgetPredicate( 21 | (Widget widget) => widget is Text && 22 | widget.data!.startsWith('Running on:'), 23 | ), 24 | findsOneWidget, 25 | ); 26 | }); 27 | } 28 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2019, Julius Githaiga. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 7 | of the Software, and to permit persons to whom the Software is furnished to do 8 | so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /test/flutter_sms_inbox_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_test/flutter_test.dart'; 2 | import 'package:flutter_sms_inbox/flutter_sms_inbox.dart'; 3 | 4 | import 'package:mockito/annotations.dart'; 5 | import 'package:mockito/mockito.dart'; 6 | 7 | import 'flutter_sms_inbox_test.mocks.dart'; 8 | 9 | @GenerateNiceMocks([MockSpec()]) 10 | // import 'sms.query.mocks.dart'; 11 | 12 | void main() { 13 | TestWidgetsFlutterBinding.ensureInitialized(); 14 | 15 | final mockSmsQuery = MockSmsQuery(); 16 | SmsQuery.instance = mockSmsQuery; 17 | final SmsQuery smsQuery = SmsQuery(); 18 | 19 | tearDown(resetMockitoState); 20 | 21 | test('getAllSms should call the underlying instance', () async { 22 | when(smsQuery.getAllSms).thenAnswer((_) async => Future.value([])); 23 | 24 | await smsQuery.getAllSms; 25 | verify(smsQuery.getAllSms).called(1); 26 | }); 27 | 28 | test('querySms should call the underlying instance', () async { 29 | when(smsQuery.querySms()).thenAnswer((_) async => Future.value([])); 30 | 31 | await smsQuery.querySms(); 32 | verify(smsQuery.querySms()).called(1); 33 | }); 34 | } 35 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | pull_request: 5 | paths-ignore: 6 | - "**.md" 7 | push: 8 | branches: 9 | - master 10 | paths-ignore: 11 | - "**.md" 12 | schedule: 13 | # runs the CI everyday at 10AM 14 | - cron: "0 10 * * *" 15 | 16 | jobs: 17 | flutter: 18 | runs-on: ubuntu-latest 19 | 20 | strategy: 21 | matrix: 22 | channel: 23 | - master 24 | 25 | steps: 26 | - uses: actions/checkout@v3.1.0 27 | 28 | - uses: subosito/flutter-action@v2.7.1 29 | with: 30 | channel: ${{ matrix.channel }} 31 | 32 | - name: Add pub cache bin to PATH 33 | run: echo "$HOME/.pub-cache/bin" >> $GITHUB_PATH 34 | - name: Add pub cache to PATH 35 | run: echo "PUB_CACHE="$HOME/.pub-cache"" >> $GITHUB_ENV 36 | 37 | - name: Install dependencies 38 | run: flutter pub get 39 | 40 | - run: dart format lib test --set-exit-if-changed 41 | if: matrix.channel == 'master' 42 | 43 | - run: flutter analyze --no-current-package 44 | 45 | - run: flutter test --no-pub --coverage test -------------------------------------------------------------------------------- /example/ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def flutter_root 14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) 15 | unless File.exist?(generated_xcode_build_settings_path) 16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" 17 | end 18 | 19 | File.foreach(generated_xcode_build_settings_path) do |line| 20 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 21 | return matches[1].strip if matches 22 | end 23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" 24 | end 25 | 26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 27 | 28 | flutter_ios_podfile_setup 29 | 30 | target 'Runner' do 31 | use_frameworks! 32 | use_modular_headers! 33 | 34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 35 | end 36 | 37 | post_install do |installer| 38 | installer.pods_project.targets.each do |target| 39 | flutter_additional_ios_build_settings(target) 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /example/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at 17 | # https://dart-lang.github.io/linter/lints/index.html. 18 | # 19 | # Instead of disabling a lint rule for the entire project in the 20 | # section below, it can also be suppressed for a single line of code 21 | # or a specific dart file by using the `// ignore: name_of_lint` and 22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 23 | # producing the lint. 24 | rules: 25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 27 | 28 | # Additional information about this file can be found at 29 | # https://dart.dev/guides/language/analysis-options 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Flutter SMS Inbox 2 | 3 | [![pub package](https://img.shields.io/pub/v/flutter_sms_inbox.svg)](https://pub.dev/packages/flutter_sms_inbox) 4 | [![pub points](https://img.shields.io/pub/points/flutter_sms_inbox?color=2E8B57&label=pub%20points)](https://pub.dev/packages/flutter_sms_inbox/score) 5 | 6 | Flutter android SMS inbox library based on [Flutter SMS](https://github.com/babariviere/flutter_sms). 7 | 8 | ### Dependencies 9 | 10 | This package in turn uses the permission handler package for permission handling, [Permission Handler](https://pub.dev/packages/permission_handler). 11 | 12 | You need to add it to your project: 13 | 14 | ``` 15 | dependencies: 16 | permission_handler: ^10.2.0 17 | ``` 18 | 19 | ## Querying SMS messages 20 | 21 | Add the import statement for sms and create an instance of the SmsQuery class: 22 | 23 | ``` 24 | import 'package:flutter_sms_inbox/flutter_sms_inbox.dart'; 25 | 26 | void main() { 27 | SmsQuery query = SmsQuery(); 28 | } 29 | ``` 30 | 31 | ## Getting all SMS messages 32 | 33 | `List messages = await query.getAllSms;` 34 | 35 | ## Filtering SMS messages 36 | The method `querySms` from the `SmsQuery` class returns a list of sms depending of the supplied parameters. For example, for querying all the sms messages sent and received write the followed code: 37 | 38 | ``` 39 | await query.querySms( 40 | kinds: [SmsQueryKind.inbox, SmsQueryKind.sent], 41 | ); 42 | ``` 43 | You can also query all the sms messages sent and received from a specific contact: 44 | 45 | ``` 46 | await query.querySms( 47 | address: getContactAddress() 48 | ); 49 | ``` 50 | -------------------------------------------------------------------------------- /example/ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | flutter_sms_inbox_example 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /example/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id "com.android.application" 3 | id "dev.flutter.flutter-gradle-plugin" 4 | } 5 | 6 | def localProperties = new Properties() 7 | def localPropertiesFile = rootProject.file('local.properties') 8 | if (localPropertiesFile.exists()) { 9 | localPropertiesFile.withReader('UTF-8') { reader -> 10 | localProperties.load(reader) 11 | } 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | android { 25 | compileSdkVersion flutter.compileSdkVersion 26 | 27 | compileOptions { 28 | sourceCompatibility JavaVersion.VERSION_1_8 29 | targetCompatibility JavaVersion.VERSION_1_8 30 | } 31 | 32 | defaultConfig { 33 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 34 | applicationId "com.juliusgithaiga.flutter_sms_inbox_example" 35 | minSdkVersion flutter.minSdkVersion 36 | targetSdkVersion flutter.targetSdkVersion 37 | versionCode flutterVersionCode.toInteger() 38 | versionName flutterVersionName 39 | } 40 | 41 | buildTypes { 42 | release { 43 | // TODO: Add your own signing config for the release build. 44 | // Signing with the debug keys for now, so `flutter run --release` works. 45 | signingConfig signingConfigs.debug 46 | } 47 | } 48 | 49 | namespace "com.juliusgithaiga.flutter_sms_inbox_example" 50 | } 51 | 52 | flutter { 53 | source '../..' 54 | } 55 | -------------------------------------------------------------------------------- /example/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 9 | 17 | 21 | 25 | 26 | 27 | 28 | 29 | 30 | 32 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /android/src/main/java/com/juliusgithaiga/flutter_sms_inbox/SmsQuery.java: -------------------------------------------------------------------------------- 1 | package com.juliusgithaiga.flutter_sms_inbox; 2 | 3 | import android.content.Context; 4 | import androidx.annotation.NonNull; 5 | import io.flutter.plugin.common.MethodCall; 6 | import io.flutter.plugin.common.MethodChannel; 7 | 8 | public class SmsQuery implements MethodChannel.MethodCallHandler { 9 | 10 | private final Context applicationContext; 11 | 12 | SmsQuery(Context applicationContext) { 13 | this.applicationContext = applicationContext; 14 | } 15 | 16 | @Override 17 | public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) { 18 | int start = 0; 19 | int count = -1; 20 | int threadId = -1; 21 | String address = null; 22 | SmsQueryRequest request; 23 | switch (call.method) { 24 | case "getInbox": 25 | request = SmsQueryRequest.Inbox; 26 | break; 27 | case "getSent": 28 | request = SmsQueryRequest.Sent; 29 | break; 30 | case "getDraft": 31 | request = SmsQueryRequest.Draft; 32 | break; 33 | default: 34 | result.notImplemented(); 35 | return; 36 | } 37 | 38 | if (call.hasArgument("start")) { 39 | start = call.argument("start"); 40 | } 41 | if (call.hasArgument("count")) { 42 | count = call.argument("count"); 43 | } 44 | if (call.hasArgument("thread_id")) { 45 | threadId = call.argument("thread_id"); 46 | } 47 | if (call.hasArgument("address")) { 48 | address = call.argument("address"); 49 | } 50 | 51 | SmsQueryHandler smsQueryHandler = new SmsQueryHandler( 52 | this.applicationContext, result, request, start, count, threadId, address); 53 | smsQueryHandler.handle(); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /android/src/main/java/com/juliusgithaiga/flutter_sms_inbox/FlutterSmsInboxPlugin.java: -------------------------------------------------------------------------------- 1 | package com.juliusgithaiga.flutter_sms_inbox; 2 | 3 | import android.content.Context; 4 | import androidx.annotation.NonNull; 5 | import io.flutter.embedding.engine.plugins.FlutterPlugin; 6 | import io.flutter.plugin.common.BinaryMessenger; 7 | import io.flutter.plugin.common.JSONMethodCodec; 8 | import io.flutter.plugin.common.MethodCall; 9 | import io.flutter.plugin.common.MethodChannel; 10 | import io.flutter.plugin.common.MethodChannel.MethodCallHandler; 11 | import io.flutter.plugin.common.MethodChannel.Result; 12 | 13 | /** FlutterSmsInboxPlugin */ 14 | public class FlutterSmsInboxPlugin implements FlutterPlugin, MethodCallHandler { 15 | private static final String CHANNEL_QUERY = "plugins.juliusgithaiga.com/querySMS"; 16 | 17 | private MethodChannel methodChannel; 18 | private MethodChannel querySmsChannel; 19 | 20 | @Override 21 | public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { 22 | onAttachedToEngine(binding.getApplicationContext(), binding.getBinaryMessenger()); 23 | } 24 | 25 | private void onAttachedToEngine(Context appContext, BinaryMessenger messenger) { 26 | methodChannel = new MethodChannel(messenger, "flutter_sms_inbox"); 27 | methodChannel.setMethodCallHandler(this); 28 | 29 | querySmsChannel = new MethodChannel(messenger, CHANNEL_QUERY, JSONMethodCodec.INSTANCE); 30 | querySmsChannel.setMethodCallHandler(new SmsQuery(appContext)); 31 | } 32 | 33 | @Override 34 | public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { 35 | if (methodChannel != null) { 36 | methodChannel.setMethodCallHandler(null); 37 | methodChannel = null; 38 | } 39 | 40 | if (querySmsChannel != null) { 41 | querySmsChannel.setMethodCallHandler(null); 42 | querySmsChannel = null; 43 | } 44 | } 45 | 46 | @Override 47 | public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { 48 | if (call.method.equals("getPlatformVersion")) { 49 | result.success("Android " + android.os.Build.VERSION.RELEASE); 50 | } else { 51 | result.notImplemented(); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /test/flutter_sms_inbox_test.mocks.dart: -------------------------------------------------------------------------------- 1 | // Mocks generated by Mockito 5.4.0 from annotations 2 | // in flutter_sms_inbox/test/flutter_sms_inbox_test.dart. 3 | // Do not manually edit this file. 4 | 5 | // ignore_for_file: no_leading_underscores_for_library_prefixes 6 | import 'dart:async' as _i3; 7 | 8 | import 'package:flutter_sms_inbox/flutter_sms_inbox.dart' as _i2; 9 | import 'package:mockito/mockito.dart' as _i1; 10 | 11 | // ignore_for_file: type=lint 12 | // ignore_for_file: avoid_redundant_argument_values 13 | // ignore_for_file: avoid_setters_without_getters 14 | // ignore_for_file: comment_references 15 | // ignore_for_file: implementation_imports 16 | // ignore_for_file: invalid_use_of_visible_for_testing_member 17 | // ignore_for_file: prefer_const_constructors 18 | // ignore_for_file: unnecessary_parenthesis 19 | // ignore_for_file: camel_case_types 20 | // ignore_for_file: subtype_of_sealed_class 21 | 22 | /// A class which mocks [SmsQuery]. 23 | /// 24 | /// See the documentation for Mockito's code generation for more information. 25 | class MockSmsQuery extends _i1.Mock implements _i2.SmsQuery { 26 | @override 27 | _i3.Future> get getAllSms => (super.noSuchMethod( 28 | Invocation.getter(#getAllSms), 29 | returnValue: _i3.Future>.value(<_i2.SmsMessage>[]), 30 | returnValueForMissingStub: 31 | _i3.Future>.value(<_i2.SmsMessage>[]), 32 | ) as _i3.Future>); 33 | @override 34 | _i3.Future> querySms({ 35 | int? start, 36 | int? count, 37 | String? address, 38 | int? threadId, 39 | List<_i2.SmsQueryKind>? kinds = const [_i2.SmsQueryKind.inbox], 40 | bool? sort = false, 41 | }) => 42 | (super.noSuchMethod( 43 | Invocation.method( 44 | #querySms, 45 | [], 46 | { 47 | #start: start, 48 | #count: count, 49 | #address: address, 50 | #threadId: threadId, 51 | #kinds: kinds, 52 | #sort: sort, 53 | }, 54 | ), 55 | returnValue: _i3.Future>.value(<_i2.SmsMessage>[]), 56 | returnValueForMissingStub: 57 | _i3.Future>.value(<_i2.SmsMessage>[]), 58 | ) as _i3.Future>); 59 | } 60 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_sms_inbox 2 | description: Flutter SMS Inbox Plugin (Android only). This library allows users to easily query inbox messages. 3 | homepage: https://github.com/jgithaiga/flutter_sms_inbox 4 | version: 1.0.4 5 | 6 | environment: 7 | sdk: ">=2.12.0 <4.0.0" 8 | flutter: ">=1.20.0" 9 | 10 | dependencies: 11 | flutter: 12 | sdk: flutter 13 | 14 | dev_dependencies: 15 | build_runner: ^2.4.15 16 | flutter_lints: ^5.0.0 17 | flutter_test: 18 | sdk: flutter 19 | mockito: ^5.4.0 20 | test: ^1.16.5 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 | android: 34 | package: com.juliusgithaiga.flutter_sms_inbox 35 | pluginClass: FlutterSmsInboxPlugin 36 | 37 | # To add assets to your plugin package, add an assets section, like this: 38 | # assets: 39 | # - images/a_dot_burr.jpeg 40 | # - images/a_dot_ham.jpeg 41 | # 42 | # For details regarding assets in packages, see 43 | # https://flutter.dev/assets-and-images/#from-packages 44 | # 45 | # An image asset can refer to one or more resolution-specific "variants", see 46 | # https://flutter.dev/assets-and-images/#resolution-aware. 47 | 48 | # To add custom fonts to your plugin package, add a fonts section here, 49 | # in this "flutter" section. Each entry in this list should have a 50 | # "family" key with the font family name, and a "fonts" key with a 51 | # list giving the asset and other descriptors for the font. For 52 | # example: 53 | # fonts: 54 | # - family: Schyler 55 | # fonts: 56 | # - asset: fonts/Schyler-Regular.ttf 57 | # - asset: fonts/Schyler-Italic.ttf 58 | # style: italic 59 | # - family: Trajan Pro 60 | # fonts: 61 | # - asset: fonts/TrajanPro.ttf 62 | # - asset: fonts/TrajanPro_Bold.ttf 63 | # weight: 700 64 | # 65 | # For details regarding fonts in packages, see 66 | # https://flutter.dev/custom-fonts/#from-packages 67 | -------------------------------------------------------------------------------- /lib/src/sms.message.dart: -------------------------------------------------------------------------------- 1 | part of flutter_sms_inbox; 2 | 3 | /// Message 4 | class SmsMessage implements Comparable { 5 | int? id; 6 | int? threadId; 7 | String? address; 8 | String? body; 9 | bool? read; 10 | DateTime? date; 11 | int? subId; 12 | DateTime? dateSent; 13 | SmsMessageKind? kind; 14 | SmsMessageState _state = SmsMessageState.none; 15 | final StreamController _stateStreamController = 16 | StreamController(); 17 | 18 | SmsMessage.fromJson(Map data) { 19 | address = data["address"]; 20 | body = data["body"]; 21 | subId = data["sub_id"]; 22 | 23 | if (data.containsKey("_id")) { 24 | id = data["_id"]; 25 | } 26 | if (data.containsKey("thread_id")) { 27 | threadId = data["thread_id"]; 28 | } 29 | if (data.containsKey("read")) { 30 | read = (data["read"].toInt() == 1); 31 | } 32 | if (data.containsKey("kind")) { 33 | kind = data["kind"]; 34 | } 35 | if (data.containsKey("date")) { 36 | date = DateTime.fromMillisecondsSinceEpoch(data["date"]); 37 | } 38 | if (data.containsKey("date_sent")) { 39 | dateSent = DateTime.fromMillisecondsSinceEpoch(data["date_sent"]); 40 | } 41 | } 42 | 43 | /// Convert SMS to map 44 | Map get toMap { 45 | Map data = {}; 46 | if (address != null) { 47 | data["address"] = address; 48 | } 49 | if (body != null) { 50 | data["body"] = body; 51 | } 52 | if (id != null) { 53 | data["_id"] = id; 54 | } 55 | if (subId != null) { 56 | data["sub_id"] = subId; 57 | } 58 | if (threadId != null) { 59 | data["thread_id"] = threadId; 60 | } 61 | if (read != null) { 62 | data["read"] = read; 63 | } 64 | if (date != null) { 65 | data["date"] = date!.millisecondsSinceEpoch; 66 | } 67 | if (dateSent != null) { 68 | data["dateSent"] = dateSent!.millisecondsSinceEpoch; 69 | } 70 | return data; 71 | } 72 | 73 | /// Getters 74 | String? get sender => address; 75 | bool? get isRead => read; 76 | SmsMessageState get state => _state; 77 | Stream get onStateChanged => _stateStreamController.stream; 78 | 79 | /// Setters 80 | set state(SmsMessageState state) { 81 | if (_state != state) { 82 | _state = state; 83 | _stateStreamController.add(state); 84 | } 85 | } 86 | 87 | @override 88 | int compareTo(SmsMessage other) { 89 | return other.id! - id!; 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /example/ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /lib/src/sms.query.dart: -------------------------------------------------------------------------------- 1 | part of flutter_sms_inbox; 2 | 3 | class SmsQuery { 4 | static SmsQuery? instance; 5 | final MethodChannel _channel; 6 | 7 | factory SmsQuery() { 8 | if (instance == null) { 9 | const MethodChannel methodChannel = MethodChannel( 10 | "plugins.juliusgithaiga.com/querySMS", 11 | JSONMethodCodec(), 12 | ); 13 | instance = SmsQuery._private(methodChannel); 14 | } 15 | return instance!; 16 | } 17 | 18 | SmsQuery._private(this._channel); 19 | 20 | /// Wrapper to query one kind at a time 21 | Future> _querySms({ 22 | int? start, 23 | int? count, 24 | String? address, 25 | int? threadId, 26 | SmsQueryKind kind = SmsQueryKind.inbox, 27 | }) async { 28 | Map arguments = {}; 29 | if (start != null && start >= 0) { 30 | arguments["start"] = start; 31 | } 32 | if (count != null && count > 0) { 33 | arguments["count"] = count; 34 | } 35 | if (address != null && address.isNotEmpty) { 36 | arguments["address"] = address; 37 | } 38 | if (threadId != null && threadId >= 0) { 39 | arguments["thread_id"] = threadId; 40 | } 41 | 42 | String function; 43 | SmsMessageKind msgKind; 44 | if (kind == SmsQueryKind.inbox) { 45 | function = "getInbox"; 46 | msgKind = SmsMessageKind.received; 47 | } else if (kind == SmsQueryKind.sent) { 48 | function = "getSent"; 49 | msgKind = SmsMessageKind.sent; 50 | } else { 51 | function = "getDraft"; 52 | msgKind = SmsMessageKind.draft; 53 | } 54 | 55 | var snapshot = await _channel.invokeMethod(function, arguments); 56 | return snapshot.map( 57 | (var data) { 58 | var msg = SmsMessage.fromJson(data); 59 | msg.kind = msgKind; 60 | return msg; 61 | }, 62 | ).toList(); 63 | } 64 | 65 | /// Query a list of SMS 66 | Future> querySms({ 67 | int? start, 68 | int? count, 69 | String? address, 70 | int? threadId, 71 | List kinds = const [SmsQueryKind.inbox], 72 | bool sort = false, 73 | }) async { 74 | List result = []; 75 | for (var kind in kinds) { 76 | result.addAll(await _querySms( 77 | start: start, 78 | count: count, 79 | address: address, 80 | threadId: threadId, 81 | kind: kind, 82 | )); 83 | } 84 | 85 | if (sort == true) { 86 | result.sort((a, b) => a.compareTo(b)); 87 | } 88 | 89 | return (result); 90 | } 91 | 92 | /// Get all SMS 93 | Future> get getAllSms async { 94 | return querySms(kinds: [ 95 | SmsQueryKind.sent, 96 | SmsQueryKind.inbox, 97 | SmsQueryKind.draft, 98 | ]); 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /example/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_sms_inbox/flutter_sms_inbox.dart'; 3 | import 'package:permission_handler/permission_handler.dart'; 4 | 5 | void main() { 6 | runApp(const MyApp()); 7 | } 8 | 9 | class MyApp extends StatefulWidget { 10 | const MyApp({Key? key}) : super(key: key); 11 | 12 | @override 13 | State createState() => _MyAppState(); 14 | } 15 | 16 | class _MyAppState extends State { 17 | final SmsQuery _query = SmsQuery(); 18 | List _messages = []; 19 | 20 | @override 21 | void initState() { 22 | super.initState(); 23 | } 24 | 25 | @override 26 | Widget build(BuildContext context) { 27 | return MaterialApp( 28 | title: 'Flutter SMS Inbox App', 29 | theme: ThemeData( 30 | primarySwatch: Colors.teal, 31 | ), 32 | home: Scaffold( 33 | appBar: AppBar( 34 | title: const Text('SMS Inbox Example'), 35 | ), 36 | body: Container( 37 | padding: const EdgeInsets.all(10.0), 38 | child: _messages.isNotEmpty 39 | ? _MessagesListView( 40 | messages: _messages, 41 | ) 42 | : Center( 43 | child: Text( 44 | 'No messages to show.\n Tap refresh button...', 45 | style: Theme.of(context).textTheme.headlineSmall, 46 | textAlign: TextAlign.center, 47 | ), 48 | ), 49 | ), 50 | floatingActionButton: FloatingActionButton( 51 | onPressed: () async { 52 | var permission = await Permission.sms.status; 53 | if (permission.isGranted) { 54 | final messages = await _query.querySms( 55 | kinds: [ 56 | SmsQueryKind.inbox, 57 | SmsQueryKind.sent, 58 | ], 59 | // address: '+254712345789', 60 | count: 10, 61 | ); 62 | debugPrint('sms inbox messages: ${messages.length}'); 63 | 64 | setState(() => _messages = messages); 65 | } else { 66 | await Permission.sms.request(); 67 | } 68 | }, 69 | child: const Icon(Icons.refresh), 70 | ), 71 | ), 72 | ); 73 | } 74 | } 75 | 76 | class _MessagesListView extends StatelessWidget { 77 | const _MessagesListView({ 78 | Key? key, 79 | required this.messages, 80 | }) : super(key: key); 81 | 82 | final List messages; 83 | 84 | @override 85 | Widget build(BuildContext context) { 86 | return ListView.builder( 87 | shrinkWrap: true, 88 | itemCount: messages.length, 89 | itemBuilder: (BuildContext context, int i) { 90 | var message = messages[i]; 91 | 92 | return ListTile( 93 | title: Text('${message.sender} [${message.date}]'), 94 | subtitle: Text('${message.body}'), 95 | ); 96 | }, 97 | ); 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /android/src/main/java/com/juliusgithaiga/flutter_sms_inbox/SmsQueryHandler.java: -------------------------------------------------------------------------------- 1 | package com.juliusgithaiga.flutter_sms_inbox; 2 | 3 | import android.content.Context; 4 | import android.database.Cursor; 5 | import org.json.JSONException; 6 | import org.json.JSONObject; 7 | import java.util.ArrayList; 8 | import io.flutter.plugin.common.MethodChannel; 9 | 10 | public class SmsQueryHandler { 11 | 12 | private final Context applicationContext; 13 | private final MethodChannel.Result result; 14 | private final SmsQueryRequest request; 15 | private final String address; 16 | private final int threadId; 17 | private int start; 18 | private int count; 19 | 20 | SmsQueryHandler(Context applicationContext, MethodChannel.Result result, SmsQueryRequest request, 21 | int start, int count, int threadId, String address) { 22 | this.applicationContext = applicationContext; 23 | this.result = result; 24 | this.request = request; 25 | this.threadId = threadId; 26 | this.address = address; 27 | this.start = start; 28 | this.count = count; 29 | } 30 | 31 | void handle() { 32 | ArrayList list = new ArrayList<>(); 33 | Cursor cursor = this.applicationContext.getContentResolver().query(this.request.toUri(), null, null, null, null); 34 | if (cursor == null) { 35 | result.error("no_cursor", "flutter_sms_inbox plugin requires cursor to resolve content", null); 36 | return; 37 | } 38 | 39 | if (!cursor.moveToFirst()) { 40 | cursor.close(); 41 | result.success(list); 42 | return; 43 | } 44 | 45 | do { 46 | JSONObject obj = readSms(cursor); 47 | try { 48 | if (threadId >= 0 && obj.getInt("thread_id") != threadId) { 49 | continue; 50 | } 51 | if (address != null && !obj.getString("address").equals(address)) { 52 | continue; 53 | } 54 | } catch (JSONException e) { 55 | e.printStackTrace(); 56 | } 57 | 58 | if (start > 0) { 59 | start--; 60 | continue; 61 | } 62 | list.add(obj); 63 | if (count > 0) { 64 | count--; 65 | } 66 | } while (cursor.moveToNext() && count != 0); 67 | cursor.close(); 68 | result.success(list); 69 | } 70 | 71 | private JSONObject readSms(Cursor cursor) { 72 | JSONObject res = new JSONObject(); 73 | for (int i = 0; i < cursor.getColumnCount(); i++) { 74 | try { 75 | if (cursor.getColumnName(i).equals("address") || cursor.getColumnName(i).equals("body")) { 76 | res.put(cursor.getColumnName(i), cursor.getString(i)); 77 | } else if (cursor.getColumnName(i).equals("date") || cursor.getColumnName(i).equals("date_sent")) { 78 | res.put(cursor.getColumnName(i), cursor.getLong(i)); 79 | } else { 80 | res.put(cursor.getColumnName(i), cursor.getInt(i)); 81 | } 82 | } catch (JSONException e) { 83 | e.printStackTrace(); 84 | } 85 | } 86 | return res; 87 | } 88 | 89 | } 90 | -------------------------------------------------------------------------------- /example/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_sms_inbox_example 2 | description: Demonstrates how to use the flutter_sms_inbox plugin. 3 | 4 | # The following line prevents the package from being accidentally published to 5 | # pub.dev using `flutter pub publish`. This is preferred for private packages. 6 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev 7 | 8 | environment: 9 | sdk: ">=2.12.0 <4.0.0" 10 | 11 | # Dependencies specify other packages that your package needs in order to work. 12 | # To automatically upgrade your package dependencies to the latest versions 13 | # consider running `flutter pub upgrade --major-versions`. Alternatively, 14 | # dependencies can be manually updated by changing the version numbers below to 15 | # the latest version available on pub.dev. To see which dependencies have newer 16 | # versions available, run `flutter pub outdated`. 17 | dependencies: 18 | flutter: 19 | sdk: flutter 20 | 21 | flutter_sms_inbox: 22 | # When depending on this package from a real application you should use: 23 | # flutter_sms_inbox: ^x.y.z 24 | # See https://dart.dev/tools/pub/dependencies#version-constraints 25 | # The example app is bundled with the plugin so we use a path dependency on 26 | # the parent directory to use the current plugin's version. 27 | path: ../ 28 | 29 | # Use to request app permissions 30 | permission_handler: ^11.4.0 31 | 32 | dev_dependencies: 33 | flutter_test: 34 | sdk: flutter 35 | 36 | # The "flutter_lints" package below contains a set of recommended lints to 37 | # encourage good coding practices. The lint set provided by the package is 38 | # activated in the `analysis_options.yaml` file located at the root of your 39 | # package. See that file for information about deactivating specific lint 40 | # rules and activating additional ones. 41 | flutter_lints: ^5.0.0 42 | 43 | # For information on the generic Dart part of this file, see the 44 | # following page: https://dart.dev/tools/pub/pubspec 45 | 46 | # The following section is specific to Flutter. 47 | flutter: 48 | 49 | # The following line ensures that the Material Icons font is 50 | # included with your application, so that you can use the icons in 51 | # the material Icons class. 52 | uses-material-design: true 53 | 54 | # To add assets to your application, add an assets section, like this: 55 | # assets: 56 | # - images/a_dot_burr.jpeg 57 | # - images/a_dot_ham.jpeg 58 | 59 | # An image asset can refer to one or more resolution-specific "variants", see 60 | # https://flutter.dev/assets-and-images/#resolution-aware. 61 | 62 | # For details regarding adding assets from package dependencies, see 63 | # https://flutter.dev/assets-and-images/#from-packages 64 | 65 | # To add custom fonts to your application, add a fonts section here, 66 | # in this "flutter" section. Each entry in this list should have a 67 | # "family" key with the font family name, and a "fonts" key with a 68 | # list giving the asset and other descriptors for the font. For 69 | # example: 70 | # fonts: 71 | # - family: Schyler 72 | # fonts: 73 | # - asset: fonts/Schyler-Regular.ttf 74 | # - asset: fonts/Schyler-Italic.ttf 75 | # style: italic 76 | # - family: Trajan Pro 77 | # fonts: 78 | # - asset: fonts/TrajanPro.ttf 79 | # - asset: fonts/TrajanPro_Bold.ttf 80 | # weight: 700 81 | # 82 | # For details regarding fonts from package dependencies, 83 | # see https://flutter.dev/custom-fonts/#from-packages 84 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /example/pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | async: 5 | dependency: transitive 6 | description: 7 | name: async 8 | sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 9 | url: "https://pub.dev" 10 | source: hosted 11 | version: "2.12.0" 12 | boolean_selector: 13 | dependency: transitive 14 | description: 15 | name: boolean_selector 16 | sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" 17 | url: "https://pub.dev" 18 | source: hosted 19 | version: "2.1.2" 20 | characters: 21 | dependency: transitive 22 | description: 23 | name: characters 24 | sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "1.4.0" 28 | clock: 29 | dependency: transitive 30 | description: 31 | name: clock 32 | sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b 33 | url: "https://pub.dev" 34 | source: hosted 35 | version: "1.1.2" 36 | collection: 37 | dependency: transitive 38 | description: 39 | name: collection 40 | sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" 41 | url: "https://pub.dev" 42 | source: hosted 43 | version: "1.19.1" 44 | fake_async: 45 | dependency: transitive 46 | description: 47 | name: fake_async 48 | sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" 49 | url: "https://pub.dev" 50 | source: hosted 51 | version: "1.3.2" 52 | flutter: 53 | dependency: "direct main" 54 | description: flutter 55 | source: sdk 56 | version: "0.0.0" 57 | flutter_lints: 58 | dependency: "direct dev" 59 | description: 60 | name: flutter_lints 61 | sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" 62 | url: "https://pub.dev" 63 | source: hosted 64 | version: "5.0.0" 65 | flutter_sms_inbox: 66 | dependency: "direct main" 67 | description: 68 | path: ".." 69 | relative: true 70 | source: path 71 | version: "1.0.3" 72 | flutter_test: 73 | dependency: "direct dev" 74 | description: flutter 75 | source: sdk 76 | version: "0.0.0" 77 | flutter_web_plugins: 78 | dependency: transitive 79 | description: flutter 80 | source: sdk 81 | version: "0.0.0" 82 | leak_tracker: 83 | dependency: transitive 84 | description: 85 | name: leak_tracker 86 | sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec 87 | url: "https://pub.dev" 88 | source: hosted 89 | version: "10.0.8" 90 | leak_tracker_flutter_testing: 91 | dependency: transitive 92 | description: 93 | name: leak_tracker_flutter_testing 94 | sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 95 | url: "https://pub.dev" 96 | source: hosted 97 | version: "3.0.9" 98 | leak_tracker_testing: 99 | dependency: transitive 100 | description: 101 | name: leak_tracker_testing 102 | sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" 103 | url: "https://pub.dev" 104 | source: hosted 105 | version: "3.0.1" 106 | lints: 107 | dependency: transitive 108 | description: 109 | name: lints 110 | sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7 111 | url: "https://pub.dev" 112 | source: hosted 113 | version: "5.1.1" 114 | matcher: 115 | dependency: transitive 116 | description: 117 | name: matcher 118 | sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 119 | url: "https://pub.dev" 120 | source: hosted 121 | version: "0.12.17" 122 | material_color_utilities: 123 | dependency: transitive 124 | description: 125 | name: material_color_utilities 126 | sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec 127 | url: "https://pub.dev" 128 | source: hosted 129 | version: "0.11.1" 130 | meta: 131 | dependency: transitive 132 | description: 133 | name: meta 134 | sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c 135 | url: "https://pub.dev" 136 | source: hosted 137 | version: "1.16.0" 138 | path: 139 | dependency: transitive 140 | description: 141 | name: path 142 | sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" 143 | url: "https://pub.dev" 144 | source: hosted 145 | version: "1.9.1" 146 | permission_handler: 147 | dependency: "direct main" 148 | description: 149 | name: permission_handler 150 | sha256: "59adad729136f01ea9e35a48f5d1395e25cba6cea552249ddbe9cf950f5d7849" 151 | url: "https://pub.dev" 152 | source: hosted 153 | version: "11.4.0" 154 | permission_handler_android: 155 | dependency: transitive 156 | description: 157 | name: permission_handler_android 158 | sha256: d3971dcdd76182a0c198c096b5db2f0884b0d4196723d21a866fc4cdea057ebc 159 | url: "https://pub.dev" 160 | source: hosted 161 | version: "12.1.0" 162 | permission_handler_apple: 163 | dependency: transitive 164 | description: 165 | name: permission_handler_apple 166 | sha256: f84a188e79a35c687c132a0a0556c254747a08561e99ab933f12f6ca71ef3c98 167 | url: "https://pub.dev" 168 | source: hosted 169 | version: "9.4.6" 170 | permission_handler_html: 171 | dependency: transitive 172 | description: 173 | name: permission_handler_html 174 | sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24" 175 | url: "https://pub.dev" 176 | source: hosted 177 | version: "0.1.3+5" 178 | permission_handler_platform_interface: 179 | dependency: transitive 180 | description: 181 | name: permission_handler_platform_interface 182 | sha256: eb99b295153abce5d683cac8c02e22faab63e50679b937fa1bf67d58bb282878 183 | url: "https://pub.dev" 184 | source: hosted 185 | version: "4.3.0" 186 | permission_handler_windows: 187 | dependency: transitive 188 | description: 189 | name: permission_handler_windows 190 | sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e" 191 | url: "https://pub.dev" 192 | source: hosted 193 | version: "0.2.1" 194 | plugin_platform_interface: 195 | dependency: transitive 196 | description: 197 | name: plugin_platform_interface 198 | sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" 199 | url: "https://pub.dev" 200 | source: hosted 201 | version: "2.1.8" 202 | sky_engine: 203 | dependency: transitive 204 | description: flutter 205 | source: sdk 206 | version: "0.0.0" 207 | source_span: 208 | dependency: transitive 209 | description: 210 | name: source_span 211 | sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" 212 | url: "https://pub.dev" 213 | source: hosted 214 | version: "1.10.1" 215 | stack_trace: 216 | dependency: transitive 217 | description: 218 | name: stack_trace 219 | sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" 220 | url: "https://pub.dev" 221 | source: hosted 222 | version: "1.12.1" 223 | stream_channel: 224 | dependency: transitive 225 | description: 226 | name: stream_channel 227 | sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" 228 | url: "https://pub.dev" 229 | source: hosted 230 | version: "2.1.4" 231 | string_scanner: 232 | dependency: transitive 233 | description: 234 | name: string_scanner 235 | sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" 236 | url: "https://pub.dev" 237 | source: hosted 238 | version: "1.4.1" 239 | term_glyph: 240 | dependency: transitive 241 | description: 242 | name: term_glyph 243 | sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" 244 | url: "https://pub.dev" 245 | source: hosted 246 | version: "1.2.2" 247 | test_api: 248 | dependency: transitive 249 | description: 250 | name: test_api 251 | sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd 252 | url: "https://pub.dev" 253 | source: hosted 254 | version: "0.7.4" 255 | vector_math: 256 | dependency: transitive 257 | description: 258 | name: vector_math 259 | sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" 260 | url: "https://pub.dev" 261 | source: hosted 262 | version: "2.1.4" 263 | vm_service: 264 | dependency: transitive 265 | description: 266 | name: vm_service 267 | sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" 268 | url: "https://pub.dev" 269 | source: hosted 270 | version: "14.3.1" 271 | web: 272 | dependency: transitive 273 | description: 274 | name: web 275 | sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" 276 | url: "https://pub.dev" 277 | source: hosted 278 | version: "1.1.1" 279 | sdks: 280 | dart: ">=3.7.0-0 <4.0.0" 281 | flutter: ">=3.24.0" 282 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 12 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 13 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 14 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 15 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXCopyFilesBuildPhase section */ 19 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 20 | isa = PBXCopyFilesBuildPhase; 21 | buildActionMask = 2147483647; 22 | dstPath = ""; 23 | dstSubfolderSpec = 10; 24 | files = ( 25 | ); 26 | name = "Embed Frameworks"; 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXCopyFilesBuildPhase section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 33 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 34 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 35 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 36 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 37 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 38 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 39 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 40 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 42 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 43 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 44 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 45 | /* End PBXFileReference section */ 46 | 47 | /* Begin PBXFrameworksBuildPhase section */ 48 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 49 | isa = PBXFrameworksBuildPhase; 50 | buildActionMask = 2147483647; 51 | files = ( 52 | ); 53 | runOnlyForDeploymentPostprocessing = 0; 54 | }; 55 | /* End PBXFrameworksBuildPhase section */ 56 | 57 | /* Begin PBXGroup section */ 58 | 9740EEB11CF90186004384FC /* Flutter */ = { 59 | isa = PBXGroup; 60 | children = ( 61 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 62 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 63 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 64 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 65 | ); 66 | name = Flutter; 67 | sourceTree = ""; 68 | }; 69 | 97C146E51CF9000F007C117D = { 70 | isa = PBXGroup; 71 | children = ( 72 | 9740EEB11CF90186004384FC /* Flutter */, 73 | 97C146F01CF9000F007C117D /* Runner */, 74 | 97C146EF1CF9000F007C117D /* Products */, 75 | ); 76 | sourceTree = ""; 77 | }; 78 | 97C146EF1CF9000F007C117D /* Products */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 97C146EE1CF9000F007C117D /* Runner.app */, 82 | ); 83 | name = Products; 84 | sourceTree = ""; 85 | }; 86 | 97C146F01CF9000F007C117D /* Runner */ = { 87 | isa = PBXGroup; 88 | children = ( 89 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 90 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 91 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 92 | 97C147021CF9000F007C117D /* Info.plist */, 93 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 94 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 95 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 96 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 97 | ); 98 | path = Runner; 99 | sourceTree = ""; 100 | }; 101 | /* End PBXGroup section */ 102 | 103 | /* Begin PBXNativeTarget section */ 104 | 97C146ED1CF9000F007C117D /* Runner */ = { 105 | isa = PBXNativeTarget; 106 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 107 | buildPhases = ( 108 | 9740EEB61CF901F6004384FC /* Run Script */, 109 | 97C146EA1CF9000F007C117D /* Sources */, 110 | 97C146EB1CF9000F007C117D /* Frameworks */, 111 | 97C146EC1CF9000F007C117D /* Resources */, 112 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 113 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 114 | ); 115 | buildRules = ( 116 | ); 117 | dependencies = ( 118 | ); 119 | name = Runner; 120 | productName = Runner; 121 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 122 | productType = "com.apple.product-type.application"; 123 | }; 124 | /* End PBXNativeTarget section */ 125 | 126 | /* Begin PBXProject section */ 127 | 97C146E61CF9000F007C117D /* Project object */ = { 128 | isa = PBXProject; 129 | attributes = { 130 | LastUpgradeCheck = 1020; 131 | ORGANIZATIONNAME = ""; 132 | TargetAttributes = { 133 | 97C146ED1CF9000F007C117D = { 134 | CreatedOnToolsVersion = 7.3.1; 135 | LastSwiftMigration = 1100; 136 | }; 137 | }; 138 | }; 139 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 140 | compatibilityVersion = "Xcode 9.3"; 141 | developmentRegion = en; 142 | hasScannedForEncodings = 0; 143 | knownRegions = ( 144 | en, 145 | Base, 146 | ); 147 | mainGroup = 97C146E51CF9000F007C117D; 148 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 149 | projectDirPath = ""; 150 | projectRoot = ""; 151 | targets = ( 152 | 97C146ED1CF9000F007C117D /* Runner */, 153 | ); 154 | }; 155 | /* End PBXProject section */ 156 | 157 | /* Begin PBXResourcesBuildPhase section */ 158 | 97C146EC1CF9000F007C117D /* Resources */ = { 159 | isa = PBXResourcesBuildPhase; 160 | buildActionMask = 2147483647; 161 | files = ( 162 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 163 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 164 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 165 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 166 | ); 167 | runOnlyForDeploymentPostprocessing = 0; 168 | }; 169 | /* End PBXResourcesBuildPhase section */ 170 | 171 | /* Begin PBXShellScriptBuildPhase section */ 172 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 173 | isa = PBXShellScriptBuildPhase; 174 | buildActionMask = 2147483647; 175 | files = ( 176 | ); 177 | inputPaths = ( 178 | ); 179 | name = "Thin Binary"; 180 | outputPaths = ( 181 | ); 182 | runOnlyForDeploymentPostprocessing = 0; 183 | shellPath = /bin/sh; 184 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; 185 | }; 186 | 9740EEB61CF901F6004384FC /* Run Script */ = { 187 | isa = PBXShellScriptBuildPhase; 188 | buildActionMask = 2147483647; 189 | files = ( 190 | ); 191 | inputPaths = ( 192 | ); 193 | name = "Run Script"; 194 | outputPaths = ( 195 | ); 196 | runOnlyForDeploymentPostprocessing = 0; 197 | shellPath = /bin/sh; 198 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 199 | }; 200 | /* End PBXShellScriptBuildPhase section */ 201 | 202 | /* Begin PBXSourcesBuildPhase section */ 203 | 97C146EA1CF9000F007C117D /* Sources */ = { 204 | isa = PBXSourcesBuildPhase; 205 | buildActionMask = 2147483647; 206 | files = ( 207 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 208 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 209 | ); 210 | runOnlyForDeploymentPostprocessing = 0; 211 | }; 212 | /* End PBXSourcesBuildPhase section */ 213 | 214 | /* Begin PBXVariantGroup section */ 215 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 216 | isa = PBXVariantGroup; 217 | children = ( 218 | 97C146FB1CF9000F007C117D /* Base */, 219 | ); 220 | name = Main.storyboard; 221 | sourceTree = ""; 222 | }; 223 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 224 | isa = PBXVariantGroup; 225 | children = ( 226 | 97C147001CF9000F007C117D /* Base */, 227 | ); 228 | name = LaunchScreen.storyboard; 229 | sourceTree = ""; 230 | }; 231 | /* End PBXVariantGroup section */ 232 | 233 | /* Begin XCBuildConfiguration section */ 234 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 235 | isa = XCBuildConfiguration; 236 | buildSettings = { 237 | ALWAYS_SEARCH_USER_PATHS = NO; 238 | CLANG_ANALYZER_NONNULL = YES; 239 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 240 | CLANG_CXX_LIBRARY = "libc++"; 241 | CLANG_ENABLE_MODULES = YES; 242 | CLANG_ENABLE_OBJC_ARC = YES; 243 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 244 | CLANG_WARN_BOOL_CONVERSION = YES; 245 | CLANG_WARN_COMMA = YES; 246 | CLANG_WARN_CONSTANT_CONVERSION = YES; 247 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 248 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 249 | CLANG_WARN_EMPTY_BODY = YES; 250 | CLANG_WARN_ENUM_CONVERSION = YES; 251 | CLANG_WARN_INFINITE_RECURSION = YES; 252 | CLANG_WARN_INT_CONVERSION = YES; 253 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 254 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 255 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 256 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 257 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 258 | CLANG_WARN_STRICT_PROTOTYPES = YES; 259 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 260 | CLANG_WARN_UNREACHABLE_CODE = YES; 261 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 262 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 263 | COPY_PHASE_STRIP = NO; 264 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 265 | ENABLE_NS_ASSERTIONS = NO; 266 | ENABLE_STRICT_OBJC_MSGSEND = YES; 267 | GCC_C_LANGUAGE_STANDARD = gnu99; 268 | GCC_NO_COMMON_BLOCKS = YES; 269 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 270 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 271 | GCC_WARN_UNDECLARED_SELECTOR = YES; 272 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 273 | GCC_WARN_UNUSED_FUNCTION = YES; 274 | GCC_WARN_UNUSED_VARIABLE = YES; 275 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 276 | MTL_ENABLE_DEBUG_INFO = NO; 277 | SDKROOT = iphoneos; 278 | SUPPORTED_PLATFORMS = iphoneos; 279 | TARGETED_DEVICE_FAMILY = "1,2"; 280 | VALIDATE_PRODUCT = YES; 281 | }; 282 | name = Profile; 283 | }; 284 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 285 | isa = XCBuildConfiguration; 286 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 287 | buildSettings = { 288 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 289 | CLANG_ENABLE_MODULES = YES; 290 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 291 | ENABLE_BITCODE = NO; 292 | INFOPLIST_FILE = Runner/Info.plist; 293 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 294 | PRODUCT_BUNDLE_IDENTIFIER = com.juliusgithaiga.flutterSmsInboxExample; 295 | PRODUCT_NAME = "$(TARGET_NAME)"; 296 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 297 | SWIFT_VERSION = 5.0; 298 | VERSIONING_SYSTEM = "apple-generic"; 299 | }; 300 | name = Profile; 301 | }; 302 | 97C147031CF9000F007C117D /* Debug */ = { 303 | isa = XCBuildConfiguration; 304 | buildSettings = { 305 | ALWAYS_SEARCH_USER_PATHS = NO; 306 | CLANG_ANALYZER_NONNULL = YES; 307 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 308 | CLANG_CXX_LIBRARY = "libc++"; 309 | CLANG_ENABLE_MODULES = YES; 310 | CLANG_ENABLE_OBJC_ARC = YES; 311 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 312 | CLANG_WARN_BOOL_CONVERSION = YES; 313 | CLANG_WARN_COMMA = YES; 314 | CLANG_WARN_CONSTANT_CONVERSION = YES; 315 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 316 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 317 | CLANG_WARN_EMPTY_BODY = YES; 318 | CLANG_WARN_ENUM_CONVERSION = YES; 319 | CLANG_WARN_INFINITE_RECURSION = YES; 320 | CLANG_WARN_INT_CONVERSION = YES; 321 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 322 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 323 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 324 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 325 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 326 | CLANG_WARN_STRICT_PROTOTYPES = YES; 327 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 328 | CLANG_WARN_UNREACHABLE_CODE = YES; 329 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 330 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 331 | COPY_PHASE_STRIP = NO; 332 | DEBUG_INFORMATION_FORMAT = dwarf; 333 | ENABLE_STRICT_OBJC_MSGSEND = YES; 334 | ENABLE_TESTABILITY = YES; 335 | GCC_C_LANGUAGE_STANDARD = gnu99; 336 | GCC_DYNAMIC_NO_PIC = NO; 337 | GCC_NO_COMMON_BLOCKS = YES; 338 | GCC_OPTIMIZATION_LEVEL = 0; 339 | GCC_PREPROCESSOR_DEFINITIONS = ( 340 | "DEBUG=1", 341 | "$(inherited)", 342 | ); 343 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 344 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 345 | GCC_WARN_UNDECLARED_SELECTOR = YES; 346 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 347 | GCC_WARN_UNUSED_FUNCTION = YES; 348 | GCC_WARN_UNUSED_VARIABLE = YES; 349 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 350 | MTL_ENABLE_DEBUG_INFO = YES; 351 | ONLY_ACTIVE_ARCH = YES; 352 | SDKROOT = iphoneos; 353 | TARGETED_DEVICE_FAMILY = "1,2"; 354 | }; 355 | name = Debug; 356 | }; 357 | 97C147041CF9000F007C117D /* Release */ = { 358 | isa = XCBuildConfiguration; 359 | buildSettings = { 360 | ALWAYS_SEARCH_USER_PATHS = NO; 361 | CLANG_ANALYZER_NONNULL = YES; 362 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 363 | CLANG_CXX_LIBRARY = "libc++"; 364 | CLANG_ENABLE_MODULES = YES; 365 | CLANG_ENABLE_OBJC_ARC = YES; 366 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 367 | CLANG_WARN_BOOL_CONVERSION = YES; 368 | CLANG_WARN_COMMA = YES; 369 | CLANG_WARN_CONSTANT_CONVERSION = YES; 370 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 371 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 372 | CLANG_WARN_EMPTY_BODY = YES; 373 | CLANG_WARN_ENUM_CONVERSION = YES; 374 | CLANG_WARN_INFINITE_RECURSION = YES; 375 | CLANG_WARN_INT_CONVERSION = YES; 376 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 377 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 378 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 379 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 380 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 381 | CLANG_WARN_STRICT_PROTOTYPES = YES; 382 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 383 | CLANG_WARN_UNREACHABLE_CODE = YES; 384 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 385 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 386 | COPY_PHASE_STRIP = NO; 387 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 388 | ENABLE_NS_ASSERTIONS = NO; 389 | ENABLE_STRICT_OBJC_MSGSEND = YES; 390 | GCC_C_LANGUAGE_STANDARD = gnu99; 391 | GCC_NO_COMMON_BLOCKS = YES; 392 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 393 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 394 | GCC_WARN_UNDECLARED_SELECTOR = YES; 395 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 396 | GCC_WARN_UNUSED_FUNCTION = YES; 397 | GCC_WARN_UNUSED_VARIABLE = YES; 398 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 399 | MTL_ENABLE_DEBUG_INFO = NO; 400 | SDKROOT = iphoneos; 401 | SUPPORTED_PLATFORMS = iphoneos; 402 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 403 | TARGETED_DEVICE_FAMILY = "1,2"; 404 | VALIDATE_PRODUCT = YES; 405 | }; 406 | name = Release; 407 | }; 408 | 97C147061CF9000F007C117D /* Debug */ = { 409 | isa = XCBuildConfiguration; 410 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 411 | buildSettings = { 412 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 413 | CLANG_ENABLE_MODULES = YES; 414 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 415 | ENABLE_BITCODE = NO; 416 | INFOPLIST_FILE = Runner/Info.plist; 417 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 418 | PRODUCT_BUNDLE_IDENTIFIER = com.juliusgithaiga.flutterSmsInboxExample; 419 | PRODUCT_NAME = "$(TARGET_NAME)"; 420 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 421 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 422 | SWIFT_VERSION = 5.0; 423 | VERSIONING_SYSTEM = "apple-generic"; 424 | }; 425 | name = Debug; 426 | }; 427 | 97C147071CF9000F007C117D /* Release */ = { 428 | isa = XCBuildConfiguration; 429 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 430 | buildSettings = { 431 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 432 | CLANG_ENABLE_MODULES = YES; 433 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 434 | ENABLE_BITCODE = NO; 435 | INFOPLIST_FILE = Runner/Info.plist; 436 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 437 | PRODUCT_BUNDLE_IDENTIFIER = com.juliusgithaiga.flutterSmsInboxExample; 438 | PRODUCT_NAME = "$(TARGET_NAME)"; 439 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 440 | SWIFT_VERSION = 5.0; 441 | VERSIONING_SYSTEM = "apple-generic"; 442 | }; 443 | name = Release; 444 | }; 445 | /* End XCBuildConfiguration section */ 446 | 447 | /* Begin XCConfigurationList section */ 448 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 449 | isa = XCConfigurationList; 450 | buildConfigurations = ( 451 | 97C147031CF9000F007C117D /* Debug */, 452 | 97C147041CF9000F007C117D /* Release */, 453 | 249021D3217E4FDB00AE95B9 /* Profile */, 454 | ); 455 | defaultConfigurationIsVisible = 0; 456 | defaultConfigurationName = Release; 457 | }; 458 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 459 | isa = XCConfigurationList; 460 | buildConfigurations = ( 461 | 97C147061CF9000F007C117D /* Debug */, 462 | 97C147071CF9000F007C117D /* Release */, 463 | 249021D4217E4FDB00AE95B9 /* Profile */, 464 | ); 465 | defaultConfigurationIsVisible = 0; 466 | defaultConfigurationName = Release; 467 | }; 468 | /* End XCConfigurationList section */ 469 | }; 470 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 471 | } 472 | -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | _fe_analyzer_shared: 5 | dependency: transitive 6 | description: 7 | name: _fe_analyzer_shared 8 | sha256: dc27559385e905ad30838356c5f5d574014ba39872d732111cd07ac0beff4c57 9 | url: "https://pub.dev" 10 | source: hosted 11 | version: "80.0.0" 12 | analyzer: 13 | dependency: transitive 14 | description: 15 | name: analyzer 16 | sha256: "192d1c5b944e7e53b24b5586db760db934b177d4147c42fbca8c8c5f1eb8d11e" 17 | url: "https://pub.dev" 18 | source: hosted 19 | version: "7.3.0" 20 | args: 21 | dependency: transitive 22 | description: 23 | name: args 24 | sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "2.7.0" 28 | async: 29 | dependency: transitive 30 | description: 31 | name: async 32 | sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 33 | url: "https://pub.dev" 34 | source: hosted 35 | version: "2.12.0" 36 | boolean_selector: 37 | dependency: transitive 38 | description: 39 | name: boolean_selector 40 | sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" 41 | url: "https://pub.dev" 42 | source: hosted 43 | version: "2.1.2" 44 | build: 45 | dependency: transitive 46 | description: 47 | name: build 48 | sha256: cef23f1eda9b57566c81e2133d196f8e3df48f244b317368d65c5943d91148f0 49 | url: "https://pub.dev" 50 | source: hosted 51 | version: "2.4.2" 52 | build_config: 53 | dependency: transitive 54 | description: 55 | name: build_config 56 | sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33" 57 | url: "https://pub.dev" 58 | source: hosted 59 | version: "1.1.2" 60 | build_daemon: 61 | dependency: transitive 62 | description: 63 | name: build_daemon 64 | sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa" 65 | url: "https://pub.dev" 66 | source: hosted 67 | version: "4.0.4" 68 | build_resolvers: 69 | dependency: transitive 70 | description: 71 | name: build_resolvers 72 | sha256: b9e4fda21d846e192628e7a4f6deda6888c36b5b69ba02ff291a01fd529140f0 73 | url: "https://pub.dev" 74 | source: hosted 75 | version: "2.4.4" 76 | build_runner: 77 | dependency: "direct dev" 78 | description: 79 | name: build_runner 80 | sha256: "058fe9dce1de7d69c4b84fada934df3e0153dd000758c4d65964d0166779aa99" 81 | url: "https://pub.dev" 82 | source: hosted 83 | version: "2.4.15" 84 | build_runner_core: 85 | dependency: transitive 86 | description: 87 | name: build_runner_core 88 | sha256: "22e3aa1c80e0ada3722fe5b63fd43d9c8990759d0a2cf489c8c5d7b2bdebc021" 89 | url: "https://pub.dev" 90 | source: hosted 91 | version: "8.0.0" 92 | built_collection: 93 | dependency: transitive 94 | description: 95 | name: built_collection 96 | sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" 97 | url: "https://pub.dev" 98 | source: hosted 99 | version: "5.1.1" 100 | built_value: 101 | dependency: transitive 102 | description: 103 | name: built_value 104 | sha256: ea90e81dc4a25a043d9bee692d20ed6d1c4a1662a28c03a96417446c093ed6b4 105 | url: "https://pub.dev" 106 | source: hosted 107 | version: "8.9.5" 108 | characters: 109 | dependency: transitive 110 | description: 111 | name: characters 112 | sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 113 | url: "https://pub.dev" 114 | source: hosted 115 | version: "1.4.0" 116 | checked_yaml: 117 | dependency: transitive 118 | description: 119 | name: checked_yaml 120 | sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff 121 | url: "https://pub.dev" 122 | source: hosted 123 | version: "2.0.3" 124 | clock: 125 | dependency: transitive 126 | description: 127 | name: clock 128 | sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b 129 | url: "https://pub.dev" 130 | source: hosted 131 | version: "1.1.2" 132 | code_builder: 133 | dependency: transitive 134 | description: 135 | name: code_builder 136 | sha256: "0ec10bf4a89e4c613960bf1e8b42c64127021740fb21640c29c909826a5eea3e" 137 | url: "https://pub.dev" 138 | source: hosted 139 | version: "4.10.1" 140 | collection: 141 | dependency: transitive 142 | description: 143 | name: collection 144 | sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" 145 | url: "https://pub.dev" 146 | source: hosted 147 | version: "1.19.1" 148 | convert: 149 | dependency: transitive 150 | description: 151 | name: convert 152 | sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 153 | url: "https://pub.dev" 154 | source: hosted 155 | version: "3.1.2" 156 | coverage: 157 | dependency: transitive 158 | description: 159 | name: coverage 160 | sha256: e3493833ea012784c740e341952298f1cc77f1f01b1bbc3eb4eecf6984fb7f43 161 | url: "https://pub.dev" 162 | source: hosted 163 | version: "1.11.1" 164 | crypto: 165 | dependency: transitive 166 | description: 167 | name: crypto 168 | sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" 169 | url: "https://pub.dev" 170 | source: hosted 171 | version: "3.0.6" 172 | dart_style: 173 | dependency: transitive 174 | description: 175 | name: dart_style 176 | sha256: "27eb0ae77836989a3bc541ce55595e8ceee0992807f14511552a898ddd0d88ac" 177 | url: "https://pub.dev" 178 | source: hosted 179 | version: "3.0.1" 180 | fake_async: 181 | dependency: transitive 182 | description: 183 | name: fake_async 184 | sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" 185 | url: "https://pub.dev" 186 | source: hosted 187 | version: "1.3.2" 188 | file: 189 | dependency: transitive 190 | description: 191 | name: file 192 | sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 193 | url: "https://pub.dev" 194 | source: hosted 195 | version: "7.0.1" 196 | fixnum: 197 | dependency: transitive 198 | description: 199 | name: fixnum 200 | sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be 201 | url: "https://pub.dev" 202 | source: hosted 203 | version: "1.1.1" 204 | flutter: 205 | dependency: "direct main" 206 | description: flutter 207 | source: sdk 208 | version: "0.0.0" 209 | flutter_lints: 210 | dependency: "direct dev" 211 | description: 212 | name: flutter_lints 213 | sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" 214 | url: "https://pub.dev" 215 | source: hosted 216 | version: "5.0.0" 217 | flutter_test: 218 | dependency: "direct dev" 219 | description: flutter 220 | source: sdk 221 | version: "0.0.0" 222 | frontend_server_client: 223 | dependency: transitive 224 | description: 225 | name: frontend_server_client 226 | sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 227 | url: "https://pub.dev" 228 | source: hosted 229 | version: "4.0.0" 230 | glob: 231 | dependency: transitive 232 | description: 233 | name: glob 234 | sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de 235 | url: "https://pub.dev" 236 | source: hosted 237 | version: "2.1.3" 238 | graphs: 239 | dependency: transitive 240 | description: 241 | name: graphs 242 | sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" 243 | url: "https://pub.dev" 244 | source: hosted 245 | version: "2.3.2" 246 | http: 247 | dependency: transitive 248 | description: 249 | name: http 250 | sha256: fe7ab022b76f3034adc518fb6ea04a82387620e19977665ea18d30a1cf43442f 251 | url: "https://pub.dev" 252 | source: hosted 253 | version: "1.3.0" 254 | http_multi_server: 255 | dependency: transitive 256 | description: 257 | name: http_multi_server 258 | sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 259 | url: "https://pub.dev" 260 | source: hosted 261 | version: "3.2.2" 262 | http_parser: 263 | dependency: transitive 264 | description: 265 | name: http_parser 266 | sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" 267 | url: "https://pub.dev" 268 | source: hosted 269 | version: "4.1.2" 270 | io: 271 | dependency: transitive 272 | description: 273 | name: io 274 | sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b 275 | url: "https://pub.dev" 276 | source: hosted 277 | version: "1.0.5" 278 | js: 279 | dependency: transitive 280 | description: 281 | name: js 282 | sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc" 283 | url: "https://pub.dev" 284 | source: hosted 285 | version: "0.7.2" 286 | json_annotation: 287 | dependency: transitive 288 | description: 289 | name: json_annotation 290 | sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" 291 | url: "https://pub.dev" 292 | source: hosted 293 | version: "4.9.0" 294 | leak_tracker: 295 | dependency: transitive 296 | description: 297 | name: leak_tracker 298 | sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec 299 | url: "https://pub.dev" 300 | source: hosted 301 | version: "10.0.8" 302 | leak_tracker_flutter_testing: 303 | dependency: transitive 304 | description: 305 | name: leak_tracker_flutter_testing 306 | sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 307 | url: "https://pub.dev" 308 | source: hosted 309 | version: "3.0.9" 310 | leak_tracker_testing: 311 | dependency: transitive 312 | description: 313 | name: leak_tracker_testing 314 | sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" 315 | url: "https://pub.dev" 316 | source: hosted 317 | version: "3.0.1" 318 | lints: 319 | dependency: transitive 320 | description: 321 | name: lints 322 | sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7 323 | url: "https://pub.dev" 324 | source: hosted 325 | version: "5.1.1" 326 | logging: 327 | dependency: transitive 328 | description: 329 | name: logging 330 | sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 331 | url: "https://pub.dev" 332 | source: hosted 333 | version: "1.3.0" 334 | matcher: 335 | dependency: transitive 336 | description: 337 | name: matcher 338 | sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 339 | url: "https://pub.dev" 340 | source: hosted 341 | version: "0.12.17" 342 | material_color_utilities: 343 | dependency: transitive 344 | description: 345 | name: material_color_utilities 346 | sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec 347 | url: "https://pub.dev" 348 | source: hosted 349 | version: "0.11.1" 350 | meta: 351 | dependency: transitive 352 | description: 353 | name: meta 354 | sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c 355 | url: "https://pub.dev" 356 | source: hosted 357 | version: "1.16.0" 358 | mime: 359 | dependency: transitive 360 | description: 361 | name: mime 362 | sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" 363 | url: "https://pub.dev" 364 | source: hosted 365 | version: "2.0.0" 366 | mockito: 367 | dependency: "direct dev" 368 | description: 369 | name: mockito 370 | sha256: f99d8d072e249f719a5531735d146d8cf04c580d93920b04de75bef6dfb2daf6 371 | url: "https://pub.dev" 372 | source: hosted 373 | version: "5.4.5" 374 | node_preamble: 375 | dependency: transitive 376 | description: 377 | name: node_preamble 378 | sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" 379 | url: "https://pub.dev" 380 | source: hosted 381 | version: "2.0.2" 382 | package_config: 383 | dependency: transitive 384 | description: 385 | name: package_config 386 | sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc 387 | url: "https://pub.dev" 388 | source: hosted 389 | version: "2.2.0" 390 | path: 391 | dependency: transitive 392 | description: 393 | name: path 394 | sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" 395 | url: "https://pub.dev" 396 | source: hosted 397 | version: "1.9.1" 398 | pool: 399 | dependency: transitive 400 | description: 401 | name: pool 402 | sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" 403 | url: "https://pub.dev" 404 | source: hosted 405 | version: "1.5.1" 406 | pub_semver: 407 | dependency: transitive 408 | description: 409 | name: pub_semver 410 | sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" 411 | url: "https://pub.dev" 412 | source: hosted 413 | version: "2.2.0" 414 | pubspec_parse: 415 | dependency: transitive 416 | description: 417 | name: pubspec_parse 418 | sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082" 419 | url: "https://pub.dev" 420 | source: hosted 421 | version: "1.5.0" 422 | shelf: 423 | dependency: transitive 424 | description: 425 | name: shelf 426 | sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 427 | url: "https://pub.dev" 428 | source: hosted 429 | version: "1.4.2" 430 | shelf_packages_handler: 431 | dependency: transitive 432 | description: 433 | name: shelf_packages_handler 434 | sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" 435 | url: "https://pub.dev" 436 | source: hosted 437 | version: "3.0.2" 438 | shelf_static: 439 | dependency: transitive 440 | description: 441 | name: shelf_static 442 | sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 443 | url: "https://pub.dev" 444 | source: hosted 445 | version: "1.1.3" 446 | shelf_web_socket: 447 | dependency: transitive 448 | description: 449 | name: shelf_web_socket 450 | sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" 451 | url: "https://pub.dev" 452 | source: hosted 453 | version: "3.0.0" 454 | sky_engine: 455 | dependency: transitive 456 | description: flutter 457 | source: sdk 458 | version: "0.0.0" 459 | source_gen: 460 | dependency: transitive 461 | description: 462 | name: source_gen 463 | sha256: "35c8150ece9e8c8d263337a265153c3329667640850b9304861faea59fc98f6b" 464 | url: "https://pub.dev" 465 | source: hosted 466 | version: "2.0.0" 467 | source_map_stack_trace: 468 | dependency: transitive 469 | description: 470 | name: source_map_stack_trace 471 | sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b 472 | url: "https://pub.dev" 473 | source: hosted 474 | version: "2.1.2" 475 | source_maps: 476 | dependency: transitive 477 | description: 478 | name: source_maps 479 | sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812" 480 | url: "https://pub.dev" 481 | source: hosted 482 | version: "0.10.13" 483 | source_span: 484 | dependency: transitive 485 | description: 486 | name: source_span 487 | sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" 488 | url: "https://pub.dev" 489 | source: hosted 490 | version: "1.10.1" 491 | stack_trace: 492 | dependency: transitive 493 | description: 494 | name: stack_trace 495 | sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" 496 | url: "https://pub.dev" 497 | source: hosted 498 | version: "1.12.1" 499 | stream_channel: 500 | dependency: transitive 501 | description: 502 | name: stream_channel 503 | sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" 504 | url: "https://pub.dev" 505 | source: hosted 506 | version: "2.1.4" 507 | stream_transform: 508 | dependency: transitive 509 | description: 510 | name: stream_transform 511 | sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871 512 | url: "https://pub.dev" 513 | source: hosted 514 | version: "2.1.1" 515 | string_scanner: 516 | dependency: transitive 517 | description: 518 | name: string_scanner 519 | sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" 520 | url: "https://pub.dev" 521 | source: hosted 522 | version: "1.4.1" 523 | term_glyph: 524 | dependency: transitive 525 | description: 526 | name: term_glyph 527 | sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" 528 | url: "https://pub.dev" 529 | source: hosted 530 | version: "1.2.2" 531 | test: 532 | dependency: "direct dev" 533 | description: 534 | name: test 535 | sha256: "301b213cd241ca982e9ba50266bd3f5bd1ea33f1455554c5abb85d1be0e2d87e" 536 | url: "https://pub.dev" 537 | source: hosted 538 | version: "1.25.15" 539 | test_api: 540 | dependency: transitive 541 | description: 542 | name: test_api 543 | sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd 544 | url: "https://pub.dev" 545 | source: hosted 546 | version: "0.7.4" 547 | test_core: 548 | dependency: transitive 549 | description: 550 | name: test_core 551 | sha256: "84d17c3486c8dfdbe5e12a50c8ae176d15e2a771b96909a9442b40173649ccaa" 552 | url: "https://pub.dev" 553 | source: hosted 554 | version: "0.6.8" 555 | timing: 556 | dependency: transitive 557 | description: 558 | name: timing 559 | sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" 560 | url: "https://pub.dev" 561 | source: hosted 562 | version: "1.0.2" 563 | typed_data: 564 | dependency: transitive 565 | description: 566 | name: typed_data 567 | sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 568 | url: "https://pub.dev" 569 | source: hosted 570 | version: "1.4.0" 571 | vector_math: 572 | dependency: transitive 573 | description: 574 | name: vector_math 575 | sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" 576 | url: "https://pub.dev" 577 | source: hosted 578 | version: "2.1.4" 579 | vm_service: 580 | dependency: transitive 581 | description: 582 | name: vm_service 583 | sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" 584 | url: "https://pub.dev" 585 | source: hosted 586 | version: "14.3.1" 587 | watcher: 588 | dependency: transitive 589 | description: 590 | name: watcher 591 | sha256: "69da27e49efa56a15f8afe8f4438c4ec02eff0a117df1b22ea4aad194fe1c104" 592 | url: "https://pub.dev" 593 | source: hosted 594 | version: "1.1.1" 595 | web: 596 | dependency: transitive 597 | description: 598 | name: web 599 | sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" 600 | url: "https://pub.dev" 601 | source: hosted 602 | version: "1.1.1" 603 | web_socket: 604 | dependency: transitive 605 | description: 606 | name: web_socket 607 | sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" 608 | url: "https://pub.dev" 609 | source: hosted 610 | version: "0.1.6" 611 | web_socket_channel: 612 | dependency: transitive 613 | description: 614 | name: web_socket_channel 615 | sha256: "0b8e2457400d8a859b7b2030786835a28a8e80836ef64402abef392ff4f1d0e5" 616 | url: "https://pub.dev" 617 | source: hosted 618 | version: "3.0.2" 619 | webkit_inspection_protocol: 620 | dependency: transitive 621 | description: 622 | name: webkit_inspection_protocol 623 | sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" 624 | url: "https://pub.dev" 625 | source: hosted 626 | version: "1.2.1" 627 | yaml: 628 | dependency: transitive 629 | description: 630 | name: yaml 631 | sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce 632 | url: "https://pub.dev" 633 | source: hosted 634 | version: "3.1.3" 635 | sdks: 636 | dart: ">=3.7.0-0 <4.0.0" 637 | flutter: ">=3.18.0-18.0.pre.54" 638 | --------------------------------------------------------------------------------