diff --git a/app_petty_cash/lib/app/route.dart b/app_petty_cash/lib/app/route.dart index 889aa71..0c7457a 100644 --- a/app_petty_cash/lib/app/route.dart +++ b/app_petty_cash/lib/app/route.dart @@ -1,4 +1,4 @@ -import 'package:app_petty_cash/screen/user/user_screen.dart'; + import 'package:flutter/material.dart'; import '../screen/home/home_screen.dart'; @@ -6,6 +6,8 @@ import '../screen/transaksi/transaksi_screen.dart'; import '../screen/login/login_screen.dart'; import '../screen/splash/splash_screen.dart'; import '../screen/test_file_picker/test_file_picker.dart'; +import '../screen/report/report_screen.dart'; +import '../screen/user/user_screen.dart'; const loginRoute = "/loginRoute"; const menuRoute = "/menuRoute"; @@ -13,6 +15,7 @@ const splashScreen = "/splashScreen"; const homeRoute = "/homeRoute"; const transaksiRoute = "/transaksiRoute"; const userRoute = "/userRoute"; +const reportRoute = "/reportRoute"; // test screen const testFilePickerRoute = "/testFilePickerRoute"; @@ -32,6 +35,19 @@ class AppRoute { }); } + // report screen + if (settings.name == reportRoute) { + return MaterialPageRoute(builder: (context) { + return MediaQuery( + data: MediaQuery.of(context).copyWith( + textScaleFactor: 1.0, + padding: EdgeInsets.all(0), + ), + child: ReportScreen(), + ); + }); + } + // user screen if (settings.name == userRoute) { return MaterialPageRoute(builder: (context) { diff --git a/app_petty_cash/lib/main.dart b/app_petty_cash/lib/main.dart index c3d8767..175c9fe 100644 --- a/app_petty_cash/lib/main.dart +++ b/app_petty_cash/lib/main.dart @@ -41,6 +41,7 @@ class MyApp extends StatelessWidget { // initialRoute: loginRoute, // initialRoute: splashScreen, initialRoute: transaksiRoute, + // initialRoute: reportRoute, // initialRoute: testFilePickerRoute, onGenerateRoute: AppRoute.generateRoute, ); diff --git a/app_petty_cash/lib/screen/report/report_screen.dart b/app_petty_cash/lib/screen/report/report_screen.dart new file mode 100644 index 0000000..bedbeb2 --- /dev/null +++ b/app_petty_cash/lib/screen/report/report_screen.dart @@ -0,0 +1,261 @@ +import 'package:app_petty_cash/widget/sankbar_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_hooks/flutter_hooks.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:intl/intl.dart'; +import 'package:url_launcher/url_launcher.dart'; + +import '../../app/constant.dart'; +import '../../widget/custom_drawer.dart'; + +class ReportScreen extends HookConsumerWidget { + const ReportScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + String formattedDate = DateFormat('dd-MM-yyyy').format(DateTime.now()); + final ctrlTglAwal = useTextEditingController(text: formattedDate); + + final tglAwal = useState(DateTime.now()); + final tglAwalTmp = useState(""); + + final ctrlTglAkhir = useTextEditingController(text: formattedDate); + + final tglAkhir = useState(DateTime.now()); + final tglAkhirTmp = useState(""); + + return Padding( + padding: EdgeInsets.only( + top: Constant.getActualYPhone(context: context, y: 30), + ), + child: Scaffold( + appBar: AppBar( + title: Text('Report'), + ), + drawer: CustomDrawer(), + body: SafeArea( + child: SingleChildScrollView( + child: Padding( + padding: EdgeInsets.all(20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Tanggal Awal', + style: Constant.body1(context: context).copyWith( + fontWeight: FontWeight.w600, color: Constant.textBlack), + ), + SizedBox( + height: Constant.getActualYPhone(context: context, y: 10), + ), + // Tanggal Awal + Row( + children: [ + Expanded( + child: TextField( + controller: ctrlTglAwal, + decoration: InputDecoration( + hintStyle: + Constant.body2_400(context: context).copyWith( + color: Colors.orange, + ), + labelStyle: + Constant.body2_400(context: context).copyWith( + color: Colors.orange, + ), + border: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.orange, + width: 1, + ), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.orange, + width: 1, + ), + ), + // labelText: "Tanggal Awal", + hintText: 'Tanggal Awal', + // suffixIcon: isLoadingFilterScope.value + // ? SizedBox( + // width: Constant.getActualXPhone( + // context: context, + // x: 4, + // ), + // height: Constant.getActualYPhone( + // context: context, + // y: 4, + // ), + // child: CircularProgressIndicator( + // color: Constant.textRed, + // ), + // ) + // : Icon( + // Icons.calendar_month_sharp, + // color: Constant.colorIconDate, + // ), + ), + onTap: () async { + final selectedDateAwal = await showDatePicker( + // locale: const Locale("en-CA"), + // locale: , + context: context, + initialEntryMode: + DatePickerEntryMode.calendarOnly, + firstDate: DateTime(2000), + lastDate: DateTime(2100), + + initialDate: (ctrlTglAwal.text.isEmpty) + ? DateTime.now() + : tglAwal.value, + ); + + if (selectedDateAwal != null) { + String formattedDate = DateFormat('dd-MM-yyyy') + .format(selectedDateAwal); + // ctrlTglAwal.text = + // selectedDateAwal.toString().split(' ')[0]; + ctrlTglAwal.text = formattedDate; + tglAwal.value = selectedDateAwal; + tglAwalTmp.value = selectedDateAwal.toString(); + } + + if (selectedDateAwal == null) { + print('cancel button'); + return; + } + }, + ), + ), + ], + ), + + SizedBox( + height: Constant.getActualYPhone(context: context, y: 20), + ), + + Text( + 'Tanggal Akhir', + style: Constant.body1(context: context).copyWith( + fontWeight: FontWeight.w600, color: Constant.textBlack), + ), + SizedBox( + height: Constant.getActualYPhone(context: context, y: 10), + ), + // Tanggal Akhir + Row( + children: [ + Expanded( + child: TextField( + controller: ctrlTglAkhir, + decoration: InputDecoration( + hintStyle: + Constant.body2_400(context: context).copyWith( + color: Colors.orange, + ), + labelStyle: + Constant.body2_400(context: context).copyWith( + color: Colors.orange, + ), + border: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.orange, + width: 1, + ), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.orange, + width: 1, + ), + ), + // labelText: "Tanggal Awal", + hintText: 'Tanggal Akhir', + // suffixIcon: isLoadingFilterScope.value + // ? SizedBox( + // width: Constant.getActualXPhone( + // context: context, + // x: 4, + // ), + // height: Constant.getActualYPhone( + // context: context, + // y: 4, + // ), + // child: CircularProgressIndicator( + // color: Constant.textRed, + // ), + // ) + // : Icon( + // Icons.calendar_month_sharp, + // color: Constant.colorIconDate, + // ), + ), + onTap: () async { + final selectedDateAkhir = await showDatePicker( + // locale: const Locale("en-CA"), + // locale: , + context: context, + initialEntryMode: + DatePickerEntryMode.calendarOnly, + firstDate: DateTime(2000), + lastDate: DateTime(2100), + + initialDate: (ctrlTglAkhir.text.isEmpty) + ? DateTime.now() + : tglAkhir.value, + ); + + if (selectedDateAkhir != null) { + String formattedDate = DateFormat('dd-MM-yyyy') + .format(selectedDateAkhir); + // ctrlTglAkhir.text = + // selectedDateAkhir.toString().split(' ')[0]; + ctrlTglAkhir.text = formattedDate; + tglAkhir.value = selectedDateAkhir; + tglAkhirTmp.value = selectedDateAkhir.toString(); + } + + if (selectedDateAkhir == null) { + print('cancel button'); + return; + } + }, + ), + ), + ], + ), + + SizedBox( + height: Constant.getActualYPhone(context: context, y: 35), + ), + + Container( + width: Constant.getActualXPhone(context: context, x: 390), + height: Constant.getActualYPhone(context: context, y: 42), + child: ElevatedButton( + child: Text( + 'Laporan', + style: Constant.body1(context: context).copyWith( + fontWeight: FontWeight.w600, + color: Constant.textBlack), + ), + onPressed: () async { + // https://pub.dev/packages?q=url+launcher + String url = "https://pub.dev/packages?q=url+launcher"; + if (!await launchUrl(Uri.parse(url))) { + // throw Exception('Could not launch $url'); + SanckbarWidget(context, 'Could not launch $url', snackbarType.error); + } + }, + ), + ), + ], + ), + ), + ), + ), + ), + ); + } +} diff --git a/app_petty_cash/lib/screen/transaksi/transaksi_screen.dart b/app_petty_cash/lib/screen/transaksi/transaksi_screen.dart index 978c005..a5b8270 100644 --- a/app_petty_cash/lib/screen/transaksi/transaksi_screen.dart +++ b/app_petty_cash/lib/screen/transaksi/transaksi_screen.dart @@ -81,7 +81,15 @@ class TransaksiScreen extends HookConsumerWidget { // print(next.model.length); listTypeData.value = next.model; listTypeLoading.value = false; - selectedListTypeData.value = listTypeData.value[0]; + + var idx = 0; + for (var i = 0; i < listTypeData.value.length; i++) { + if (listTypeData.value[i].typeid == "KREDIT") { + selectedListTypeData.value = listTypeData.value[i]; + idx = i; + } + } + selectedListTypeData.value = listTypeData.value[idx]; } }, ); @@ -234,172 +242,6 @@ class TransaksiScreen extends HookConsumerWidget { height: Constant.getActualYPhone(context: context, y: 20), ), - // Kategori - Text( - 'Kategori', - style: Constant.body1(context: context).copyWith( - fontWeight: FontWeight.w600, color: Constant.textBlack), - ), - SizedBox( - height: Constant.getActualYPhone(context: context, y: 10), - ), - // Dropdown kategori - SizedBox( - width: Constant.getActualXPhone(context: context, x: 390), - child: DropdownButtonHideUnderline( - child: DropdownButton2( - isExpanded: true, - hint: Row( - children: [ - Expanded( - child: Text( - 'Select Item', - style: Constant.body1(context: context) - .copyWith( - fontWeight: FontWeight.w600, - color: Constant.textBlack), - overflow: TextOverflow.ellipsis, - ), - ), - ], - ), - items: listCategoryData.value - .map((ListCategory option) { - return DropdownMenuItem( - value: option, - child: Text( - option.categoryname ?? "", - style: Constant.body1(context: context).copyWith( - color: Constant.textBlack, - fontWeight: FontWeight.w600), - ), - ); - }).toList(), - value: selectedListCategory.value, - onChanged: (ListCategory? newValue) { - // if (newValue) { - selectedListCategory.value = newValue!; - print(selectedListCategory.value.categoryid); - // } - }, - buttonStyleData: ButtonStyleData( - height: Constant.getActualY(context: context, y: 56), - width: Constant.getActualX(context: context, x: 320), - padding: EdgeInsets.only( - left: Constant.getActualX(context: context, x: 10), - right: Constant.getActualX(context: context, x: 10), - ), - decoration: BoxDecoration( - color: Constant.white, - border: - Border.all(color: Constant.textBlack, width: 1), - borderRadius: BorderRadius.circular(8), - ), - elevation: 2, - ), - iconStyleData: IconStyleData( - icon: Icon( - Icons.keyboard_arrow_down_outlined, - ), - iconSize: 24, - iconEnabledColor: Constant.textBlack, - iconDisabledColor: Colors.grey, - ), - dropdownStyleData: DropdownStyleData( - maxHeight: - Constant.getActualY(context: context, y: 200), - // width: Constant.getActualX(context: context, x: 320), - padding: EdgeInsets.only( - top: Constant.getActualY(context: context, y: 10), - left: Constant.getActualX(context: context, x: 10), - right: Constant.getActualX(context: context, x: 10), - bottom: - Constant.getActualY(context: context, y: 10), - ), - decoration: BoxDecoration( - color: Constant.white, - borderRadius: BorderRadius.circular(8), - boxShadow: [ - BoxShadow( - color: Colors.grey, - blurRadius: 20.0, - spreadRadius: 2.0, - offset: Offset(0.0, 0.0), - ), - ], - ), - elevation: 8, - offset: const Offset(0, -10), - scrollbarTheme: ScrollbarThemeData( - radius: const Radius.circular(40), - thickness: MaterialStateProperty.all(6), - thumbVisibility: - MaterialStateProperty.all(true), - ), - ), - menuItemStyleData: MenuItemStyleData( - height: Constant.getActualY(context: context, y: 56), - padding: EdgeInsets.only( - top: Constant.getActualY(context: context, y: 10), - left: Constant.getActualX(context: context, x: 10), - right: Constant.getActualX(context: context, x: 10), - ), - ), - ), - ), - ), - - SizedBox( - height: Constant.getActualYPhone(context: context, y: 20), - ), - Text( - 'Nama Pengirim', - style: Constant.body1(context: context).copyWith( - fontWeight: FontWeight.w600, color: Constant.textBlack), - ), - SizedBox( - height: Constant.getActualYPhone(context: context, y: 10), - ), - TextField( - controller: ctrlNamaPengirim, - decoration: InputDecoration( - hintStyle: Constant.body2_400(context: context).copyWith( - color: Colors.orange, - ), - labelStyle: Constant.body2_400(context: context).copyWith( - color: Colors.orange, - ), - border: OutlineInputBorder( - borderSide: BorderSide( - color: Colors.orange, - width: 1, - ), - ), - focusedBorder: OutlineInputBorder( - borderSide: BorderSide( - color: Colors.orange, - width: 1, - ), - ), - // labelText: "Nama Pengirim", - // hintText: 'Nama Pengirim', - ), - ), - // CustomTextField( - // isNumber: false, - // isReadOnly: false, - // ctrl: ctrlNamaPengirim, - // isPassword: false, - // isMaxLine: false, - // hintText: "Nama Pengirim", - // labelText: "Nama Pengirim", - // // onChange: (String searchResult) {}, - // isPrefix: false, - // ), - SizedBox( - height: Constant.getActualYPhone(context: context, y: 20), - ), - // jenis Text( 'Jenis', @@ -454,6 +296,186 @@ class TransaksiScreen extends HookConsumerWidget { height: Constant.getActualYPhone(context: context, y: 20), ), + // Kategori + if (selectedListTypeData.value.typeid != "KREDIT") ...[ + Text( + 'Kategori', + style: Constant.body1(context: context).copyWith( + fontWeight: FontWeight.w600, + color: Constant.textBlack), + ), + SizedBox( + height: Constant.getActualYPhone(context: context, y: 10), + ), + // Dropdown kategori + SizedBox( + width: Constant.getActualXPhone(context: context, x: 390), + child: DropdownButtonHideUnderline( + child: DropdownButton2( + isExpanded: true, + hint: Row( + children: [ + Expanded( + child: Text( + 'Select Item', + style: Constant.body1(context: context) + .copyWith( + fontWeight: FontWeight.w600, + color: Constant.textBlack), + overflow: TextOverflow.ellipsis, + ), + ), + ], + ), + items: + listCategoryData.value.map((ListCategory option) { + return DropdownMenuItem( + value: option, + child: Text( + option.categoryname ?? "", + style: Constant.body1(context: context) + .copyWith( + color: Constant.textBlack, + fontWeight: FontWeight.w600), + ), + ); + }).toList(), + value: selectedListCategory.value, + onChanged: (ListCategory? newValue) { + // if (newValue) { + selectedListCategory.value = newValue!; + print(selectedListCategory.value.categoryid); + // } + }, + buttonStyleData: ButtonStyleData( + height: + Constant.getActualY(context: context, y: 56), + width: + Constant.getActualX(context: context, x: 320), + padding: EdgeInsets.only( + left: + Constant.getActualX(context: context, x: 10), + right: + Constant.getActualX(context: context, x: 10), + ), + decoration: BoxDecoration( + color: Constant.white, + border: Border.all( + color: Constant.textBlack, width: 1), + borderRadius: BorderRadius.circular(8), + ), + elevation: 2, + ), + iconStyleData: IconStyleData( + icon: Icon( + Icons.keyboard_arrow_down_outlined, + ), + iconSize: 24, + iconEnabledColor: Constant.textBlack, + iconDisabledColor: Colors.grey, + ), + dropdownStyleData: DropdownStyleData( + maxHeight: + Constant.getActualY(context: context, y: 200), + // width: Constant.getActualX(context: context, x: 320), + padding: EdgeInsets.only( + top: Constant.getActualY(context: context, y: 10), + left: + Constant.getActualX(context: context, x: 10), + right: + Constant.getActualX(context: context, x: 10), + bottom: + Constant.getActualY(context: context, y: 10), + ), + decoration: BoxDecoration( + color: Constant.white, + borderRadius: BorderRadius.circular(8), + boxShadow: [ + BoxShadow( + color: Colors.grey, + blurRadius: 20.0, + spreadRadius: 2.0, + offset: Offset(0.0, 0.0), + ), + ], + ), + elevation: 8, + offset: const Offset(0, -10), + scrollbarTheme: ScrollbarThemeData( + radius: const Radius.circular(40), + thickness: MaterialStateProperty.all(6), + thumbVisibility: + MaterialStateProperty.all(true), + ), + ), + menuItemStyleData: MenuItemStyleData( + height: + Constant.getActualY(context: context, y: 56), + padding: EdgeInsets.only( + top: Constant.getActualY(context: context, y: 10), + left: + Constant.getActualX(context: context, x: 10), + right: + Constant.getActualX(context: context, x: 10), + ), + ), + ), + ), + ), + + SizedBox( + height: Constant.getActualYPhone(context: context, y: 20), + ), + ], + + Text( + 'Nama Pengirim', + style: Constant.body1(context: context).copyWith( + fontWeight: FontWeight.w600, color: Constant.textBlack), + ), + SizedBox( + height: Constant.getActualYPhone(context: context, y: 10), + ), + TextField( + controller: ctrlNamaPengirim, + decoration: InputDecoration( + hintStyle: Constant.body2_400(context: context).copyWith( + color: Colors.orange, + ), + labelStyle: Constant.body2_400(context: context).copyWith( + color: Colors.orange, + ), + border: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.orange, + width: 1, + ), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.orange, + width: 1, + ), + ), + // labelText: "Nama Pengirim", + // hintText: 'Nama Pengirim', + ), + ), + // CustomTextField( + // isNumber: false, + // isReadOnly: false, + // ctrl: ctrlNamaPengirim, + // isPassword: false, + // isMaxLine: false, + // hintText: "Nama Pengirim", + // labelText: "Nama Pengirim", + // // onChange: (String searchResult) {}, + // isPrefix: false, + // ), + SizedBox( + height: Constant.getActualYPhone(context: context, y: 20), + ), + // jumlah Text( 'Jumlah', diff --git a/app_petty_cash/linux/flutter/generated_plugin_registrant.cc b/app_petty_cash/linux/flutter/generated_plugin_registrant.cc index e71a16d..f6f23bf 100644 --- a/app_petty_cash/linux/flutter/generated_plugin_registrant.cc +++ b/app_petty_cash/linux/flutter/generated_plugin_registrant.cc @@ -6,6 +6,10 @@ #include "generated_plugin_registrant.h" +#include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); } diff --git a/app_petty_cash/linux/flutter/generated_plugins.cmake b/app_petty_cash/linux/flutter/generated_plugins.cmake index 2e1de87..f16b4c3 100644 --- a/app_petty_cash/linux/flutter/generated_plugins.cmake +++ b/app_petty_cash/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + url_launcher_linux ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/app_petty_cash/macos/Flutter/GeneratedPluginRegistrant.swift b/app_petty_cash/macos/Flutter/GeneratedPluginRegistrant.swift index 724bb2a..997e35d 100644 --- a/app_petty_cash/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/app_petty_cash/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,7 +6,9 @@ import FlutterMacOS import Foundation import shared_preferences_foundation +import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/app_petty_cash/pubspec.lock b/app_petty_cash/pubspec.lock index 674af85..ba1a4c2 100644 --- a/app_petty_cash/pubspec.lock +++ b/app_petty_cash/pubspec.lock @@ -501,6 +501,70 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: "47e208a6711459d813ba18af120d9663c20bdf6985d6ad39fe165d2538378d27" + url: "https://pub.dev" + source: hosted + version: "6.1.14" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "507dc655b1d9cb5ebc756032eb785f114e415f91557b73bf60b7e201dfedeb2f" + url: "https://pub.dev" + source: hosted + version: "6.2.2" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + url: "https://pub.dev" + source: hosted + version: "6.2.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234 + url: "https://pub.dev" + source: hosted + version: "3.1.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: a932c3a8082e118f80a475ce692fde89dc20fddb24c57360b96bc56f7035de1f + url: "https://pub.dev" + source: hosted + version: "2.3.1" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: ba140138558fcc3eead51a1c42e92a9fb074a1b1149ed3c73e66035b2ccd94f2 + url: "https://pub.dev" + source: hosted + version: "2.0.19" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 + url: "https://pub.dev" + source: hosted + version: "3.1.1" vector_math: dependency: transitive description: diff --git a/app_petty_cash/pubspec.yaml b/app_petty_cash/pubspec.yaml index e694f6e..44d74ea 100644 --- a/app_petty_cash/pubspec.yaml +++ b/app_petty_cash/pubspec.yaml @@ -49,6 +49,7 @@ dependencies: open_file: ^3.3.2 flutter_multi_formatter: ^2.12.4 top_snackbar_flutter: ^3.1.0 + url_launcher: ^6.1.13 dev_dependencies: flutter_test: diff --git a/app_petty_cash/windows/flutter/generated_plugin_registrant.cc b/app_petty_cash/windows/flutter/generated_plugin_registrant.cc index 48de52b..a0d0bbe 100644 --- a/app_petty_cash/windows/flutter/generated_plugin_registrant.cc +++ b/app_petty_cash/windows/flutter/generated_plugin_registrant.cc @@ -7,8 +7,11 @@ #include "generated_plugin_registrant.h" #include +#include void RegisterPlugins(flutter::PluginRegistry* registry) { PermissionHandlerWindowsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); } diff --git a/app_petty_cash/windows/flutter/generated_plugins.cmake b/app_petty_cash/windows/flutter/generated_plugins.cmake index 0e69e40..c20a586 100644 --- a/app_petty_cash/windows/flutter/generated_plugins.cmake +++ b/app_petty_cash/windows/flutter/generated_plugins.cmake @@ -4,6 +4,7 @@ list(APPEND FLUTTER_PLUGIN_LIST permission_handler_windows + url_launcher_windows ) list(APPEND FLUTTER_FFI_PLUGIN_LIST