From 2bef54f26773da6afea49706059e2de33ffea461 Mon Sep 17 00:00:00 2001 From: Thomas Fransolet Date: Wed, 21 Jun 2023 17:21:59 +0200 Subject: [PATCH] HTML component test + responsive test --- .../multi_string_input_container.dart | 13 +- .../multi_string_input_html_modal.dart | 226 ++++++++++++++++++ .../SubSection/Article/article_config.dart | 4 +- .../Section/section_detail_screen.dart | 5 +- .../configuration_detail_screen.dart | 2 +- lib/Screens/Main/main_screen.dart | 52 +++- lib/Screens/login_screen.dart | 2 +- lib/main.dart | 12 +- pubspec.lock | 156 ++++++++++-- pubspec.yaml | 4 +- 10 files changed, 441 insertions(+), 35 deletions(-) create mode 100644 lib/Components/multi_string_input_html_modal.dart diff --git a/lib/Components/multi_string_input_container.dart b/lib/Components/multi_string_input_container.dart index e67d77e..8c2b9e4 100644 --- a/lib/Components/multi_string_input_container.dart +++ b/lib/Components/multi_string_input_container.dart @@ -3,10 +3,11 @@ import 'dart:convert'; import 'package:auto_size_text/auto_size_text.dart'; import 'package:flutter/material.dart'; import 'package:manager_app/Components/multi_input_modal.dart'; +import 'package:manager_app/Components/multi_string_input_html_modal.dart'; import 'package:manager_app/constants.dart'; import 'package:manager_api_new/api.dart'; -class MultiStringContainer extends StatelessWidget { +class MultiStringInputContainer extends StatelessWidget { final Color color; final String label; final String modalLabel; @@ -15,8 +16,9 @@ class MultiStringContainer extends StatelessWidget { final int maxLines; final bool isTitle; final bool isAudio; + final bool isHTML; final double fontSize; - const MultiStringContainer({ + const MultiStringInputContainer({ Key? key, this.color = kSecond, required this.label, @@ -26,6 +28,7 @@ class MultiStringContainer extends StatelessWidget { required this.maxLines, required this.isTitle, this.isAudio = false, + this.isHTML = false, this.fontSize = 25, }) : super(key: key); @@ -68,7 +71,11 @@ class MultiStringContainer extends StatelessWidget { } }); - showMultiStringInput(label, modalLabel, isTitle, initials, newValues, onGetResult, maxLines, isAudio, context); + if(isHTML) { + showMultiStringInputHTML(label, modalLabel, isTitle, initials, newValues, onGetResult, maxLines, isAudio, context); + } else { + showMultiStringInput(label, modalLabel, isTitle, initials, newValues, onGetResult, maxLines, isAudio, context); + } }, child: Container( diff --git a/lib/Components/multi_string_input_html_modal.dart b/lib/Components/multi_string_input_html_modal.dart new file mode 100644 index 0000000..53672d4 --- /dev/null +++ b/lib/Components/multi_string_input_html_modal.dart @@ -0,0 +1,226 @@ +import 'dart:ui'; + +import 'package:auto_size_text/auto_size_text.dart'; +import 'package:flutter/material.dart'; +import 'package:manager_app/Components/rounded_button.dart'; +import 'package:manager_app/Components/text_form_input_container.dart'; +import 'package:manager_app/Models/managerContext.dart'; +import 'package:manager_app/Screens/Resources/select_resource_modal.dart'; +import 'package:manager_app/app_context.dart'; +import 'package:manager_app/constants.dart'; +import 'package:manager_api_new/api.dart'; +import 'package:collection/collection.dart'; +import 'package:provider/provider.dart'; +import 'package:quill_html_editor/quill_html_editor.dart'; + +import 'audio_input_container.dart'; + + +showMultiStringInputHTML (String label, String modalLabel, bool isTitle, List values, List newValues, Function onGetResult, int maxLines, bool isAudio, BuildContext context) { /*Function onSelect,*/ + QuillEditorController controllerQuill = QuillEditorController(); + showDialog( + builder: (BuildContext context) => AlertDialog( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(20.0)) + ), + title: Center(child: Text(modalLabel)), + content: SingleChildScrollView( + child: Column( + children: [ + Container( + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: getTranslations(context, Provider.of(context), controllerQuill, label, isTitle, isAudio, newValues), + ), + ), + ), + /*Container( + width: 500, + height: 200, + child: TranslationTab( + translations: newValues, + maxLines: maxLines + ) + ),*/ + /*Column( + children: showValues(newValues), + ),*/ + ], + ) + ), + actions: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Container( + width: 180, + height: 70, + child: RoundedButton( + text: "Annuler", + icon: Icons.undo, + color: kSecond, + press: () { + onGetResult(values); + Navigator.of(context).pop(); + }, + fontSize: 20, + ), + ), + Container( + width: 180, + height: 70, + child: RoundedButton( + text: "Valider", + icon: Icons.check, + color: kPrimaryColor, + textColor: kWhite, + press: () { + Function deepEq = const DeepCollectionEquality().equals; + if (!deepEq(values, newValues)) { + onGetResult(newValues); + } + Navigator.of(context).pop(); + }, + fontSize: 20, + ), + ), + ], + ), + ], + ), context: context + ); +} + +getTranslations(BuildContext context, AppContext appContext, QuillEditorController controllerQuill, String label, bool isTitle, bool isAudio, List newValues) { + List translations = []; + ManagerAppContext managerAppContext = appContext.getContext(); + var language = managerAppContext.selectedConfiguration!.languages![0]; + //for(var language in managerAppContext.selectedConfiguration!.languages!) { + translations.add( + Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + width: MediaQuery.of(context).size.width *0.05, + height: MediaQuery.of(context).size.height *0.10, + decoration: BoxDecoration( + border: Border( + right: BorderSide(width: 1.5, color: kSecond), + ), + ), + child: Center(child: AutoSizeText(language.toUpperCase())) + ), + Padding( + padding: const EdgeInsets.only(left: 8.0), + child: Container( + width: MediaQuery.of(context).size.width *0.5, + height: MediaQuery.of(context).size.height *0.5, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + !isAudio ? + Column( + children: [ + ToolBar( + toolBarColor: Colors.cyan.shade50, + activeIconColor: Colors.green, + padding: const EdgeInsets.all(8), + iconSize: 20, + controller: controllerQuill, + customButtons: [ + InkWell(onTap: () {}, child: const Icon(Icons.favorite)), + InkWell(onTap: () {}, child: const Icon(Icons.add_circle)), + ], + ), + QuillHtmlEditor( + text: newValues.where((element) => element.language == language).first.value!, + hintText: 'Hint text goes here', + controller: controllerQuill, + isEnabled: true, + minHeight: 300, + /*textStyle: _editorTextStyle, + hintTextStyle: _hintTextStyle,*/ + hintTextAlign: TextAlign.start, + padding: const EdgeInsets.only(left: 10, top: 5), + hintTextPadding: EdgeInsets.zero, + backgroundColor: kSecond, + onFocusChanged: (hasFocus) => debugPrint('has focus $hasFocus'), + //onTextChanged: (text) => debugPrint('widget text change $text'), + onTextChanged: (value) { + newValues.where((element) => element.language == language).first.value = value; + }, + onEditorCreated: () => debugPrint('Editor has been loaded'), + onEditorResized: (height) => + debugPrint('Editor resized $height'), + onSelectionChanged: (sel) => + debugPrint('${sel.index},${sel.length}') + ), + ], + ) + /*HtmlEditor( + controller: controller, + htmlEditorOptions: HtmlEditorOptions( + hint: "Your text here...", + initialText: newValues.where((element) => element.language == language).first.value!, + shouldEnsureVisible: true, + ), + htmlToolbarOptions: HtmlToolbarOptions( + toolbarPosition: ToolbarPosition.aboveEditor, //required to place toolbar anywhere! + //other options + ), + otherOptions: OtherOptions( + height: 400, + ), + )*/ + /*TextFormInputContainer( + label: label, + color: kWhite, + isTitle: isTitle, + initialValue: newValues.where((element) => element.language == language).first.value!, + onChanged: (value) { + newValues.where((element) => element.language == language).first.value = value; + }, + )*/ : + Container( + width: 250, + height: 120, + child: AudioInputContainer( + label: "Audio :", + initialValue: newValues.where((element) => element.language == language).first.value, + color: kPrimaryColor, + onChanged: (ResourceDTO resource) { + newValues.where((element) => element.language == language).first.value = resource.id; + }, + ), + ), + ], + ), + ), + ) + ], + ), + ) + ); + //} + return translations; +} +/* +showValues(List newValues) { + List valuesToShow = new List(); + newValues.forEach((newValue) { + valuesToShow.add( + new StringInputContainer( + color: Colors.lightBlue, + label: newValue.language, + initialValue: newValue.value, + onChanged: (String value) { + newValue.value = value; + }, + )); + }); + return valuesToShow; +}*/ diff --git a/lib/Screens/Configurations/Section/SubSection/Article/article_config.dart b/lib/Screens/Configurations/Section/SubSection/Article/article_config.dart index 5c83641..8b5d60c 100644 --- a/lib/Screens/Configurations/Section/SubSection/Article/article_config.dart +++ b/lib/Screens/Configurations/Section/SubSection/Article/article_config.dart @@ -79,7 +79,7 @@ class _ArticleConfigState extends State { children: [ Column( children: [ - MultiStringContainer( + MultiStringInputContainer( label: "Contenu affiché :", modalLabel: "Contenu", color: kPrimaryColor, @@ -112,7 +112,7 @@ class _ArticleConfigState extends State { Column( children: [ - MultiStringContainer( + MultiStringInputContainer( label: "Audio :", isAudio: true, modalLabel: "Audio", diff --git a/lib/Screens/Configurations/Section/section_detail_screen.dart b/lib/Screens/Configurations/Section/section_detail_screen.dart index 9c20828..ec0657b 100644 --- a/lib/Screens/Configurations/Section/section_detail_screen.dart +++ b/lib/Screens/Configurations/Section/section_detail_screen.dart @@ -230,7 +230,7 @@ class _SectionDetailScreenState extends State { sectionDTO!.label = value; }, ), - MultiStringContainer( + MultiStringInputContainer( label: "Titre affiché:", modalLabel: "Titre", color: kPrimaryColor, @@ -242,10 +242,11 @@ class _SectionDetailScreenState extends State { } }, maxLines: 1, + isHTML: true, isTitle: true, ), if(!(appContext.getContext() as ManagerAppContext).selectedConfiguration!.isMobile!) - MultiStringContainer( + MultiStringInputContainer( label: "Description affichée:", modalLabel: "Description", color: kPrimaryColor, diff --git a/lib/Screens/Configurations/configuration_detail_screen.dart b/lib/Screens/Configurations/configuration_detail_screen.dart index 200ffb8..1b1f379 100644 --- a/lib/Screens/Configurations/configuration_detail_screen.dart +++ b/lib/Screens/Configurations/configuration_detail_screen.dart @@ -265,7 +265,7 @@ class _ConfigurationDetailScreenState extends State { if(configurationDTO.isMobile!) Padding( padding: const EdgeInsets.only(bottom: 15), - child: MultiStringContainer( + child: MultiStringInputContainer( label: "Titre affiché:", modalLabel: "Titre", fontSize: 20, diff --git a/lib/Screens/Main/main_screen.dart b/lib/Screens/Main/main_screen.dart index d13400d..ce7dc15 100644 --- a/lib/Screens/Main/main_screen.dart +++ b/lib/Screens/Main/main_screen.dart @@ -1,5 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:manager_app/Models/menu.dart'; +import 'package:manager_app/Models/menuSection.dart'; import 'package:manager_app/Screens/Main/components/body.dart'; +import 'package:manager_app/constants.dart'; +import 'package:responsive_framework/responsive_breakpoints.dart'; class MainScreen extends StatefulWidget { MainScreen({Key? key}) : super(key: key); @@ -11,8 +15,52 @@ class MainScreen extends StatefulWidget { class _MainScreenState extends State { @override Widget build(BuildContext context) { - return Scaffold( - body: Body(), + if(ResponsiveBreakpoints.of(context).equals(DESKTOP)) { + return Scaffold( + body: Body(), + ); + } else { + return Scaffold( + appBar: AppBar(title: Text("MyMuseum - Manager tablet and mobile mode"), backgroundColor: kPrimaryColor), + drawer: Drawer( + child: getMenu() + ), + body: Body(), + ); + } + + } + + getMenu() { + //MenuSection devices = new MenuSection(name: "Test", type: "devices", order: 0); + MenuSection configurations = new MenuSection(name: "Visites", type: "configurations", order: 0); + MenuSection resources = new MenuSection(name: "Ressources", type: "resources", order: 1); + + Menu menu = new Menu(title: "MyMuseum"); + + return ListView( + // Important: Remove any padding from the ListView. + padding: EdgeInsets.zero, + children: [ + DrawerHeader( + decoration: BoxDecoration( + color: kPrimaryColor, + ), + child: Text(menu.title), + ), + ListTile( + title: Text(configurations.name), + onTap: () { + // TODO Navigate to configurations screen (by route if possible) + }, + ), + ListTile( + title: Text(resources.name), + onTap: () { + // TODO Navigate to resources screen (by route if possible) + }, + ), + ], ); } } diff --git a/lib/Screens/login_screen.dart b/lib/Screens/login_screen.dart index 1fe84ad..49b427f 100644 --- a/lib/Screens/login_screen.dart +++ b/lib/Screens/login_screen.dart @@ -31,7 +31,7 @@ class LoginScreen extends StatefulWidget { class _LoginScreenState extends State { String email = ""; // DEV "test@email.be" String password = ""; // DEV = "kljqsdkljqsd" - String? host = "https://api.mymuseum.be"; // DEV = "http://192.168.31.96" + String? host = "https://api.mymuseum.be"; // DEV = "http://192.168.31.96" // http://localhost:5000 // https://api.mymuseum.be // myCore http://192.168.31.140:8089 Client? clientAPI; bool isLoading = false; bool isRememberMe = false; diff --git a/lib/main.dart b/lib/main.dart index 4bbb17b..802ae82 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,6 +4,7 @@ import 'package:manager_app/Models/managerContext.dart'; import 'package:manager_app/Screens/Main/main_screen.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:responsive_framework/responsive_framework.dart'; import 'Helpers/FileHelper.dart'; import 'Models/session.dart'; import 'Screens/login_screen.dart'; @@ -50,6 +51,15 @@ class _MyAppState extends State { return ChangeNotifierProvider( create: (_) => AppContext(widget.managerAppContext), child: MaterialApp( + builder: (context, child) => ResponsiveBreakpoints.builder( + child: child!, + breakpoints: [ + const Breakpoint(start: 0, end: 450, name: MOBILE), + const Breakpoint(start: 451, end: 800, name: TABLET), + const Breakpoint(start: 801, end: 1920, name: DESKTOP), + const Breakpoint(start: 1921, end: double.infinity, name: '4K'), + ], + ), scrollBehavior: MyCustomScrollBehavior(), debugShowCheckedModeBanner: false, title: 'MyMuseum - Manager', @@ -62,7 +72,7 @@ class _MyAppState extends State { primarySwatch: Colors.blue, scaffoldBackgroundColor: kBackgroundColor, //fontFamily: "Vollkorn", - textTheme: TextTheme(bodyText1: TextStyle(color: kBodyTextColor)), + textTheme: TextTheme(bodyLarge: TextStyle(color: kBodyTextColor)), visualDensity: VisualDensity.adaptivePlatformDensity, ), routes: { diff --git a/pubspec.lock b/pubspec.lock index c35f083..ee640b7 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -45,10 +45,10 @@ packages: dependency: transitive description: name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.11.0" audio_session: dependency: transitive description: @@ -149,10 +149,10 @@ packages: dependency: transitive description: name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.3.0" checked_yaml: dependency: transitive description: @@ -181,10 +181,10 @@ packages: dependency: "direct main" description: name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.17.2" convert: dependency: "direct main" description: @@ -302,6 +302,54 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.1" + flutter_keyboard_visibility: + dependency: transitive + description: + name: flutter_keyboard_visibility + sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" + url: "https://pub.dev" + source: hosted + version: "5.4.1" + flutter_keyboard_visibility_linux: + dependency: transitive + description: + name: flutter_keyboard_visibility_linux + sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_macos: + dependency: transitive + description: + name: flutter_keyboard_visibility_macos + sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_windows: + dependency: transitive + description: + name: flutter_keyboard_visibility_windows + sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 + url: "https://pub.dev" + source: hosted + version: "1.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -396,10 +444,10 @@ packages: dependency: transitive description: name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 url: "https://pub.dev" source: hosted - version: "0.6.5" + version: "0.6.7" json_annotation: dependency: transitive description: @@ -451,18 +499,18 @@ packages: dependency: transitive description: name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.13" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.5.0" material_segmented_control: dependency: "direct main" description: @@ -475,10 +523,10 @@ packages: dependency: transitive description: name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.9.1" mime: dependency: transitive description: @@ -579,10 +627,10 @@ packages: dependency: transitive description: name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.8.3" path_parsing: dependency: transitive description: @@ -671,6 +719,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + pointer_interceptor: + dependency: transitive + description: + name: pointer_interceptor + sha256: "6aa680b30d96dccef496933d00208ad25f07e047f644dc98ce03ec6141633a9a" + url: "https://pub.dev" + source: hosted + version: "0.9.3+4" pointycastle: dependency: transitive description: @@ -735,6 +791,22 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.0" + quill_html_editor: + dependency: "direct main" + description: + name: quill_html_editor + sha256: "16d09a35742aaa0059c1a332ab2cef4570c22053495d1b9dafd9d2573b837d94" + url: "https://pub.dev" + source: hosted + version: "2.1.9" + responsive_framework: + dependency: "direct main" + description: + name: responsive_framework + sha256: "97d4a8b9468c0ecaafe8566645d70cc59480e4b03704a1b936396e68775e2c34" + url: "https://pub.dev" + source: hosted + version: "1.1.0" rxdart: dependency: "direct main" description: @@ -776,10 +848,10 @@ packages: dependency: transitive description: name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" stack_trace: dependency: transitive description: @@ -824,10 +896,10 @@ packages: dependency: transitive description: name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" url: "https://pub.dev" source: hosted - version: "0.4.16" + version: "0.6.0" timing: dependency: transitive description: @@ -868,6 +940,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.2" + web: + dependency: transitive + description: + name: web + sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + url: "https://pub.dev" + source: hosted + version: "0.1.4-beta" web_socket_channel: dependency: transitive description: @@ -876,6 +956,38 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.0" + webview_flutter: + dependency: transitive + description: + name: webview_flutter + sha256: "789d52bd789373cc1e100fb634af2127e86c99cf9abde09499743270c5de8d00" + url: "https://pub.dev" + source: hosted + version: "4.2.2" + webview_flutter_android: + dependency: transitive + description: + name: webview_flutter_android + sha256: "532135f6f6b8030cd039f30eab23f340d650350e29f38e9b37d2eaad028f1018" + url: "https://pub.dev" + source: hosted + version: "3.8.0" + webview_flutter_platform_interface: + dependency: transitive + description: + name: webview_flutter_platform_interface + sha256: "656e2aeaef318900fffd21468b6ddc7958c7092a642f0e7220bac328b70d4a81" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + webview_flutter_wkwebview: + dependency: transitive + description: + name: webview_flutter_wkwebview + sha256: ecc9e9ea15216afc5ba3b1f14aa19414ceba526e57b19cebd970bfa91a0f4058 + url: "https://pub.dev" + source: hosted + version: "3.5.0" win32: dependency: transitive description: @@ -909,5 +1021,5 @@ packages: source: hosted version: "3.1.1" sdks: - dart: ">=2.18.0 <3.0.0" - flutter: ">=3.0.0" + dart: ">=3.1.0-185.0.dev <3.2.0" + flutter: ">=3.7.0" diff --git a/pubspec.yaml b/pubspec.yaml index c58e7a3..1c81910 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.0.1+2 +version: 1.0.2+3 environment: sdk: ">=2.16.2 <3.2.0" @@ -60,6 +60,8 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 + quill_html_editor: ^2.1.9 + responsive_framework: ^1.1.0 dev_dependencies: flutter_test: