Commit 5bbe2a21 authored by Gavin An's avatar Gavin An

fcm 테스트

parent 33b55aff
...@@ -29,6 +29,7 @@ android { ...@@ -29,6 +29,7 @@ android {
ndkVersion = "25.2.9519653" ndkVersion = "25.2.9519653"
compileOptions { compileOptions {
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_17 sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17
} }
...@@ -40,6 +41,7 @@ android { ...@@ -40,6 +41,7 @@ android {
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdk = 23 minSdk = 23
targetSdk = 34 targetSdk = 34
multiDexEnabled true
versionCode = flutterVersionCode.toInteger() versionCode = flutterVersionCode.toInteger()
versionName = flutterVersionName versionName = flutterVersionName
} }
...@@ -60,4 +62,8 @@ flutter { ...@@ -60,4 +62,8 @@ flutter {
dependencies { dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10"
implementation platform('com.google.firebase:firebase-bom:32.8.0') implementation platform('com.google.firebase:firebase-bom:32.8.0')
implementation 'androidx.window:window:1.0.0'
implementation 'androidx.window:window-java:1.0.0'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.2'
} }
\ No newline at end of file
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission
android:name="android.permission.SCHEDULE_EXACT_ALARM"
android:maxSdkVersion="32" />
<queries> <queries>
<intent> <intent>
<action android:name="android.speech.RecognitionService" /> <action android:name="android.speech.RecognitionService" />
</intent> </intent>
</queries> </queries>
<application <application
android:label="dispatcher_test"
android:name="${applicationName}" android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"> android:icon="@mipmap/ic_launcher"
android:label="dispatcher_test">
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:exported="true" android:exported="true"
android:hardwareAccelerated="true"
android:launchMode="singleTop" android:launchMode="singleTop"
android:showWhenLocked="true"
android:taskAffinity="" android:taskAffinity=""
android:theme="@style/LaunchTheme" android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:turnScreenOn="true"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize"> android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as <!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user the Android process has started. This theme is visible to the user
...@@ -28,11 +39,10 @@ ...@@ -28,11 +39,10 @@
to determine the Window background behind the Flutter UI. --> to determine the Window background behind the Flutter UI. -->
<meta-data <meta-data
android:name="io.flutter.embedding.android.NormalTheme" android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme" android:resource="@style/NormalTheme" />
/>
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<!-- Don't delete the meta-data below. <!-- Don't delete the meta-data below.
...@@ -40,6 +50,20 @@ ...@@ -40,6 +50,20 @@
<meta-data <meta-data
android:name="flutterEmbedding" android:name="flutterEmbedding"
android:value="2" /> android:value="2" />
<receiver
android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver"
android:exported="false" />
<receiver
android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
</application> </application>
<!-- Required to query activities that can process text, see: <!-- Required to query activities that can process text, see:
https://developer.android.com/training/package-visibility and https://developer.android.com/training/package-visibility and
...@@ -48,8 +72,8 @@ ...@@ -48,8 +72,8 @@
In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. --> In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->
<queries> <queries>
<intent> <intent>
<action android:name="android.intent.action.PROCESS_TEXT"/> <action android:name="android.intent.action.PROCESS_TEXT" />
<data android:mimeType="text/plain"/> <data android:mimeType="text/plain" />
</intent> </intent>
</queries> </queries>
<queries> <queries>
......
...@@ -7,6 +7,16 @@ import UIKit ...@@ -7,6 +7,16 @@ import UIKit
_ application: UIApplication, _ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool { ) -> Bool {
// This is required to make any communication available in the action isolate.
FlutterLocalNotificationsPlugin.setPluginRegistrantCallback { (registry) in
GeneratedPluginRegistrant.register(with: registry)
}
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
}
GeneratedPluginRegistrant.register(with: self) GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions) return super.application(application, didFinishLaunchingWithOptions: launchOptions)
} }
......
...@@ -2,10 +2,13 @@ import 'dart:math'; ...@@ -2,10 +2,13 @@ import 'dart:math';
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:dispatcher_test/firebase_options.dart'; import 'package:dispatcher_test/firebase_options.dart';
import 'package:dispatcher_test/notification_page.dart';
import 'package:dispatcher_test/speech_to_text_page.dart'; import 'package:dispatcher_test/speech_to_text_page.dart';
import 'package:dispatcher_test/text_to_speech_page.dart'; import 'package:dispatcher_test/text_to_speech_page.dart';
import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:speech_to_text/speech_to_text.dart'; import 'package:speech_to_text/speech_to_text.dart';
const List<String> sample = [ const List<String> sample = [
...@@ -19,9 +22,21 @@ const List<String> sample = [ ...@@ -19,9 +22,21 @@ const List<String> sample = [
'욕망 덩어리' '욕망 덩어리'
]; ];
@pragma('vm:entry-point')
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
await setupFlutterNotifications();
showFlutterNotification(message);
// If you're going to use other Firebase services in the background, such as Firestore,
// make sure you call `initializeApp` before using other Firebase services.
print('Handling a background message ${message.messageId}');
}
void main() async { void main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
FirebaseFirestore.instance.settings = const Settings( FirebaseFirestore.instance.settings = const Settings(
persistenceEnabled: true, persistenceEnabled: true,
); );
...@@ -35,7 +50,7 @@ class MyApp extends StatelessWidget { ...@@ -35,7 +50,7 @@ class MyApp extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MaterialApp( return MaterialApp(
title: 'Flutter Demo', title: 'Dispatcher TEST',
theme: ThemeData( theme: ThemeData(
// This is the theme of your application. // This is the theme of your application.
// //
...@@ -55,7 +70,7 @@ class MyApp extends StatelessWidget { ...@@ -55,7 +70,7 @@ class MyApp extends StatelessWidget {
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true, useMaterial3: true,
), ),
home: const MyHomePage(title: 'Flutter Demo Home Page'), home: const MyHomePage(title: 'Dispatcher TEST'),
); );
} }
} }
...@@ -85,6 +100,14 @@ class _MyHomePageState extends State<MyHomePage> { ...@@ -85,6 +100,14 @@ class _MyHomePageState extends State<MyHomePage> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
requestPermission();
}
void requestPermission() async {
if (await Permission.notification.isDenied &&
!await Permission.notification.isPermanentlyDenied) {
await Permission.notification.request();
}
} }
@override @override
...@@ -123,6 +146,9 @@ class _MyHomePageState extends State<MyHomePage> { ...@@ -123,6 +146,9 @@ class _MyHomePageState extends State<MyHomePage> {
style: TextStyle(color: Colors.black), style: TextStyle(color: Colors.black),
), ),
), ),
const SizedBox(
height: 10,
),
TextButton( TextButton(
style: const ButtonStyle( style: const ButtonStyle(
backgroundColor: WidgetStatePropertyAll(Colors.amber), backgroundColor: WidgetStatePropertyAll(Colors.amber),
...@@ -139,6 +165,28 @@ class _MyHomePageState extends State<MyHomePage> { ...@@ -139,6 +165,28 @@ class _MyHomePageState extends State<MyHomePage> {
style: TextStyle(color: Colors.black), style: TextStyle(color: Colors.black),
), ),
), ),
const SizedBox(
height: 10,
),
TextButton(
style: const ButtonStyle(
backgroundColor: WidgetStatePropertyAll(Colors.amber),
minimumSize: WidgetStatePropertyAll(Size.fromHeight(30))),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const GenerateNotificationPage(),
));
},
child: const Text(
'알림입력',
style: TextStyle(color: Colors.black),
),
),
const SizedBox(
height: 10,
),
Center( Center(
// Center is a layout widget. It takes a single child and positions it // Center is a layout widget. It takes a single child and positions it
// in the middle of the parent. // in the middle of the parent.
......
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
class GenerateNotificationPage extends StatefulWidget {
const GenerateNotificationPage({super.key});
@override
State<GenerateNotificationPage> createState() =>
_GenerateNotificationPageState();
}
class _GenerateNotificationPageState extends State<GenerateNotificationPage> {
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextButton(
style: const ButtonStyle(
backgroundColor: WidgetStatePropertyAll(Colors.amber),
minimumSize: WidgetStatePropertyAll(Size.fromHeight(30))),
onPressed: () {
NotificationDetails details = const NotificationDetails(
iOS: DarwinNotificationDetails(
presentAlert: true,
presentBadge: true,
presentSound: true,
),
android: AndroidNotificationDetails(
"show_test",
"show_test",
importance: Importance.max,
priority: Priority.high,
actions: [
]
),
);
flutterLocalNotificationsPlugin.show(
0,
"타이틀이 보여지는 영역입니다.",
"컨텐츠 내용이 보여지는 영역입니다.\n 노티알림 입니다.",
details,
payload: "tyger://",
);
},
child: const Text(
'알림 전송',
style: TextStyle(color: Colors.black),
),
),
],
),
),
);
}
@override
void initState() {
super.initState();
initNotification();
}
Future<void> initNotification() async {
// initialise the plugin. app_icon needs to be a added as a drawable resource to the Android head project
const AndroidInitializationSettings androidInitSettings =
AndroidInitializationSettings('@mipmap/ic_launcher');
final DarwinInitializationSettings darwinInitSettings =
DarwinInitializationSettings(
requestSoundPermission: false,
requestBadgePermission: false,
requestAlertPermission: false,
onDidReceiveLocalNotification: (id, title, body, payload) {},
);
const LinuxInitializationSettings initializationSettingsLinux =
LinuxInitializationSettings(defaultActionName: 'Open notification');
final InitializationSettings initializationSettings =
InitializationSettings(
android: androidInitSettings,
linux: initializationSettingsLinux,
iOS: darwinInitSettings,
macOS: darwinInitSettings,
);
await flutterLocalNotificationsPlugin.initialize(
initializationSettings,
onDidReceiveNotificationResponse: (details) {},
);
}
}
...@@ -153,7 +153,8 @@ class _TextToSpeechPageState extends State<TextToSpeechPage> { ...@@ -153,7 +153,8 @@ class _TextToSpeechPageState extends State<TextToSpeechPage> {
} }
List<DropdownMenuItem<String>> getEnginesDropDownMenuItems( List<DropdownMenuItem<String>> getEnginesDropDownMenuItems(
List<dynamic> engines) { List<dynamic> engines,
) {
var items = <DropdownMenuItem<String>>[]; var items = <DropdownMenuItem<String>>[];
for (dynamic type in engines) { for (dynamic type in engines) {
items.add(DropdownMenuItem( items.add(DropdownMenuItem(
...@@ -202,7 +203,7 @@ class _TextToSpeechPageState extends State<TextToSpeechPage> { ...@@ -202,7 +203,7 @@ class _TextToSpeechPageState extends State<TextToSpeechPage> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text('Flutter TTS'), title: const Text('Flutter TTS'),
), ),
body: SingleChildScrollView( body: SingleChildScrollView(
scrollDirection: Axis.vertical, scrollDirection: Axis.vertical,
...@@ -228,9 +229,9 @@ class _TextToSpeechPageState extends State<TextToSpeechPage> { ...@@ -228,9 +229,9 @@ class _TextToSpeechPageState extends State<TextToSpeechPage> {
if (snapshot.hasData) { if (snapshot.hasData) {
return _enginesDropDownSection(snapshot.data as List<dynamic>); return _enginesDropDownSection(snapshot.data as List<dynamic>);
} else if (snapshot.hasError) { } else if (snapshot.hasError) {
return Text('Error loading engines...'); return const Text('Error loading engines...');
} else } else
return Text('Loading engines...'); return const Text('Loading engines...');
}); });
} else } else
return Container(width: 0, height: 0); return Container(width: 0, height: 0);
...@@ -242,14 +243,14 @@ class _TextToSpeechPageState extends State<TextToSpeechPage> { ...@@ -242,14 +243,14 @@ class _TextToSpeechPageState extends State<TextToSpeechPage> {
if (snapshot.hasData) { if (snapshot.hasData) {
return _languageDropDownSection(snapshot.data as List<dynamic>); return _languageDropDownSection(snapshot.data as List<dynamic>);
} else if (snapshot.hasError) { } else if (snapshot.hasError) {
return Text('Error loading languages...'); return const Text('Error loading languages...');
} else } else
return Text('Loading Languages...'); return const Text('Loading Languages...');
}); });
Widget _inputSection() => Container( Widget _inputSection() => Container(
alignment: Alignment.topCenter, alignment: Alignment.topCenter,
padding: EdgeInsets.only(top: 25.0, left: 25.0, right: 25.0), padding: const EdgeInsets.only(top: 25.0, left: 25.0, right: 25.0),
child: TextField( child: TextField(
maxLines: 11, maxLines: 11,
minLines: 6, minLines: 6,
...@@ -260,7 +261,7 @@ class _TextToSpeechPageState extends State<TextToSpeechPage> { ...@@ -260,7 +261,7 @@ class _TextToSpeechPageState extends State<TextToSpeechPage> {
Widget _btnSection() { Widget _btnSection() {
return Container( return Container(
padding: EdgeInsets.only(top: 50.0), padding: const EdgeInsets.only(top: 50.0),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly, mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [ children: [
...@@ -276,7 +277,7 @@ class _TextToSpeechPageState extends State<TextToSpeechPage> { ...@@ -276,7 +277,7 @@ class _TextToSpeechPageState extends State<TextToSpeechPage> {
} }
Widget _enginesDropDownSection(List<dynamic> engines) => Container( Widget _enginesDropDownSection(List<dynamic> engines) => Container(
padding: EdgeInsets.only(top: 50.0), padding: const EdgeInsets.only(top: 50.0),
child: DropdownButton( child: DropdownButton(
value: engine, value: engine,
items: getEnginesDropDownMenuItems(engines), items: getEnginesDropDownMenuItems(engines),
...@@ -285,7 +286,7 @@ class _TextToSpeechPageState extends State<TextToSpeechPage> { ...@@ -285,7 +286,7 @@ class _TextToSpeechPageState extends State<TextToSpeechPage> {
); );
Widget _languageDropDownSection(List<dynamic> languages) => Container( Widget _languageDropDownSection(List<dynamic> languages) => Container(
padding: EdgeInsets.only(top: 10.0), padding: const EdgeInsets.only(top: 10.0),
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [ child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
DropdownButton( DropdownButton(
value: language, value: language,
...@@ -324,7 +325,7 @@ class _TextToSpeechPageState extends State<TextToSpeechPage> { ...@@ -324,7 +325,7 @@ class _TextToSpeechPageState extends State<TextToSpeechPage> {
mainAxisAlignment: MainAxisAlignment.spaceEvenly, mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [ children: [
ElevatedButton( ElevatedButton(
child: Text('Get max speech input length'), child: const Text('Get max speech input length'),
onPressed: () async { onPressed: () async {
_inputLength = await flutterTts.getMaxSpeechInputLength; _inputLength = await flutterTts.getMaxSpeechInputLength;
setState(() {}); setState(() {});
......
...@@ -7,12 +7,16 @@ import Foundation ...@@ -7,12 +7,16 @@ import Foundation
import cloud_firestore import cloud_firestore
import firebase_core import firebase_core
import firebase_messaging
import flutter_local_notifications
import flutter_tts import flutter_tts
import speech_to_text_macos import speech_to_text_macos
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FLTFirebaseFirestorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseFirestorePlugin")) FLTFirebaseFirestorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseFirestorePlugin"))
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin"))
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
FlutterTtsPlugin.register(with: registry.registrar(forPlugin: "FlutterTtsPlugin")) FlutterTtsPlugin.register(with: registry.registrar(forPlugin: "FlutterTtsPlugin"))
SpeechToTextMacosPlugin.register(with: registry.registrar(forPlugin: "SpeechToTextMacosPlugin")) SpeechToTextMacosPlugin.register(with: registry.registrar(forPlugin: "SpeechToTextMacosPlugin"))
} }
...@@ -9,6 +9,14 @@ packages: ...@@ -9,6 +9,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.40" version: "1.3.40"
args:
dependency: transitive
description:
name: args
sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a"
url: "https://pub.dev"
source: hosted
version: "2.5.0"
async: async:
dependency: transitive dependency: transitive
description: description:
...@@ -81,6 +89,14 @@ packages: ...@@ -81,6 +89,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.8" version: "1.0.8"
dbus:
dependency: transitive
description:
name: dbus
sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac"
url: "https://pub.dev"
source: hosted
version: "0.7.10"
fake_async: fake_async:
dependency: transitive dependency: transitive
description: description:
...@@ -89,6 +105,14 @@ packages: ...@@ -89,6 +105,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.1" version: "1.3.1"
ffi:
dependency: transitive
description:
name: ffi
sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
firebase_core: firebase_core:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -113,6 +137,30 @@ packages: ...@@ -113,6 +137,30 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.17.4" version: "2.17.4"
firebase_messaging:
dependency: "direct main"
description:
name: firebase_messaging
sha256: "1b0a4f9ecbaf9007771bac152afad738ddfacc4b8431a7591c00829480d99553"
url: "https://pub.dev"
source: hosted
version: "15.0.4"
firebase_messaging_platform_interface:
dependency: transitive
description:
name: firebase_messaging_platform_interface
sha256: c5a6443e66ae064fe186901d740ee7ce648ca2a6fd0484b8c5e963849ac0fc28
url: "https://pub.dev"
source: hosted
version: "4.5.42"
firebase_messaging_web:
dependency: transitive
description:
name: firebase_messaging_web
sha256: "232ef63b986467ae5b5577a09c2502b26e2e2aebab5b85e6c966a5ca9b038b89"
url: "https://pub.dev"
source: hosted
version: "3.8.12"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
...@@ -126,6 +174,30 @@ packages: ...@@ -126,6 +174,30 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.2" version: "3.0.2"
flutter_local_notifications:
dependency: "direct main"
description:
name: flutter_local_notifications
sha256: dd6676d8c2926537eccdf9f72128bbb2a9d0814689527b17f92c248ff192eaf3
url: "https://pub.dev"
source: hosted
version: "17.2.1+2"
flutter_local_notifications_linux:
dependency: transitive
description:
name: flutter_local_notifications_linux
sha256: c49bd06165cad9beeb79090b18cd1eb0296f4bf4b23b84426e37dd7c027fc3af
url: "https://pub.dev"
source: hosted
version: "4.0.1"
flutter_local_notifications_platform_interface:
dependency: transitive
description:
name: flutter_local_notifications_platform_interface
sha256: "85f8d07fe708c1bdcf45037f2c0109753b26ae077e9d9e899d55971711a4ea66"
url: "https://pub.dev"
source: hosted
version: "7.2.0"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter
...@@ -164,18 +236,18 @@ packages: ...@@ -164,18 +236,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker name: leak_tracker
sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "10.0.4" version: "10.0.5"
leak_tracker_flutter_testing: leak_tracker_flutter_testing:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker_flutter_testing name: leak_tracker_flutter_testing
sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.3" version: "3.0.5"
leak_tracker_testing: leak_tracker_testing:
dependency: transitive dependency: transitive
description: description:
...@@ -204,18 +276,18 @@ packages: ...@@ -204,18 +276,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.8.0" version: "0.11.1"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.12.0" version: "1.15.0"
path: path:
dependency: transitive dependency: transitive
description: description:
...@@ -232,6 +304,62 @@ packages: ...@@ -232,6 +304,62 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.11.1" version: "1.11.1"
permission_handler:
dependency: "direct main"
description:
name: permission_handler
sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb"
url: "https://pub.dev"
source: hosted
version: "11.3.1"
permission_handler_android:
dependency: transitive
description:
name: permission_handler_android
sha256: eaf2a1ec4472775451e88ca6a7b86559ef2f1d1ed903942ed135e38ea0097dca
url: "https://pub.dev"
source: hosted
version: "12.0.8"
permission_handler_apple:
dependency: transitive
description:
name: permission_handler_apple
sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0
url: "https://pub.dev"
source: hosted
version: "9.4.5"
permission_handler_html:
dependency: transitive
description:
name: permission_handler_html
sha256: "6cac773d389e045a8d4f85418d07ad58ef9e42a56e063629ce14c4c26344de24"
url: "https://pub.dev"
source: hosted
version: "0.1.2"
permission_handler_platform_interface:
dependency: transitive
description:
name: permission_handler_platform_interface
sha256: fe0ffe274d665be8e34f9c59705441a7d248edebbe5d9e3ec2665f88b79358ea
url: "https://pub.dev"
source: hosted
version: "4.2.2"
permission_handler_windows:
dependency: transitive
description:
name: permission_handler_windows
sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e"
url: "https://pub.dev"
source: hosted
version: "0.2.1"
petitparser:
dependency: transitive
description:
name: petitparser
sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
url: "https://pub.dev"
source: hosted
version: "6.0.2"
plugin_platform_interface: plugin_platform_interface:
dependency: transitive dependency: transitive
description: description:
...@@ -313,10 +441,18 @@ packages: ...@@ -313,10 +441,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.0" version: "0.7.2"
timezone:
dependency: transitive
description:
name: timezone
sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d"
url: "https://pub.dev"
source: hosted
version: "0.9.4"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
...@@ -329,10 +465,10 @@ packages: ...@@ -329,10 +465,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: vm_service name: vm_service
sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "14.2.1" version: "14.2.4"
web: web:
dependency: transitive dependency: transitive
description: description:
...@@ -341,6 +477,22 @@ packages: ...@@ -341,6 +477,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.5.1" version: "0.5.1"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
url: "https://pub.dev"
source: hosted
version: "1.0.4"
xml:
dependency: transitive
description:
name: xml
sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
url: "https://pub.dev"
source: hosted
version: "6.5.0"
sdks: sdks:
dart: ">=3.4.4 <4.0.0" dart: ">=3.4.4 <4.0.0"
flutter: ">=3.18.0-18.0.pre.54" flutter: ">=3.18.0-18.0.pre.54"
...@@ -39,6 +39,9 @@ dependencies: ...@@ -39,6 +39,9 @@ dependencies:
cloud_firestore: ^5.2.0 cloud_firestore: ^5.2.0
speech_to_text: ^6.6.2 speech_to_text: ^6.6.2
flutter_tts: ^4.0.2 flutter_tts: ^4.0.2
flutter_local_notifications: ^17.2.1+2
permission_handler: ^11.3.1
firebase_messaging: ^15.0.4
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
sdk: flutter sdk: flutter
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <cloud_firestore/cloud_firestore_plugin_c_api.h> #include <cloud_firestore/cloud_firestore_plugin_c_api.h>
#include <firebase_core/firebase_core_plugin_c_api.h> #include <firebase_core/firebase_core_plugin_c_api.h>
#include <flutter_tts/flutter_tts_plugin.h> #include <flutter_tts/flutter_tts_plugin.h>
#include <permission_handler_windows/permission_handler_windows_plugin.h>
void RegisterPlugins(flutter::PluginRegistry* registry) { void RegisterPlugins(flutter::PluginRegistry* registry) {
CloudFirestorePluginCApiRegisterWithRegistrar( CloudFirestorePluginCApiRegisterWithRegistrar(
...@@ -17,4 +18,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { ...@@ -17,4 +18,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
registry->GetRegistrarForPlugin("FirebaseCorePluginCApi")); registry->GetRegistrarForPlugin("FirebaseCorePluginCApi"));
FlutterTtsPluginRegisterWithRegistrar( FlutterTtsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FlutterTtsPlugin")); registry->GetRegistrarForPlugin("FlutterTtsPlugin"));
PermissionHandlerWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
} }
...@@ -6,6 +6,7 @@ list(APPEND FLUTTER_PLUGIN_LIST ...@@ -6,6 +6,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
cloud_firestore cloud_firestore
firebase_core firebase_core
flutter_tts flutter_tts
permission_handler_windows
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment