1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-11-21 20:39:22 +00:00

Start update

This commit is contained in:
Pierre HUBERT 2021-02-07 17:09:08 +01:00
parent df915e1ca3
commit ee6e28426c
39 changed files with 163 additions and 110 deletions

View File

@ -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"

View File

@ -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

View File

@ -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
///

View File

@ -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();

View File

@ -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;

View File

@ -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
///

View File

@ -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:

View File

@ -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<bool> uploadAccountImage(File newImage) async =>
static Future<bool> 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();

View File

@ -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

View File

@ -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<String, String> args;
Map<String, File> files = Map();
Map<String, PickedFile> pickedFiles = Map();
Map<String, BytesFile> 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;

View File

@ -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
///

View File

@ -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,

View File

@ -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;
}

View File

@ -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,

View File

@ -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<int> pdf;
final PostKind kind;

View File

@ -6,4 +6,4 @@ import 'package:wakelock/wakelock.dart';
/// Interface for requesting device wake locking
Future<void> setWakeLock(bool enabled) async =>
await Wakelock.toggle(on: enabled);
await Wakelock.toggle(enable: enabled);

View File

@ -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(

View File

@ -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(),
),
];
}

View File

@ -24,7 +24,7 @@ class _AccountPrivacySettingsState extends State<AccountPrivacySettings> {
title: tr("Delete your account"),
subtitle:
tr("Permanently delete your account and all data related to it."),
onTap: _deleteAccount,
onPressed: (_)=>_deleteAccount,
)
])
]);

View File

@ -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,
),
],
)

View File

@ -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(),
)

View File

@ -58,7 +58,7 @@ class _ApplicationSettingsState extends State<ApplicationSettings> {
SettingsTile(
title: tr("About this application"),
subtitle: tr("Learn more about us"),
onTap: () => showAboutAppDialog(context),
onPressed: (_) => showAboutAppDialog(context),
)
],
);

View File

@ -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;

View File

@ -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,

View File

@ -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<CallScreen> {
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<CallScreen> {
switch (option) {
// Switch camera
case _PopupMenuOption.SWITCH_CAMERA:
await _localStream.getVideoTracks()[0].switchCamera();
await Helper.switchCamera(_localStream.getVideoTracks()[0]);
break;
// Stop streaming

View File

@ -112,7 +112,7 @@ class _GroupSettingsScreenState extends SafeState<GroupSettingsScreen> {
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<GroupSettingsScreen> {
// 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<GroupSettingsScreen> {
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<GroupSettingsScreen> {
tiles: [
SettingsTile(
title: tr("Delete group"),
onTap: _deleteGroup,
onPressed: (_) => _deleteGroup,
),
],
);

View File

@ -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,

View File

@ -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<PostTile> {
// Class members
TextEditingController _commentController = TextEditingController();
File _commentImage;
PickedFile _commentImage;
bool _submitting = false;
int _maxNumberOfCommentToShow = 10;

View File

@ -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),
),
),

View File

@ -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<PostCreateFormWidget> {
bool _isCreating = false;
final TextEditingController _postTextController = TextEditingController();
PostVisibilityLevel _postVisibilityLevel;
File _postImage;
PickedFile _postImage;
String _postURL;
List<int> _postPDF;
DateTime _timeEnd;
@ -278,13 +278,11 @@ class _PostCreateFormWidgetState extends State<PostCreateFormWidget> {
/// Pick a PDF for the new post
Future<void> _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,
);
}
}

View File

@ -28,7 +28,7 @@ class MultiChoicesSettingsTile<T> extends SettingsTile {
return SettingsTile(
title: title,
subtitle: choices.firstWhere((f) => f.id == currentValue).title,
onTap: () => _changeValue(context),
onPressed: (_) => _changeValue(context),
);
}

View File

@ -40,7 +40,7 @@ class TextEditSettingsTile extends SettingsTile {
return SettingsTile(
title: title,
subtitle: currValue,
onTap: readOnly ? null : () => _changeValue(context),
onPressed: (_)=>readOnly ? null : () => _changeValue(context),
);
}

View File

@ -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),

View File

@ -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;

View File

@ -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,

View File

@ -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<File> pickImage(BuildContext context) async {
Future<PickedFile> 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<File> 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);

View File

@ -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,

View File

@ -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:

View File

@ -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: