From ee6e28426c03af7df45282afbfe26a3eb67c26e7 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Sun, 7 Feb 2021 17:09:08 +0100 Subject: [PATCH] Start update --- android/app/build.gradle | 6 +- lib/helpers/api_helper.dart | 11 +++ lib/helpers/calls_helper.dart | 3 +- lib/helpers/comments_helper.dart | 2 +- lib/helpers/conversations_helper.dart | 4 +- lib/helpers/events_helper.dart | 3 +- lib/helpers/posts_helper.dart | 2 +- lib/helpers/settings_helper.dart | 9 +-- lib/helpers/websocket_helper.dart | 3 +- lib/models/api_request.dart | 7 ++ lib/models/call_member.dart | 2 +- lib/models/new_comment.dart | 5 +- lib/models/new_conversation_message.dart | 14 ++-- lib/models/new_emoji.dart | 5 +- lib/models/new_post.dart | 5 +- lib/plugins_interface/wake_lock.dart | 2 +- lib/ui/routes/main_route/tablet_route.dart | 2 +- .../settings/account_image_settings.dart | 12 +-- .../settings/account_privacy_settings.dart | 2 +- .../settings/account_security_settings.dart | 6 +- .../settings/account_settings_route.dart | 2 +- .../routes/settings/application_settings.dart | 2 +- .../custom_emojies_account_settings.dart | 5 +- .../settings/general_account_settings.dart | 2 +- lib/ui/screens/call_screen.dart | 7 +- lib/ui/screens/group_settings_screen.dart | 12 +-- .../screens/unread_conversations_screen.dart | 2 +- lib/ui/tiles/post_tile.dart | 4 +- lib/ui/widgets/login_scaffold.dart | 2 +- lib/ui/widgets/post_create_form_widget.dart | 12 +-- .../settings/multi_choices_settings_tile.dart | 2 +- .../settings/text_settings_edit_tile.dart | 2 +- .../conversation_window_container.dart | 2 +- lib/ui/widgets/text_widget.dart | 2 +- lib/utils/bbcode_parser.dart | 4 +- lib/utils/files_utils.dart | 7 +- lib/utils/ui_utils.dart | 4 +- pubspec.lock | 79 +++++++++++++++---- pubspec.yaml | 16 ++-- 39 files changed, 163 insertions(+), 110 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 6eda15b..1cf17cd 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -33,7 +33,7 @@ if (keystorePropertiesFile.exists()) { } android { - compileSdkVersion 29 + compileSdkVersion 30 compileOptions { @@ -50,8 +50,8 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "org.communiquons.comunic" - minSdkVersion 18 - targetSdkVersion 29 + minSdkVersion 21 + targetSdkVersion 30 versionCode flutterVersionCode.toInteger() versionName flutterVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/lib/helpers/api_helper.dart b/lib/helpers/api_helper.dart index 2251202..aeafeec 100644 --- a/lib/helpers/api_helper.dart +++ b/lib/helpers/api_helper.dart @@ -62,6 +62,17 @@ class APIHelper { contentType: v.type, ))); } + + // Process picked files + for (final key in request.pickedFiles.keys) { + var v = request.pickedFiles[key]; + data.files.add(MapEntry( + key, + MultipartFile.fromBytes( + await v.readAsBytes(), + filename: v.path.split("/").last, + ))); + } } // Execute the request diff --git a/lib/helpers/calls_helper.dart b/lib/helpers/calls_helper.dart index 3ab87e4..d021891 100644 --- a/lib/helpers/calls_helper.dart +++ b/lib/helpers/calls_helper.dart @@ -4,8 +4,7 @@ import 'package:comunic/helpers/websocket_helper.dart'; import 'package:comunic/lists/call_members_list.dart'; import 'package:comunic/models/call_config.dart'; import 'package:comunic/models/call_member.dart'; -import 'package:flutter_webrtc/rtc_ice_candidate.dart'; -import 'package:flutter_webrtc/rtc_session_description.dart'; +import 'package:flutter_webrtc/flutter_webrtc.dart'; /// Calls helper /// diff --git a/lib/helpers/comments_helper.dart b/lib/helpers/comments_helper.dart index f74bcde..d42372a 100644 --- a/lib/helpers/comments_helper.dart +++ b/lib/helpers/comments_helper.dart @@ -17,7 +17,7 @@ class CommentsHelper { "content": comment.hasContent ? comment.content : "", }); - if (comment.hasImage) request.addFile("image", comment.image); + if (comment.hasImage) request.addPickedFile("image", comment.image); final response = await request.execWithFiles(); diff --git a/lib/helpers/conversations_helper.dart b/lib/helpers/conversations_helper.dart index 56b66c8..44e792d 100644 --- a/lib/helpers/conversations_helper.dart +++ b/lib/helpers/conversations_helper.dart @@ -335,8 +335,8 @@ class ConversationsHelper { }, ); - //Check for image - if (message.hasImage) request.addFile("image", message.image); + // Check for image + if (message.hasImage) request.addPickedFile("image", message.image); //Send the message APIResponse response; diff --git a/lib/helpers/events_helper.dart b/lib/helpers/events_helper.dart index 62b0740..80aeb76 100644 --- a/lib/helpers/events_helper.dart +++ b/lib/helpers/events_helper.dart @@ -3,8 +3,7 @@ import 'dart:async'; import 'package:comunic/models/comment.dart'; import 'package:comunic/models/conversation_message.dart'; import 'package:event_bus/event_bus.dart'; -import 'package:flutter_webrtc/rtc_ice_candidate.dart'; -import 'package:flutter_webrtc/rtc_session_description.dart'; +import 'package:flutter_webrtc/flutter_webrtc.dart'; /// Events helper /// diff --git a/lib/helpers/posts_helper.dart b/lib/helpers/posts_helper.dart index ceb0a10..794b707 100644 --- a/lib/helpers/posts_helper.dart +++ b/lib/helpers/posts_helper.dart @@ -143,7 +143,7 @@ class PostsHelper { break; case PostKind.IMAGE: - request.addFile("image", post.image); + request.addPickedFile("image", post.image); break; case PostKind.WEB_LINK: diff --git a/lib/helpers/settings_helper.dart b/lib/helpers/settings_helper.dart index f5a1080..9ceb71c 100644 --- a/lib/helpers/settings_helper.dart +++ b/lib/helpers/settings_helper.dart @@ -1,11 +1,10 @@ -import 'dart:io'; - import 'package:comunic/enums/user_page_visibility.dart'; import 'package:comunic/models/account_image_settings.dart'; import 'package:comunic/models/api_request.dart'; import 'package:comunic/models/general_settings.dart'; import 'package:comunic/models/new_emoji.dart'; import 'package:comunic/models/security_settings.dart'; +import 'package:image_picker/image_picker.dart'; /// Settings helper /// @@ -92,9 +91,9 @@ class SettingsHelper { } /// Upload a new account image - static Future uploadAccountImage(File newImage) async => + static Future uploadAccountImage(PickedFile newImage) async => (await APIRequest(uri: "settings/upload_account_image", needLogin: true) - .addFile("picture", newImage) + .addPickedFile("picture", newImage) .execWithFiles()) .isOK; @@ -132,7 +131,7 @@ class SettingsHelper { uri: "settings/upload_custom_emoji", needLogin: true, args: {"shortcut": newEmoji.shortcut}) - .addFile("image", newEmoji.image) + .addPickedFile("image", newEmoji.image) .execWithFiles()) .assertOk(); diff --git a/lib/helpers/websocket_helper.dart b/lib/helpers/websocket_helper.dart index ec52fb3..68305cf 100644 --- a/lib/helpers/websocket_helper.dart +++ b/lib/helpers/websocket_helper.dart @@ -7,8 +7,7 @@ import 'package:comunic/helpers/events_helper.dart'; import 'package:comunic/models/api_request.dart'; import 'package:comunic/models/config.dart'; import 'package:comunic/models/ws_message.dart'; -import 'package:flutter_webrtc/rtc_ice_candidate.dart'; -import 'package:flutter_webrtc/rtc_session_description.dart'; +import 'package:flutter_webrtc/flutter_webrtc.dart'; import 'package:web_socket_channel/web_socket_channel.dart'; /// User web socket helper diff --git a/lib/models/api_request.dart b/lib/models/api_request.dart index 39dde84..c3b3b9c 100644 --- a/lib/models/api_request.dart +++ b/lib/models/api_request.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:comunic/helpers/api_helper.dart'; import 'package:comunic/models/api_response.dart'; import 'package:http_parser/http_parser.dart'; +import 'package:image_picker/image_picker.dart'; import 'package:meta/meta.dart'; /// API Request model @@ -28,6 +29,7 @@ class APIRequest { final bool needLogin; Map args; Map files = Map(); + Map pickedFiles = Map(); Map bytesFiles = Map(); APIRequest({@required this.uri, this.needLogin = false, this.args}) @@ -68,6 +70,11 @@ class APIRequest { return this; } + APIRequest addPickedFile(String name, PickedFile file) { + pickedFiles[name] = file; + return this; + } + APIRequest addBytesFile(String name, BytesFile file) { this.bytesFiles[name] = file; return this; diff --git a/lib/models/call_member.dart b/lib/models/call_member.dart index 80a3584..f74e224 100644 --- a/lib/models/call_member.dart +++ b/lib/models/call_member.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_webrtc/media_stream.dart'; +import 'package:flutter_webrtc/flutter_webrtc.dart'; /// Single call member information /// diff --git a/lib/models/new_comment.dart b/lib/models/new_comment.dart index f88d747..4b2542f 100644 --- a/lib/models/new_comment.dart +++ b/lib/models/new_comment.dart @@ -1,5 +1,4 @@ -import 'dart:io'; - +import 'package:image_picker/image_picker.dart'; import 'package:meta/meta.dart'; /// New comment information @@ -9,7 +8,7 @@ import 'package:meta/meta.dart'; class NewComment { final int postID; final String content; - final File image; + final PickedFile image; const NewComment({ @required this.postID, diff --git a/lib/models/new_conversation_message.dart b/lib/models/new_conversation_message.dart index 94d94a2..63d2d08 100644 --- a/lib/models/new_conversation_message.dart +++ b/lib/models/new_conversation_message.dart @@ -1,5 +1,4 @@ -import 'dart:io'; - +import 'package:image_picker/image_picker.dart'; import 'package:meta/meta.dart'; /// New conversation message model @@ -11,15 +10,14 @@ import 'package:meta/meta.dart'; class NewConversationMessage { final int conversationID; final String message; - final File image; + final PickedFile image; - NewConversationMessage({ - @required this.conversationID, - @required this.message, - this.image - }) : assert(conversationID != null), + NewConversationMessage( + {@required this.conversationID, @required this.message, this.image}) + : assert(conversationID != null), assert(image != null || message != null); bool get hasMessage => message != null; + bool get hasImage => image != null; } diff --git a/lib/models/new_emoji.dart b/lib/models/new_emoji.dart index de96983..363d761 100644 --- a/lib/models/new_emoji.dart +++ b/lib/models/new_emoji.dart @@ -1,6 +1,5 @@ -import 'dart:io'; - import 'package:flutter/material.dart'; +import 'package:image_picker/image_picker.dart'; /// New emoji information /// @@ -8,7 +7,7 @@ import 'package:flutter/material.dart'; class NewEmoji { final String shortcut; - final File image; + final PickedFile image; const NewEmoji({ @required this.shortcut, diff --git a/lib/models/new_post.dart b/lib/models/new_post.dart index 7a5236a..91deb27 100644 --- a/lib/models/new_post.dart +++ b/lib/models/new_post.dart @@ -1,8 +1,7 @@ -import 'dart:io'; - import 'package:comunic/enums/post_kind.dart'; import 'package:comunic/enums/post_target.dart'; import 'package:comunic/enums/post_visibility_level.dart'; +import 'package:image_picker/image_picker.dart'; import 'package:meta/meta.dart'; /// New post information @@ -28,7 +27,7 @@ class NewPost { final int targetID; final PostVisibilityLevel visibility; final String content; - final File image; + final PickedFile image; final String url; final List pdf; final PostKind kind; diff --git a/lib/plugins_interface/wake_lock.dart b/lib/plugins_interface/wake_lock.dart index d0594ef..4b546bb 100644 --- a/lib/plugins_interface/wake_lock.dart +++ b/lib/plugins_interface/wake_lock.dart @@ -6,4 +6,4 @@ import 'package:wakelock/wakelock.dart'; /// Interface for requesting device wake locking Future setWakeLock(bool enabled) async => - await Wakelock.toggle(on: enabled); + await Wakelock.toggle(enable: enabled); diff --git a/lib/ui/routes/main_route/tablet_route.dart b/lib/ui/routes/main_route/tablet_route.dart index 84685f0..720355f 100644 --- a/lib/ui/routes/main_route/tablet_route.dart +++ b/lib/ui/routes/main_route/tablet_route.dart @@ -57,7 +57,7 @@ class _TabletRouteState extends MainController { Widget _buildLeftPane() => Theme( data: Theme.of(context).copyWith( - textTheme: TextTheme(body1: TextStyle(color: Colors.white)), + textTheme: TextTheme(bodyText2: TextStyle(color: Colors.white)), iconTheme: IconThemeData(color: Colors.white), ), child: Container( diff --git a/lib/ui/routes/settings/account_image_settings.dart b/lib/ui/routes/settings/account_image_settings.dart index bcc14a0..bf2bff4 100644 --- a/lib/ui/routes/settings/account_image_settings.dart +++ b/lib/ui/routes/settings/account_image_settings.dart @@ -74,13 +74,13 @@ class _AccountImageSettingsScreenState // Upload new account image SettingsTile( title: tr("Upload an account image"), - onTap: () => _uploadAccountImage(), + onPressed: (_) => _uploadAccountImage(), ), // Generate a random account image SettingsTile( title: tr("Generate a random account image"), - onTap: () => _generateRandomAccountImage(), + onPressed: (_) => _generateRandomAccountImage(), ), ]; } @@ -100,19 +100,19 @@ class _AccountImageSettingsScreenState // Upload new account image SettingsTile( title: tr("Upload new account image"), - onTap: () => _uploadAccountImage(), + onPressed: (_) => _uploadAccountImage(), ), // Generate a random account image SettingsTile( title: tr("Generate a random account image"), - onTap: () => _generateRandomAccountImage(), + onPressed: (_) => _generateRandomAccountImage(), ), // Change account image visibility SettingsTile( title: tr("Change account image visibility"), - onTap: () => _chooseAccountImageVisibility(), + onPressed: (_) => _chooseAccountImageVisibility(), subtitle: tr("Current level: %level%", args: { "level": _settings.visibility == AccountImageVisibilityLevels.EVERYONE @@ -126,7 +126,7 @@ class _AccountImageSettingsScreenState // Delete account image SettingsTile( title: tr("Delete account image"), - onTap: () => _deleteAccountImage(), + onPressed: (_) => _deleteAccountImage(), ), ]; } diff --git a/lib/ui/routes/settings/account_privacy_settings.dart b/lib/ui/routes/settings/account_privacy_settings.dart index c931d63..8ffbe49 100644 --- a/lib/ui/routes/settings/account_privacy_settings.dart +++ b/lib/ui/routes/settings/account_privacy_settings.dart @@ -24,7 +24,7 @@ class _AccountPrivacySettingsState extends State { title: tr("Delete your account"), subtitle: tr("Permanently delete your account and all data related to it."), - onTap: _deleteAccount, + onPressed: (_)=>_deleteAccount, ) ]) ]); diff --git a/lib/ui/routes/settings/account_security_settings.dart b/lib/ui/routes/settings/account_security_settings.dart index 81f71a5..7f85074 100644 --- a/lib/ui/routes/settings/account_security_settings.dart +++ b/lib/ui/routes/settings/account_security_settings.dart @@ -30,19 +30,19 @@ class _AccountSecuritySettingsScreenState tiles: [ SettingsTile( title: tr("Change password"), - onTap: _changePassword, + onPressed: (_) => _changePassword, ), SettingsTile( title: tr("Change your security questions"), subtitle: tr( "Your security questions can be used to recover an access to your account when you loose your password..."), - onTap: _changeSecurityQuestions, + onPressed: (_) => _changeSecurityQuestions, ), SettingsTile( title: tr("Disconnect all your devices"), subtitle: tr( "Disconnect all your devices from Comunic, including the current one. Use this option if one of the device you use for Comunic was stolen."), - onTap: _disconnectAllDevices, + onPressed: (_) => _disconnectAllDevices, ), ], ) diff --git a/lib/ui/routes/settings/account_settings_route.dart b/lib/ui/routes/settings/account_settings_route.dart index f267e88..c50cb68 100644 --- a/lib/ui/routes/settings/account_settings_route.dart +++ b/lib/ui/routes/settings/account_settings_route.dart @@ -152,7 +152,7 @@ class __AccountSettingsBodyState extends State<_AccountSettingsBody> { title: f.title, leading: Icon(f.icon), subtitle: f.subtitle, - onTap: () => _openSectionsAsNewRoute(f), + onPressed: (_) => _openSectionsAsNewRoute(f), )) .toList(), ) diff --git a/lib/ui/routes/settings/application_settings.dart b/lib/ui/routes/settings/application_settings.dart index 232350f..97a23a5 100644 --- a/lib/ui/routes/settings/application_settings.dart +++ b/lib/ui/routes/settings/application_settings.dart @@ -58,7 +58,7 @@ class _ApplicationSettingsState extends State { SettingsTile( title: tr("About this application"), subtitle: tr("Learn more about us"), - onTap: () => showAboutAppDialog(context), + onPressed: (_) => showAboutAppDialog(context), ) ], ); diff --git a/lib/ui/routes/settings/custom_emojies_account_settings.dart b/lib/ui/routes/settings/custom_emojies_account_settings.dart index 10d4c67..cb1b5e2 100644 --- a/lib/ui/routes/settings/custom_emojies_account_settings.dart +++ b/lib/ui/routes/settings/custom_emojies_account_settings.dart @@ -1,5 +1,3 @@ -import 'dart:io'; - import 'package:comunic/helpers/settings_helper.dart'; import 'package:comunic/helpers/users_helper.dart'; import 'package:comunic/lists/custom_emojies_list.dart'; @@ -14,6 +12,7 @@ import 'package:comunic/utils/input_utils.dart'; import 'package:comunic/utils/intl_utils.dart'; import 'package:comunic/utils/ui_utils.dart'; import 'package:flutter/material.dart'; +import 'package:image_picker/image_picker.dart'; /// Emojies account settings /// @@ -137,7 +136,7 @@ class _NewCustomEmojiDialog extends StatefulWidget { class _NewCustomEmojiDialogState extends State<_NewCustomEmojiDialog> { final _controller = TextEditingController(); - File _file; + PickedFile _file; bool get _hasImage => _file != null; diff --git a/lib/ui/routes/settings/general_account_settings.dart b/lib/ui/routes/settings/general_account_settings.dart index de695e9..8ac2e75 100644 --- a/lib/ui/routes/settings/general_account_settings.dart +++ b/lib/ui/routes/settings/general_account_settings.dart @@ -198,7 +198,7 @@ class _GeneralAccountSettingsScreenState SettingsTile( title: tr("Virtual directory (optional)"), subtitle: _settings.virtualDirectory, - onTap: () async { + onPressed: (_) async { final dir = await showVirtualDirectoryDialog( context: context, initialDirectory: _settings.virtualDirectory, diff --git a/lib/ui/screens/call_screen.dart b/lib/ui/screens/call_screen.dart index 9785233..e59c480 100644 --- a/lib/ui/screens/call_screen.dart +++ b/lib/ui/screens/call_screen.dart @@ -17,8 +17,7 @@ import 'package:comunic/utils/account_utils.dart'; import 'package:comunic/utils/intl_utils.dart'; import 'package:comunic/utils/ui_utils.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_webrtc/rtc_peerconnection.dart'; -import 'package:flutter_webrtc/webrtc.dart'; +import 'package:flutter_webrtc/flutter_webrtc.dart'; /// Call screen /// @@ -216,7 +215,7 @@ class _CallScreenState extends SafeState { await _stopStreaming(); // Request user media - _localStream = await navigator.getUserMedia({ + _localStream = await navigator.mediaDevices.getUserMedia({ "audio": true, "video": !includeVideo ? false @@ -451,7 +450,7 @@ class _CallScreenState extends SafeState { switch (option) { // Switch camera case _PopupMenuOption.SWITCH_CAMERA: - await _localStream.getVideoTracks()[0].switchCamera(); + await Helper.switchCamera(_localStream.getVideoTracks()[0]); break; // Stop streaming diff --git a/lib/ui/screens/group_settings_screen.dart b/lib/ui/screens/group_settings_screen.dart index c2569bc..9e0148e 100644 --- a/lib/ui/screens/group_settings_screen.dart +++ b/lib/ui/screens/group_settings_screen.dart @@ -112,7 +112,7 @@ class _GroupSettingsScreenState extends SafeState { SettingsTile( title: tr("Virtual directory (optional)"), subtitle: _groupSettings.virtualDirectory, - onTap: () async { + onPressed: (_) async { final newDir = await showVirtualDirectoryDialog( context: context, initialDirectory: _groupSettings.virtualDirectory, @@ -257,19 +257,19 @@ class _GroupSettingsScreenState extends SafeState { // Upload a new logo SettingsTile( title: tr("Upload a new logo"), - onTap: _uploadNewLogo, + onPressed: (_) => _uploadNewLogo, ), // Generate a new random logo SettingsTile( title: tr("Generate a new random logo"), - onTap: _generateRandomLogo, + onPressed: (_) => _generateRandomLogo, ), // Delete current logo SettingsTile( title: tr("Delete logo"), - onTap: _deleteLogo, + onPressed: (_) => _deleteLogo, ), ], ); @@ -279,7 +279,7 @@ class _GroupSettingsScreenState extends SafeState { void _uploadNewLogo() async { try { final logo = await pickImage(context); - final bytes = logo.readAsBytesSync(); + final bytes = await logo.readAsBytes(); await _doUploadLogo(bytes); } catch (e, stack) { print("Could not upload new logo! $e\n$stack"); @@ -326,7 +326,7 @@ class _GroupSettingsScreenState extends SafeState { tiles: [ SettingsTile( title: tr("Delete group"), - onTap: _deleteGroup, + onPressed: (_) => _deleteGroup, ), ], ); diff --git a/lib/ui/screens/unread_conversations_screen.dart b/lib/ui/screens/unread_conversations_screen.dart index c251b29..c4cadb5 100644 --- a/lib/ui/screens/unread_conversations_screen.dart +++ b/lib/ui/screens/unread_conversations_screen.dart @@ -76,7 +76,7 @@ class _UnreadConversationsScreenState leading: AccountImageWidget(user: user), title: Text(user.displayName), subtitle: RichText( - text: TextSpan(style: Theme.of(context).textTheme.body1, children: [ + text: TextSpan(style: Theme.of(context).textTheme.bodyText2, children: [ TextSpan(text: conv.convName.isNotEmpty ? conv.convName + "\n" : ""), TextSpan( text: conv.message, diff --git a/lib/ui/tiles/post_tile.dart b/lib/ui/tiles/post_tile.dart index 41af5d5..3946537 100644 --- a/lib/ui/tiles/post_tile.dart +++ b/lib/ui/tiles/post_tile.dart @@ -1,4 +1,3 @@ -import 'dart:io'; import 'dart:math'; import 'package:comunic/enums/post_kind.dart'; @@ -26,6 +25,7 @@ import 'package:comunic/utils/navigation_utils.dart'; import 'package:comunic/utils/post_utils.dart'; import 'package:comunic/utils/ui_utils.dart'; import 'package:flutter/material.dart'; +import 'package:image_picker/image_picker.dart'; import 'package:url_launcher/url_launcher.dart'; /// Single posts tile @@ -76,7 +76,7 @@ class _PostTileState extends State { // Class members TextEditingController _commentController = TextEditingController(); - File _commentImage; + PickedFile _commentImage; bool _submitting = false; int _maxNumberOfCommentToShow = 10; diff --git a/lib/ui/widgets/login_scaffold.dart b/lib/ui/widgets/login_scaffold.dart index 9950c62..b02b7a9 100644 --- a/lib/ui/widgets/login_scaffold.dart +++ b/lib/ui/widgets/login_scaffold.dart @@ -36,7 +36,7 @@ class LoginScaffold extends StatelessWidget { ), scaffoldBackgroundColor: Colors.indigo.shade900, textTheme: TextTheme( - body1: TextStyle(color: Colors.white), + bodyText2: TextStyle(color: Colors.white), button: TextStyle(color: Colors.white), ), ), diff --git a/lib/ui/widgets/post_create_form_widget.dart b/lib/ui/widgets/post_create_form_widget.dart index b5e28cf..e8fc90e 100644 --- a/lib/ui/widgets/post_create_form_widget.dart +++ b/lib/ui/widgets/post_create_form_widget.dart @@ -1,4 +1,3 @@ -import 'dart:io'; import 'package:comunic/enums/post_kind.dart'; import 'package:comunic/enums/post_target.dart'; @@ -15,6 +14,7 @@ import 'package:comunic/utils/post_utils.dart'; import 'package:comunic/utils/ui_utils.dart'; import 'package:file_picker_cross/file_picker_cross.dart'; import 'package:flutter/material.dart'; +import 'package:image_picker/image_picker.dart'; /// Widget that allows to create posts /// @@ -51,7 +51,7 @@ class _PostCreateFormWidgetState extends State { bool _isCreating = false; final TextEditingController _postTextController = TextEditingController(); PostVisibilityLevel _postVisibilityLevel; - File _postImage; + PickedFile _postImage; String _postURL; List _postPDF; DateTime _timeEnd; @@ -278,13 +278,11 @@ class _PostCreateFormWidgetState extends State { /// Pick a PDF for the new post Future _pickPDFForPost() async { try { - final picker = FilePickerCross( + final picker = await FilePickerCross.importFromStorage( type: FileTypeCross.custom, fileExtension: "pdf", ); - if (!await picker.pick()) return; - _resetPostSelection(); setState(() { @@ -416,7 +414,9 @@ class _PostOptionWidget extends StatelessWidget { onPressed: onTap, color: hasCustomColor ? customColor - : selected ? _ActiveButtonsColor : _InactiveButtonsColor, + : selected + ? _ActiveButtonsColor + : _InactiveButtonsColor, ); } } diff --git a/lib/ui/widgets/settings/multi_choices_settings_tile.dart b/lib/ui/widgets/settings/multi_choices_settings_tile.dart index 57e1d8e..ab81ab0 100644 --- a/lib/ui/widgets/settings/multi_choices_settings_tile.dart +++ b/lib/ui/widgets/settings/multi_choices_settings_tile.dart @@ -28,7 +28,7 @@ class MultiChoicesSettingsTile extends SettingsTile { return SettingsTile( title: title, subtitle: choices.firstWhere((f) => f.id == currentValue).title, - onTap: () => _changeValue(context), + onPressed: (_) => _changeValue(context), ); } diff --git a/lib/ui/widgets/settings/text_settings_edit_tile.dart b/lib/ui/widgets/settings/text_settings_edit_tile.dart index 4f892c4..c1a6238 100644 --- a/lib/ui/widgets/settings/text_settings_edit_tile.dart +++ b/lib/ui/widgets/settings/text_settings_edit_tile.dart @@ -40,7 +40,7 @@ class TextEditSettingsTile extends SettingsTile { return SettingsTile( title: title, subtitle: currValue, - onTap: readOnly ? null : () => _changeValue(context), + onPressed: (_)=>readOnly ? null : () => _changeValue(context), ); } diff --git a/lib/ui/widgets/tablet_mode/conversations/conversation_window_container.dart b/lib/ui/widgets/tablet_mode/conversations/conversation_window_container.dart index 6817cb0..22d672b 100644 --- a/lib/ui/widgets/tablet_mode/conversations/conversation_window_container.dart +++ b/lib/ui/widgets/tablet_mode/conversations/conversation_window_container.dart @@ -44,7 +44,7 @@ class ConversationWindowContainer extends StatelessWidget { appBar: AppBarWrapper( height: 40, appBar: AppBar( - textTheme: TextTheme(title: TextStyle(fontSize: 15)), + textTheme: TextTheme(headline6: TextStyle(fontSize: 15)), backgroundColor: appBarBgColor, leading: icon, title: GestureDetector(child: title, onTap: onToggleCollapse), diff --git a/lib/ui/widgets/text_widget.dart b/lib/ui/widgets/text_widget.dart index 249bd62..7fb397c 100644 --- a/lib/ui/widgets/text_widget.dart +++ b/lib/ui/widgets/text_widget.dart @@ -33,7 +33,7 @@ class TextWidget extends StatelessWidget { Widget build(BuildContext context) { if (this.content.isNull || this.content.isEmpty) return Text(""); - var usedStyle = style == null ? Theme.of(context).textTheme.body1 : style; + var usedStyle = style == null ? Theme.of(context).textTheme.bodyText2 : style; var content = this.content.parsedString; diff --git a/lib/utils/bbcode_parser.dart b/lib/utils/bbcode_parser.dart index b339065..f5a5d9a 100644 --- a/lib/utils/bbcode_parser.dart +++ b/lib/utils/bbcode_parser.dart @@ -32,7 +32,7 @@ class BBCodeParsedWidget extends StatelessWidget { } /// Initialize parsing - static _Element _parse(String text, {_ElementStyle style}) { + static _Element _parse(String text) { try { return _parseRecur( text: text, @@ -213,7 +213,7 @@ class _ElementStyle { /// Generate corresponding TextStyle TextStyle toTextStyle(BuildContext context) { - return Theme.of(context).textTheme.body1.copyWith( + return Theme.of(context).textTheme.bodyText2.copyWith( decoration: decoration, fontWeight: fontWeight, fontStyle: fontStyle, diff --git a/lib/utils/files_utils.dart b/lib/utils/files_utils.dart index 38dfee2..dd4b0c0 100644 --- a/lib/utils/files_utils.dart +++ b/lib/utils/files_utils.dart @@ -1,5 +1,3 @@ -import 'dart:io'; - import 'package:comunic/utils/intl_utils.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; @@ -13,7 +11,7 @@ enum _ChooseImageSource { GALLERY, CAMERA } /// Ask the user to choose an image, either from the gallery or using the camera /// /// Returns null in case of failure -Future pickImage(BuildContext context) async { +Future pickImage(BuildContext context) async { /// First, we ask the user to choose between image picker and camera final result = await showDialog<_ChooseImageSource>( context: context, @@ -42,8 +40,7 @@ Future pickImage(BuildContext context) async { ); if (result == null) return null; - - return await ImagePicker.pickImage( + return await ImagePicker().getImage( source: result == _ChooseImageSource.CAMERA ? ImageSource.camera : ImageSource.gallery); diff --git a/lib/utils/ui_utils.dart b/lib/utils/ui_utils.dart index 839dc43..8bab2d7 100644 --- a/lib/utils/ui_utils.dart +++ b/lib/utils/ui_utils.dart @@ -39,8 +39,8 @@ Widget buildErrorCard(String message, if (hide) return Container(); return Theme( - data: - ThemeData(textTheme: TextTheme(body1: TextStyle(color: Colors.white))), + data: ThemeData( + textTheme: TextTheme(bodyText2: TextStyle(color: Colors.white))), child: Card( elevation: 2.0, color: Colors.red, diff --git a/pubspec.lock b/pubspec.lock index 440b9f6..c7ff26f 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -70,7 +70,7 @@ packages: name: connectivity url: "https://pub.dartlang.org" source: hosted - version: "0.4.9+5" + version: "2.0.2" connectivity_for_web: dependency: transitive description: @@ -127,6 +127,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.0.10" + disk_space: + dependency: transitive + description: + name: disk_space + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.3" event_bus: dependency: "direct main" description: @@ -168,21 +175,14 @@ packages: name: file_picker url: "https://pub.dartlang.org" source: hosted - version: "1.13.3" + version: "2.1.6" file_picker_cross: dependency: "direct main" description: name: file_picker_cross url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" - file_picker_platform_interface: - dependency: transitive - description: - name: file_picker_platform_interface - url: "https://pub.dartlang.org" - source: hosted - version: "1.3.1" + version: "4.2.8" flutter: dependency: "direct main" description: flutter @@ -232,7 +232,7 @@ packages: name: flutter_webrtc url: "https://pub.dartlang.org" source: hosted - version: "0.2.8" + version: "0.5.8" html: dependency: "direct main" description: @@ -282,6 +282,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.6" + import_js_library: + dependency: transitive + description: + name: import_js_library + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" intl: dependency: "direct main" description: @@ -289,6 +296,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.16.1" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.2" matcher: dependency: transitive description: @@ -303,6 +317,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.3.0-nullsafety.3" + mime: + dependency: transitive + description: + name: mime + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.7" octo_image: dependency: transitive description: @@ -310,6 +331,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.3.0" + package_info: + dependency: transitive + description: + name: package_info + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.3+4" path: dependency: transitive description: @@ -372,14 +400,14 @@ packages: name: photo_view url: "https://pub.dartlang.org" source: hosted - version: "0.9.2" + version: "0.10.3" pie_chart: dependency: "direct main" description: name: pie_chart url: "https://pub.dartlang.org" source: hosted - version: "3.1.1" + version: "4.0.1" platform: dependency: transitive description: @@ -421,7 +449,14 @@ packages: name: settings_ui url: "https://pub.dartlang.org" source: hosted - version: "0.3.0" + version: "0.5.0" + share: + dependency: transitive + description: + name: share + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.5+4" shared_preferences: dependency: "direct main" description: @@ -601,7 +636,21 @@ packages: name: wakelock url: "https://pub.dartlang.org" source: hosted - version: "0.1.4+2" + version: "0.2.1+1" + wakelock_platform_interface: + dependency: transitive + description: + name: wakelock_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.0+1" + wakelock_web: + dependency: transitive + description: + name: wakelock_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.0+3" web_socket_channel: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 457e3de..634e593 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: # The HTTP client is used to make requests on the Comunic API dio: ^3.0.9 - http_parser: ^3.1.3 + http_parser: ^3.1.4 # This plugins allows to load remote images cached_network_image: ^2.0.0 @@ -47,7 +47,7 @@ dependencies: html: ^0.14.0+3 # Module that display the charts for the surveys - pie_chart: ^3.1.1 + pie_chart: ^4.0.1 # Get current system language intl: ^0.16.1 @@ -56,7 +56,7 @@ dependencies: flutter_emoji: ^2.2.1+1 # Build settings UI - settings_ui: ^0.3.0 + settings_ui: ^0.5.0 # Generate identicons identicon: ^0.1.1 @@ -65,10 +65,10 @@ dependencies: random_string: ^2.0.1 # Display zoomable images - photo_view: ^0.9.2 + photo_view: ^0.10.3 # Check Internet connection - connectivity: ^0.4.8+2 + connectivity: ^2.0.2 # Establish WebSocket connections web_socket_channel: ^1.1.0 @@ -77,13 +77,13 @@ dependencies: event_bus: ^1.1.1 # WebRTC calls - flutter_webrtc: ^0.2.7 + flutter_webrtc: ^0.5.8 # Prevent phone from auto-locking during calls - wakelock: ^0.1.4+1 + wakelock: ^0.2.1+1 # Pick any kind of file - file_picker_cross: ^2.0.0 + file_picker_cross: ^4.2.8 dev_dependencies: flutter_test: