mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-11-21 20:39:22 +00:00
Start update
This commit is contained in:
parent
df915e1ca3
commit
ee6e28426c
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
///
|
||||
|
@ -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();
|
||||
|
||||
|
@ -336,7 +336,7 @@ class ConversationsHelper {
|
||||
);
|
||||
|
||||
// Check for image
|
||||
if (message.hasImage) request.addFile("image", message.image);
|
||||
if (message.hasImage) request.addPickedFile("image", message.image);
|
||||
|
||||
//Send the message
|
||||
APIResponse response;
|
||||
|
@ -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
|
||||
///
|
||||
|
@ -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:
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
///
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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(
|
||||
|
@ -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(),
|
||||
),
|
||||
];
|
||||
}
|
||||
|
@ -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,
|
||||
)
|
||||
])
|
||||
]);
|
||||
|
@ -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,
|
||||
),
|
||||
],
|
||||
)
|
||||
|
@ -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(),
|
||||
)
|
||||
|
@ -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),
|
||||
)
|
||||
],
|
||||
);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
),
|
||||
],
|
||||
);
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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),
|
||||
),
|
||||
),
|
||||
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -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),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -40,7 +40,7 @@ class TextEditSettingsTile extends SettingsTile {
|
||||
return SettingsTile(
|
||||
title: title,
|
||||
subtitle: currValue,
|
||||
onTap: readOnly ? null : () => _changeValue(context),
|
||||
onPressed: (_)=>readOnly ? null : () => _changeValue(context),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -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),
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
79
pubspec.lock
79
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:
|
||||
|
16
pubspec.yaml
16
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:
|
||||
|
Loading…
Reference in New Issue
Block a user