mirror of
https://gitlab.com/comunic/comunicmobile
synced 2025-06-19 08:15:16 +00:00
Start to fix null safety migration errors
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
|
||||
/// Account image settings
|
||||
///
|
||||
@ -7,14 +7,14 @@ import 'package:flutter/widgets.dart';
|
||||
enum AccountImageVisibilityLevels { EVERYONE, COMUNIC_USERS, FRIENDS_ONLY }
|
||||
|
||||
class AccountImageSettings {
|
||||
final bool/*!*/ hasImage;
|
||||
final String/*!*/ imageURL;
|
||||
final AccountImageVisibilityLevels/*!*/ visibility;
|
||||
final bool hasImage;
|
||||
final String imageURL;
|
||||
final AccountImageVisibilityLevels visibility;
|
||||
|
||||
const AccountImageSettings({
|
||||
@required this.hasImage,
|
||||
@required this.imageURL,
|
||||
@required this.visibility,
|
||||
required this.hasImage,
|
||||
required this.imageURL,
|
||||
required this.visibility,
|
||||
}) : assert(hasImage != null),
|
||||
assert(imageURL != null),
|
||||
assert(visibility != null);
|
||||
|
@ -1,7 +1,6 @@
|
||||
import 'package:comunic/enums/likes_type.dart';
|
||||
import 'package:comunic/models/conversation.dart';
|
||||
import 'package:comunic/models/like_element.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'group.dart';
|
||||
|
||||
@ -10,34 +9,34 @@ import 'group.dart';
|
||||
/// @author Pierre Hubert
|
||||
|
||||
class AdvancedGroupInfo extends Group implements LikeElement {
|
||||
bool isMembersListPublic;
|
||||
final int timeCreate;
|
||||
bool? isMembersListPublic;
|
||||
final int? timeCreate;
|
||||
String description;
|
||||
String url;
|
||||
int likes;
|
||||
bool userLike;
|
||||
List<Conversation> conversations;
|
||||
bool/*!*/ isForezGroup;
|
||||
List<Conversation>? conversations;
|
||||
bool isForezGroup;
|
||||
|
||||
AdvancedGroupInfo({
|
||||
@required int id,
|
||||
@required String name,
|
||||
@required String iconURL,
|
||||
@required int numberMembers,
|
||||
@required GroupMembershipLevel membershipLevel,
|
||||
@required GroupVisibilityLevel visibilityLevel,
|
||||
@required GroupRegistrationLevel registrationLevel,
|
||||
@required GroupPostCreationLevel postCreationLevel,
|
||||
@required String virtualDirectory,
|
||||
@required bool following,
|
||||
@required this.isMembersListPublic,
|
||||
@required this.timeCreate,
|
||||
@required this.description,
|
||||
@required this.url,
|
||||
@required this.likes,
|
||||
@required this.userLike,
|
||||
@required this.conversations,
|
||||
@required this.isForezGroup,
|
||||
required int id,
|
||||
required String name,
|
||||
required String iconURL,
|
||||
required int numberMembers,
|
||||
required GroupMembershipLevel membershipLevel,
|
||||
required GroupVisibilityLevel visibilityLevel,
|
||||
required GroupRegistrationLevel registrationLevel,
|
||||
required GroupPostCreationLevel postCreationLevel,
|
||||
required String virtualDirectory,
|
||||
required bool following,
|
||||
required this.isMembersListPublic,
|
||||
required this.timeCreate,
|
||||
required this.description,
|
||||
required this.url,
|
||||
required this.likes,
|
||||
required this.userLike,
|
||||
required this.conversations,
|
||||
required this.isForezGroup,
|
||||
}) : assert(isForezGroup != null),
|
||||
super(
|
||||
id: id,
|
||||
|
@ -3,42 +3,41 @@ import 'package:comunic/enums/user_page_visibility.dart';
|
||||
import 'package:comunic/lists/custom_emojies_list.dart';
|
||||
import 'package:comunic/models/like_element.dart';
|
||||
import 'package:comunic/models/user.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
/// Advanced user information
|
||||
///
|
||||
/// @author Pierre HUBERT
|
||||
|
||||
class AdvancedUserInfo extends User implements LikeElement {
|
||||
final String emailAddress;
|
||||
final String/*!*/ publicNote;
|
||||
final bool/*!*/ canPostTexts;
|
||||
final bool/*!*/ isFriendsListPublic;
|
||||
final int/*!*/ numberFriends;
|
||||
final int/*!*/ accountCreationTime;
|
||||
final String/*!*/ personalWebsite;
|
||||
final String location;
|
||||
bool/*!*/ userLike;
|
||||
int/*!*/ likes;
|
||||
final String? emailAddress;
|
||||
final String publicNote;
|
||||
final bool canPostTexts;
|
||||
final bool isFriendsListPublic;
|
||||
final int numberFriends;
|
||||
final int accountCreationTime;
|
||||
final String personalWebsite;
|
||||
final String? location;
|
||||
bool userLike;
|
||||
int likes;
|
||||
|
||||
AdvancedUserInfo({
|
||||
@required int id,
|
||||
@required String firstName,
|
||||
@required String lastName,
|
||||
@required UserPageVisibility pageVisibility,
|
||||
@required String virtualDirectory,
|
||||
@required String accountImageURL,
|
||||
@required CustomEmojiesList customEmojies,
|
||||
@required this.emailAddress,
|
||||
@required this.publicNote,
|
||||
@required this.canPostTexts,
|
||||
@required this.isFriendsListPublic,
|
||||
@required this.numberFriends,
|
||||
@required this.accountCreationTime,
|
||||
@required this.personalWebsite,
|
||||
@required this.location,
|
||||
@required this.userLike,
|
||||
@required this.likes,
|
||||
required int id,
|
||||
required String firstName,
|
||||
required String lastName,
|
||||
required UserPageVisibility pageVisibility,
|
||||
required String? virtualDirectory,
|
||||
required String accountImageURL,
|
||||
required CustomEmojiesList customEmojies,
|
||||
required this.emailAddress,
|
||||
required this.publicNote,
|
||||
required this.canPostTexts,
|
||||
required this.isFriendsListPublic,
|
||||
required this.numberFriends,
|
||||
required this.accountCreationTime,
|
||||
required this.personalWebsite,
|
||||
required this.location,
|
||||
required this.userLike,
|
||||
required this.likes,
|
||||
}) : assert(publicNote != null),
|
||||
assert(canPostTexts != null),
|
||||
assert(isFriendsListPublic != null),
|
||||
@ -60,9 +59,9 @@ class AdvancedUserInfo extends User implements LikeElement {
|
||||
|
||||
bool get hasPersonalWebsite => personalWebsite.isNotEmpty;
|
||||
|
||||
bool get hasEmailAddress => emailAddress != null && emailAddress.isNotEmpty;
|
||||
bool get hasEmailAddress => emailAddress != null && emailAddress!.isNotEmpty;
|
||||
|
||||
bool get hasLocation => location != null && location.isNotEmpty;
|
||||
bool get hasLocation => location != null && location!.isNotEmpty;
|
||||
|
||||
@override
|
||||
LikesType get likeType => LikesType.USER;
|
||||
|
@ -4,7 +4,6 @@ import 'package:comunic/helpers/api_helper.dart';
|
||||
import 'package:comunic/models/api_response.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:http_parser/http_parser.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
/// API Request model
|
||||
///
|
||||
@ -14,8 +13,8 @@ import 'package:meta/meta.dart';
|
||||
|
||||
class BytesFile {
|
||||
final String filename;
|
||||
final List<int> bytes;
|
||||
final MediaType type;
|
||||
final List<int>? bytes;
|
||||
final MediaType? type;
|
||||
|
||||
const BytesFile(
|
||||
this.filename,
|
||||
@ -25,15 +24,15 @@ class BytesFile {
|
||||
}
|
||||
|
||||
class APIRequest {
|
||||
final String/*!*/ uri;
|
||||
final bool/*!*/ needLogin;
|
||||
ProgressCallback progressCallback;
|
||||
CancelToken cancelToken;
|
||||
Map<String, String> args;
|
||||
final String uri;
|
||||
final bool needLogin;
|
||||
ProgressCallback? progressCallback;
|
||||
CancelToken? cancelToken;
|
||||
Map<String, String?>? args;
|
||||
Map<String, File> files = Map();
|
||||
Map<String, BytesFile> bytesFiles = Map();
|
||||
Map<String, BytesFile?> bytesFiles = Map();
|
||||
|
||||
APIRequest({@required this.uri, this.needLogin = false, this.args})
|
||||
APIRequest({required this.uri, this.needLogin = false, this.args})
|
||||
: assert(uri != null),
|
||||
assert(needLogin != null) {
|
||||
if (this.args == null) this.args = Map();
|
||||
@ -51,18 +50,18 @@ class APIRequest {
|
||||
if (args == null) this.args = Map();
|
||||
}
|
||||
|
||||
APIRequest addString(String name, String value) {
|
||||
args[name] = value;
|
||||
APIRequest addString(String name, String? value) {
|
||||
args![name] = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
APIRequest addInt(String name, int value) {
|
||||
args[name] = value.toString();
|
||||
APIRequest addInt(String name, int? value) {
|
||||
args![name] = value.toString();
|
||||
return this;
|
||||
}
|
||||
|
||||
APIRequest addBool(String name, bool value) {
|
||||
args[name] = value ? "true" : "false";
|
||||
args![name] = value ? "true" : "false";
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -71,12 +70,12 @@ class APIRequest {
|
||||
return this;
|
||||
}
|
||||
|
||||
APIRequest addBytesFile(String name, BytesFile file) {
|
||||
APIRequest addBytesFile(String name, BytesFile? file) {
|
||||
this.bytesFiles[name] = file;
|
||||
return this;
|
||||
}
|
||||
|
||||
void addArgs(Map<String, String> newArgs) => args.addAll(newArgs);
|
||||
void addArgs(Map<String, String> newArgs) => args!.addAll(newArgs);
|
||||
|
||||
/// Execute the request
|
||||
Future<APIResponse> exec() async => APIHelper().exec(this);
|
||||
|
@ -5,14 +5,14 @@ import 'dart:convert';
|
||||
/// @author Pierre HUBERT
|
||||
|
||||
class APIResponse {
|
||||
final int/*!*/ code;
|
||||
final String content;
|
||||
final int code;
|
||||
final String? content;
|
||||
|
||||
const APIResponse(this.code, this.content) : assert(code != null);
|
||||
const APIResponse(this.code, this.content);
|
||||
|
||||
List<dynamic> getArray() => jsonDecode(this.content);
|
||||
List<dynamic>? getArray() => jsonDecode(this.content!);
|
||||
|
||||
Map<String, dynamic> getObject() => jsonDecode(this.content);
|
||||
Map<String, dynamic> getObject() => jsonDecode(this.content!);
|
||||
|
||||
/// Check if the request is successful or not
|
||||
bool get isOK => code == 200;
|
||||
|
@ -1,18 +1,18 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
|
||||
/// Application settings
|
||||
///
|
||||
/// @author Pierre Hubert
|
||||
|
||||
class ApplicationPreferences {
|
||||
bool/*!*/ enableDarkMode;
|
||||
bool/*!*/ forceMobileMode;
|
||||
bool/*!*/ showPerformancesOverlay;
|
||||
bool enableDarkMode;
|
||||
bool forceMobileMode;
|
||||
bool showPerformancesOverlay;
|
||||
|
||||
ApplicationPreferences({
|
||||
@required this.enableDarkMode,
|
||||
@required this.forceMobileMode,
|
||||
@required this.showPerformancesOverlay,
|
||||
required this.enableDarkMode,
|
||||
required this.forceMobileMode,
|
||||
required this.showPerformancesOverlay,
|
||||
}) : assert(enableDarkMode != null),
|
||||
assert(forceMobileMode != null),
|
||||
assert(showPerformancesOverlay != null);
|
||||
|
@ -1,14 +1,14 @@
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
|
||||
/// Authentication details
|
||||
///
|
||||
/// @author Pierre HUBERT
|
||||
|
||||
class AuthenticationDetails {
|
||||
final String/*!*/ email;
|
||||
final String/*!*/ password;
|
||||
final String email;
|
||||
final String password;
|
||||
|
||||
const AuthenticationDetails({@required this.email, @required this.password})
|
||||
const AuthenticationDetails({required this.email, required this.password})
|
||||
: assert(email != null),
|
||||
assert(password != null);
|
||||
}
|
||||
|
@ -1,14 +1,13 @@
|
||||
import 'package:comunic/helpers/database/database_contract.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
/// Cache base model
|
||||
///
|
||||
/// @author Pierre HUBERT
|
||||
|
||||
abstract class CacheModel {
|
||||
final int/*!*/ id;
|
||||
final int id;
|
||||
|
||||
const CacheModel({@required this.id}) : assert(id != null);
|
||||
const CacheModel({required this.id}) : assert(id != null);
|
||||
|
||||
/// Initialize a CacheModel from a map
|
||||
CacheModel.fromMap(Map<String, dynamic> map)
|
||||
|
@ -1,14 +1,14 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
||||
/// Call configuration
|
||||
///
|
||||
/// @author Pierre Hubert
|
||||
|
||||
class CallConfig {
|
||||
final List<String>/*!*/ iceServers;
|
||||
final List<String> iceServers;
|
||||
|
||||
const CallConfig({
|
||||
@required this.iceServers,
|
||||
required this.iceServers,
|
||||
}) : assert(iceServers != null);
|
||||
|
||||
/// Turn this call configuration into the right for the WebRTC plugin
|
||||
|
@ -1,4 +1,3 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_webrtc/flutter_webrtc.dart';
|
||||
|
||||
/// Single call member information
|
||||
@ -8,16 +7,16 @@ import 'package:flutter_webrtc/flutter_webrtc.dart';
|
||||
enum MemberStatus { JOINED, READY }
|
||||
|
||||
class CallMember {
|
||||
final int/*!*/ userID;
|
||||
MemberStatus/*!*/ status;
|
||||
MediaStream stream;
|
||||
final int userID;
|
||||
MemberStatus status;
|
||||
MediaStream? stream;
|
||||
|
||||
CallMember({
|
||||
@required this.userID,
|
||||
required this.userID,
|
||||
this.status = MemberStatus.JOINED,
|
||||
}) : assert(userID != null),
|
||||
assert(status != null);
|
||||
|
||||
bool get hasVideoStream =>
|
||||
stream != null && stream.getVideoTracks().length > 0;
|
||||
stream != null && stream!.getVideoTracks().length > 0;
|
||||
}
|
||||
|
@ -2,7 +2,6 @@ import 'package:comunic/enums/likes_type.dart';
|
||||
import 'package:comunic/models/displayed_content.dart';
|
||||
import 'package:comunic/models/like_element.dart';
|
||||
import 'package:comunic/utils/account_utils.dart' as account;
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
/// Comments
|
||||
///
|
||||
@ -11,24 +10,24 @@ import 'package:meta/meta.dart';
|
||||
/// @author Pierre HUBERT
|
||||
|
||||
class Comment implements LikeElement {
|
||||
final int/*!*/ id;
|
||||
final int/*!*/ userID;
|
||||
final int/*!*/ postID;
|
||||
final int/*!*/ timeSent;
|
||||
DisplayedString/*!*/ content;
|
||||
final String imageURL;
|
||||
int/*!*/ likes;
|
||||
bool/*!*/ userLike;
|
||||
final int id;
|
||||
final int userID;
|
||||
final int postID;
|
||||
final int timeSent;
|
||||
DisplayedString content;
|
||||
final String? imageURL;
|
||||
int likes;
|
||||
bool userLike;
|
||||
|
||||
Comment({
|
||||
@required this.id,
|
||||
@required this.userID,
|
||||
@required this.postID,
|
||||
@required this.timeSent,
|
||||
@required this.content,
|
||||
@required this.imageURL,
|
||||
@required this.likes,
|
||||
@required this.userLike,
|
||||
required this.id,
|
||||
required this.userID,
|
||||
required this.postID,
|
||||
required this.timeSent,
|
||||
required this.content,
|
||||
required this.imageURL,
|
||||
required this.likes,
|
||||
required this.userLike,
|
||||
}) : assert(id != null),
|
||||
assert(userID != null),
|
||||
assert(postID != null),
|
||||
|
@ -16,27 +16,27 @@ class Config {
|
||||
|
||||
// Theme customization
|
||||
final Color splashBackgroundColor;
|
||||
final Color primaryColor;
|
||||
final Color primaryColorDark;
|
||||
final Color? primaryColor;
|
||||
final Color? primaryColorDark;
|
||||
final String appName;
|
||||
final String appQuickDescription;
|
||||
final Color unreadConversationColor;
|
||||
final Color defaultConversationColor;
|
||||
final String? appQuickDescription;
|
||||
final Color? unreadConversationColor;
|
||||
final Color? defaultConversationColor;
|
||||
|
||||
// Entries for the welcome tour
|
||||
final TourEntriesBuilder toursEntriesBuilder;
|
||||
final TourEntriesBuilder? toursEntriesBuilder;
|
||||
|
||||
// Custom initialization
|
||||
final Future<void> Function() additionalLoading;
|
||||
final Future<void> Function()? additionalLoading;
|
||||
|
||||
// Custom main application route
|
||||
final Widget Function(BuildContext, GlobalKey) mainRouteBuilder;
|
||||
final Widget Function(BuildContext, GlobalKey)? mainRouteBuilder;
|
||||
|
||||
const Config({
|
||||
@required this.apiServerName,
|
||||
@required this.apiServerUri,
|
||||
@required this.apiServerSecure,
|
||||
@required this.clientName,
|
||||
required this.apiServerName,
|
||||
required this.apiServerUri,
|
||||
required this.apiServerSecure,
|
||||
required this.clientName,
|
||||
this.splashBackgroundColor = defaultColor,
|
||||
this.primaryColor,
|
||||
this.primaryColorDark,
|
||||
@ -55,9 +55,9 @@ class Config {
|
||||
assert(appName != null);
|
||||
|
||||
/// Get and set static configuration
|
||||
static Config/*?*/ _config;
|
||||
static Config? _config;
|
||||
|
||||
static Config get() {
|
||||
static Config? get() {
|
||||
return _config;
|
||||
}
|
||||
|
||||
@ -67,6 +67,6 @@ class Config {
|
||||
}
|
||||
|
||||
/// Get the current configuration of the application
|
||||
Config/*!*/ config() {
|
||||
return Config.get();
|
||||
Config config() {
|
||||
return Config.get()!;
|
||||
}
|
||||
|
@ -1,3 +1,4 @@
|
||||
import 'package:collection/collection.dart' show IterableExtension;
|
||||
import 'package:comunic/helpers/serialization/base_serialization_helper.dart';
|
||||
import 'package:comunic/models/conversation_member.dart';
|
||||
import 'package:comunic/utils/account_utils.dart';
|
||||
@ -12,28 +13,28 @@ import 'group.dart';
|
||||
enum CallCapabilities { NONE, AUDIO, VIDEO }
|
||||
|
||||
class Conversation extends SerializableElement<Conversation> {
|
||||
final int id;
|
||||
final int lastActivity;
|
||||
final String name;
|
||||
final Color color;
|
||||
final String logoURL;
|
||||
final int groupID;
|
||||
final GroupMembershipLevel groupMinMembershipLevel;
|
||||
final List<ConversationMember> members;
|
||||
final bool canEveryoneAddMembers;
|
||||
final int? id;
|
||||
final int? lastActivity;
|
||||
final String? name;
|
||||
final Color? color;
|
||||
final String? logoURL;
|
||||
final int? groupID;
|
||||
final GroupMembershipLevel? groupMinMembershipLevel;
|
||||
final List<ConversationMember>? members;
|
||||
final bool? canEveryoneAddMembers;
|
||||
final CallCapabilities callCapabilities;
|
||||
final bool isHavingCall;
|
||||
|
||||
Conversation({
|
||||
/*required*/ @required this.id,
|
||||
/*required*/ @required this.lastActivity,
|
||||
@required this.name,
|
||||
@required this.color,
|
||||
@required this.logoURL,
|
||||
@required this.groupID,
|
||||
@required this.groupMinMembershipLevel,
|
||||
/*required*/ @required this.members,
|
||||
/*required*/ @required this.canEveryoneAddMembers,
|
||||
/*required*/ required int this.id,
|
||||
/*required*/ required int this.lastActivity,
|
||||
required this.name,
|
||||
required this.color,
|
||||
required this.logoURL,
|
||||
required this.groupID,
|
||||
required this.groupMinMembershipLevel,
|
||||
/*required*/ required List<ConversationMember> this.members,
|
||||
/*required*/ required bool this.canEveryoneAddMembers,
|
||||
this.callCapabilities = CallCapabilities.NONE,
|
||||
this.isHavingCall = false,
|
||||
}) : assert(id != null),
|
||||
@ -49,7 +50,7 @@ class Conversation extends SerializableElement<Conversation> {
|
||||
|
||||
/// Get current user membership
|
||||
ConversationMember get membership =>
|
||||
members.firstWhere((m) => m.userID == userID());
|
||||
members!.firstWhere((m) => m.userID == userID());
|
||||
|
||||
/// Check out whether current user of the application is an admin
|
||||
bool get isAdmin => membership.isAdmin;
|
||||
@ -61,17 +62,17 @@ class Conversation extends SerializableElement<Conversation> {
|
||||
bool get following => membership.following;
|
||||
|
||||
/// Get the list of members in the conversation
|
||||
Set<int> get membersID => members.map((e) => e.userID).toSet();
|
||||
Set<int?> get membersID => members!.map((e) => e.userID).toSet();
|
||||
|
||||
/// Get the list of admins in the conversation
|
||||
Set<int> get adminsID =>
|
||||
members.where((e) => e.isAdmin).map((e) => e.userID).toSet();
|
||||
Set<int?> get adminsID =>
|
||||
members!.where((e) => e.isAdmin).map((e) => e.userID).toSet();
|
||||
|
||||
/// Get the list of the OTHER members of the conversation (all except current user)
|
||||
Set<int> get otherMembersID => membersID..remove(userID());
|
||||
Set<int?> get otherMembersID => membersID..remove(userID());
|
||||
|
||||
/// Check if the last message has been seen or not
|
||||
bool get sawLastMessage => lastActivity <= membership.lastAccessTime;
|
||||
bool get sawLastMessage => lastActivity! <= membership.lastAccessTime;
|
||||
|
||||
/// Check out whether a conversation is managed or not
|
||||
bool get isManaged => isGroupConversation;
|
||||
@ -86,9 +87,8 @@ class Conversation extends SerializableElement<Conversation> {
|
||||
color = map["color"] == null ? null : Color(map["color"]),
|
||||
logoURL = map["logoURL"],
|
||||
groupID = map["groupID"],
|
||||
groupMinMembershipLevel = GroupMembershipLevel.values.firstWhere(
|
||||
(element) => element.toString() == map["groupMinMembershipLevel"],
|
||||
orElse: () => null),
|
||||
groupMinMembershipLevel = GroupMembershipLevel.values.firstWhereOrNull(
|
||||
(element) => element.toString() == map["groupMinMembershipLevel"]),
|
||||
lastActivity = map["lastActivity"],
|
||||
members = map["members"]
|
||||
.map((el) => ConversationMember.fromJSON(el))
|
||||
@ -109,13 +109,13 @@ class Conversation extends SerializableElement<Conversation> {
|
||||
"groupID": groupID,
|
||||
"groupMinMembershipLevel": groupMinMembershipLevel?.toString(),
|
||||
"lastActivity": lastActivity,
|
||||
"members": members.map((e) => e.toJson()).toList(),
|
||||
"members": members!.map((e) => e.toJson()).toList(),
|
||||
"canEveryoneAddMembers": canEveryoneAddMembers,
|
||||
};
|
||||
}
|
||||
|
||||
@override
|
||||
int compareTo(Conversation other) {
|
||||
return other.lastActivity.compareTo(this.lastActivity);
|
||||
return other.lastActivity!.compareTo(this.lastActivity!);
|
||||
}
|
||||
}
|
||||
|
@ -1,22 +1,22 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
|
||||
/// Conversation member
|
||||
///
|
||||
/// @author Pierre Hubert
|
||||
|
||||
class ConversationMember {
|
||||
final int/*!*/ userID;
|
||||
final int/*!*/ lastMessageSeen;
|
||||
final int/*!*/ lastAccessTime;
|
||||
final bool/*!*/ following;
|
||||
final bool/*!*/ isAdmin;
|
||||
final int userID;
|
||||
final int lastMessageSeen;
|
||||
final int lastAccessTime;
|
||||
final bool following;
|
||||
final bool isAdmin;
|
||||
|
||||
const ConversationMember({
|
||||
/*required*/ @required this.userID,
|
||||
/*required*/ @required this.lastMessageSeen,
|
||||
/*required*/ @required this.lastAccessTime,
|
||||
/*required*/ @required this.following,
|
||||
/*required*/ @required this.isAdmin,
|
||||
/*required*/ required this.userID,
|
||||
/*required*/ required this.lastMessageSeen,
|
||||
/*required*/ required this.lastAccessTime,
|
||||
/*required*/ required this.following,
|
||||
/*required*/ required this.isAdmin,
|
||||
}) : assert(userID != null),
|
||||
assert(lastMessageSeen != null),
|
||||
assert(lastAccessTime != null),
|
||||
|
@ -30,27 +30,27 @@ const _ConversationFileMimeTypeMapping = {
|
||||
};
|
||||
|
||||
class ConversationMessageFile {
|
||||
final String url;
|
||||
final int size;
|
||||
final String name;
|
||||
final String thumbnail;
|
||||
final String type;
|
||||
final String? url;
|
||||
final int? size;
|
||||
final String? name;
|
||||
final String? thumbnail;
|
||||
final String? type;
|
||||
|
||||
const ConversationMessageFile({
|
||||
@required this.url,
|
||||
@required this.size,
|
||||
@required this.name,
|
||||
@required this.thumbnail,
|
||||
@required this.type,
|
||||
required String this.url,
|
||||
required int this.size,
|
||||
required String this.name,
|
||||
required this.thumbnail,
|
||||
required String this.type,
|
||||
}) : assert(url != null),
|
||||
assert(size != null),
|
||||
assert(name != null),
|
||||
assert(type != null);
|
||||
|
||||
/// Get the type of file
|
||||
ConversationMessageFileType get fileType {
|
||||
ConversationMessageFileType? get fileType {
|
||||
if (type != null && _ConversationFileMimeTypeMapping.containsKey(type))
|
||||
return _ConversationFileMimeTypeMapping[type];
|
||||
return _ConversationFileMimeTypeMapping[type!];
|
||||
else
|
||||
return ConversationMessageFileType.OTHER;
|
||||
}
|
||||
@ -102,19 +102,19 @@ enum ConversationServerMessageType {
|
||||
|
||||
class ConversationServerMessage {
|
||||
final ConversationServerMessageType type;
|
||||
final int userID;
|
||||
final int userWhoAdded;
|
||||
final int userAdded;
|
||||
final int userWhoRemoved;
|
||||
final int userRemoved;
|
||||
final int? userID;
|
||||
final int? userWhoAdded;
|
||||
final int? userAdded;
|
||||
final int? userWhoRemoved;
|
||||
final int? userRemoved;
|
||||
|
||||
const ConversationServerMessage({
|
||||
@required this.type,
|
||||
@required this.userID,
|
||||
@required this.userWhoAdded,
|
||||
@required this.userAdded,
|
||||
@required this.userWhoRemoved,
|
||||
@required this.userRemoved,
|
||||
required this.type,
|
||||
required this.userID,
|
||||
required this.userWhoAdded,
|
||||
required this.userAdded,
|
||||
required this.userWhoRemoved,
|
||||
required this.userRemoved,
|
||||
}) : assert(type != null),
|
||||
assert(userID != null ||
|
||||
(type != ConversationServerMessageType.USER_CREATED_CONVERSATION &&
|
||||
@ -124,7 +124,7 @@ class ConversationServerMessage {
|
||||
assert((userWhoRemoved != null && userRemoved != null) ||
|
||||
type != ConversationServerMessageType.USER_REMOVED_ANOTHER_USER);
|
||||
|
||||
Set<int> get usersID {
|
||||
Set<int?> get usersID {
|
||||
switch (type) {
|
||||
case ConversationServerMessageType.USER_CREATED_CONVERSATION:
|
||||
case ConversationServerMessageType.USER_LEFT_CONV:
|
||||
@ -144,26 +144,26 @@ class ConversationServerMessage {
|
||||
throw Exception("Unsupported server message type!");
|
||||
}
|
||||
|
||||
String getText(UsersList list) {
|
||||
String? getText(UsersList? list) {
|
||||
switch (type) {
|
||||
case ConversationServerMessageType.USER_CREATED_CONVERSATION:
|
||||
return tr("%1% created the conversation",
|
||||
args: {"1": list.getUser(userID).fullName});
|
||||
args: {"1": list!.getUser(userID).fullName});
|
||||
|
||||
case ConversationServerMessageType.USER_ADDED_ANOTHER_USER:
|
||||
return tr("%1% added %2% to the conversation", args: {
|
||||
"1": list.getUser(userWhoAdded).fullName,
|
||||
"1": list!.getUser(userWhoAdded).fullName,
|
||||
"2": list.getUser(userAdded).fullName,
|
||||
});
|
||||
|
||||
case ConversationServerMessageType.USER_LEFT_CONV:
|
||||
return tr("%1% left the conversation", args: {
|
||||
"1": list.getUser(userID).fullName,
|
||||
"1": list!.getUser(userID).fullName,
|
||||
});
|
||||
|
||||
case ConversationServerMessageType.USER_REMOVED_ANOTHER_USER:
|
||||
return tr("%1% removed %2% from the conversation", args: {
|
||||
"1": list.getUser(userWhoRemoved).fullName,
|
||||
"1": list!.getUser(userWhoRemoved).fullName,
|
||||
"2": list.getUser(userRemoved).fullName,
|
||||
});
|
||||
}
|
||||
@ -191,29 +191,29 @@ class ConversationServerMessage {
|
||||
}
|
||||
|
||||
class ConversationMessage extends SerializableElement<ConversationMessage> {
|
||||
final int id;
|
||||
final int convID;
|
||||
final int userID;
|
||||
final int timeSent;
|
||||
final int? id;
|
||||
final int? convID;
|
||||
final int? userID;
|
||||
final int? timeSent;
|
||||
final DisplayedString message;
|
||||
final ConversationMessageFile file;
|
||||
final ConversationServerMessage serverMessage;
|
||||
final ConversationMessageFile? file;
|
||||
final ConversationServerMessage? serverMessage;
|
||||
|
||||
ConversationMessage({
|
||||
@required this.id,
|
||||
@required this.convID,
|
||||
@required this.userID,
|
||||
@required this.timeSent,
|
||||
@required this.message,
|
||||
@required this.file,
|
||||
@required this.serverMessage,
|
||||
required int this.id,
|
||||
required int this.convID,
|
||||
required this.userID,
|
||||
required int this.timeSent,
|
||||
required this.message,
|
||||
required this.file,
|
||||
required this.serverMessage,
|
||||
}) : assert(id != null),
|
||||
assert(convID != null),
|
||||
assert(userID != null || serverMessage != null),
|
||||
assert(timeSent != null),
|
||||
assert(message != null || file != null || serverMessage != null);
|
||||
|
||||
DateTime get date => DateTime.fromMillisecondsSinceEpoch(timeSent * 1000);
|
||||
DateTime get date => DateTime.fromMillisecondsSinceEpoch(timeSent! * 1000);
|
||||
|
||||
bool get hasMessage => !message.isNull && message.length > 0;
|
||||
|
||||
@ -224,16 +224,16 @@ class ConversationMessage extends SerializableElement<ConversationMessage> {
|
||||
bool get isServerMessage => serverMessage != null;
|
||||
|
||||
/// Get the list of the ID of the users implied in this message
|
||||
Set<int> get usersID {
|
||||
Set<int?> get usersID {
|
||||
if (userID != null) return Set()..add(userID);
|
||||
|
||||
if (serverMessage != null) return serverMessage.usersID;
|
||||
if (serverMessage != null) return serverMessage!.usersID;
|
||||
return Set();
|
||||
}
|
||||
|
||||
@override
|
||||
int compareTo(ConversationMessage other) {
|
||||
return id.compareTo(other.id);
|
||||
return id!.compareTo(other.id!);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
|
@ -3,12 +3,12 @@
|
||||
/// @author Pierre Hubert
|
||||
|
||||
class CountUnreadNotifications {
|
||||
int notifications;
|
||||
int conversations;
|
||||
int? notifications;
|
||||
int? conversations;
|
||||
|
||||
CountUnreadNotifications({
|
||||
this.notifications,
|
||||
this.conversations,
|
||||
required int this.notifications,
|
||||
required int this.conversations,
|
||||
}) : assert(notifications != null),
|
||||
assert(conversations != null);
|
||||
}
|
||||
|
@ -1,20 +1,20 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
||||
/// Single custom emoji information
|
||||
///
|
||||
/// @author Pierre Hubert
|
||||
|
||||
class CustomEmoji {
|
||||
final int id;
|
||||
final int userID;
|
||||
final String shortcut;
|
||||
final String url;
|
||||
final int? id;
|
||||
final int? userID;
|
||||
final String? shortcut;
|
||||
final String? url;
|
||||
|
||||
const CustomEmoji({
|
||||
@required this.id,
|
||||
@required this.userID,
|
||||
@required this.shortcut,
|
||||
@required this.url,
|
||||
required int this.id,
|
||||
required int this.userID,
|
||||
required String this.shortcut,
|
||||
required String this.url,
|
||||
}) : assert(id != null),
|
||||
assert(userID != null),
|
||||
assert(shortcut != null),
|
||||
|
@ -3,12 +3,12 @@
|
||||
/// @author Pierre Hubert
|
||||
|
||||
class DataConservationPolicySettings {
|
||||
int inactiveAccountLifeTime;
|
||||
int notificationLifetime;
|
||||
int commentsLifetime;
|
||||
int postsLifetime;
|
||||
int conversationMessagesLifetime;
|
||||
int likesLifetime;
|
||||
int? inactiveAccountLifeTime;
|
||||
int? notificationLifetime;
|
||||
int? commentsLifetime;
|
||||
int? postsLifetime;
|
||||
int? conversationMessagesLifetime;
|
||||
int? likesLifetime;
|
||||
|
||||
DataConservationPolicySettings({
|
||||
this.inactiveAccountLifeTime,
|
||||
|
@ -5,32 +5,32 @@ import 'package:comunic/utils/ui_utils.dart';
|
||||
/// @author Pierre Hubert
|
||||
|
||||
class DisplayedString {
|
||||
String _string;
|
||||
String _parseCache;
|
||||
String? _string;
|
||||
String? _parseCache;
|
||||
|
||||
DisplayedString(this._string);
|
||||
|
||||
int get length => _string.length;
|
||||
int get length => _string!.length;
|
||||
|
||||
bool get isEmpty => _string.isEmpty;
|
||||
bool get isEmpty => _string!.isEmpty;
|
||||
|
||||
bool get isNull => _string == null;
|
||||
|
||||
String get content => _string;
|
||||
String? get content => _string;
|
||||
|
||||
set content(String content) {
|
||||
set content(String? content) {
|
||||
_string = content;
|
||||
_parseCache = null;
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return _string;
|
||||
return _string!;
|
||||
}
|
||||
|
||||
String get parsedString {
|
||||
String? get parsedString {
|
||||
if (_parseCache == null) {
|
||||
_parseCache = parseEmojies(this._string);
|
||||
_parseCache = parseEmojies(this._string!);
|
||||
}
|
||||
|
||||
return _parseCache;
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
||||
/// Single presence information
|
||||
///
|
||||
@ -11,10 +11,10 @@ class Presence {
|
||||
final int day;
|
||||
|
||||
const Presence({
|
||||
@required this.userID,
|
||||
@required this.year,
|
||||
@required this.month,
|
||||
@required this.day,
|
||||
required this.userID,
|
||||
required this.year,
|
||||
required this.month,
|
||||
required this.day,
|
||||
}) : assert(userID != null),
|
||||
assert(year != null),
|
||||
assert(month != null),
|
||||
|
@ -1,7 +1,6 @@
|
||||
import 'package:comunic/helpers/database/database_contract.dart';
|
||||
import 'package:comunic/models/cache_model.dart';
|
||||
import 'package:comunic/utils/date_utils.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
/// Single user Friend information
|
||||
///
|
||||
@ -9,16 +8,16 @@ import 'package:meta/meta.dart';
|
||||
|
||||
class Friend extends CacheModel implements Comparable<Friend> {
|
||||
bool accepted;
|
||||
final int lastActive;
|
||||
final int? lastActive;
|
||||
final bool following;
|
||||
final bool canPostTexts;
|
||||
|
||||
Friend({
|
||||
@required int id,
|
||||
@required this.accepted,
|
||||
@required this.lastActive,
|
||||
@required this.following,
|
||||
@required this.canPostTexts,
|
||||
required int id,
|
||||
required this.accepted,
|
||||
required int this.lastActive,
|
||||
required this.following,
|
||||
required this.canPostTexts,
|
||||
}) : assert(id != null),
|
||||
assert(accepted != null),
|
||||
assert(lastActive != null),
|
||||
@ -27,10 +26,10 @@ class Friend extends CacheModel implements Comparable<Friend> {
|
||||
super(id: id);
|
||||
|
||||
/// Check out whether friend is connected or not
|
||||
bool get isConnected => time() - 30 < lastActive;
|
||||
bool get isConnected => time() - 30 < lastActive!;
|
||||
|
||||
@override
|
||||
int compareTo(Friend other) => other.lastActive.compareTo(lastActive);
|
||||
int compareTo(Friend other) => other.lastActive!.compareTo(lastActive!);
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toMap() => {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
|
||||
/// Simple friendship status
|
||||
///
|
||||
@ -12,11 +12,11 @@ class FriendStatus {
|
||||
final bool following;
|
||||
|
||||
const FriendStatus({
|
||||
@required this.userID,
|
||||
@required this.areFriend,
|
||||
@required this.sentRequest,
|
||||
@required this.receivedRequest,
|
||||
@required this.following,
|
||||
required this.userID,
|
||||
required this.areFriend,
|
||||
required this.sentRequest,
|
||||
required this.receivedRequest,
|
||||
required this.following,
|
||||
}) : assert(userID != null),
|
||||
assert(areFriend != null),
|
||||
assert(sentRequest != null),
|
||||
|
@ -1,5 +1,4 @@
|
||||
import 'package:comunic/enums/user_page_visibility.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// General settings
|
||||
///
|
||||
@ -18,22 +17,22 @@ class GeneralSettings {
|
||||
String virtualDirectory;
|
||||
String personalWebsite;
|
||||
String publicNote;
|
||||
String location;
|
||||
String? location;
|
||||
|
||||
GeneralSettings({
|
||||
@required this.email,
|
||||
@required this.firstName,
|
||||
@required this.lastName,
|
||||
@required this.pageVisibility,
|
||||
@required this.allowComments,
|
||||
@required this.allowPostsFromFriends,
|
||||
@required this.allowComunicEmails,
|
||||
@required this.publicFriendsList,
|
||||
@required this.publicEmail,
|
||||
@required this.virtualDirectory,
|
||||
@required this.personalWebsite,
|
||||
@required this.publicNote,
|
||||
@required this.location,
|
||||
required this.email,
|
||||
required this.firstName,
|
||||
required this.lastName,
|
||||
required this.pageVisibility,
|
||||
required this.allowComments,
|
||||
required this.allowPostsFromFriends,
|
||||
required this.allowComunicEmails,
|
||||
required this.publicFriendsList,
|
||||
required this.publicEmail,
|
||||
required this.virtualDirectory,
|
||||
required this.personalWebsite,
|
||||
required this.publicNote,
|
||||
required this.location,
|
||||
}) : assert(email != null),
|
||||
assert(firstName != null),
|
||||
assert(lastName != null),
|
||||
|
@ -1,5 +1,4 @@
|
||||
import 'package:comunic/utils/intl_utils.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
/// Group information
|
||||
///
|
||||
@ -14,20 +13,20 @@ enum GroupMembershipLevel {
|
||||
VISITOR
|
||||
}
|
||||
|
||||
String/*!*/ membershipToText(GroupMembershipLevel level) {
|
||||
String membershipToText(GroupMembershipLevel level) {
|
||||
switch (level) {
|
||||
case GroupMembershipLevel.ADMINISTRATOR:
|
||||
return tr("Administrator");
|
||||
return tr("Administrator")!;
|
||||
case GroupMembershipLevel.MODERATOR:
|
||||
return tr("Moderator");
|
||||
return tr("Moderator")!;
|
||||
case GroupMembershipLevel.MEMBER:
|
||||
return tr("Member");
|
||||
return tr("Member")!;
|
||||
case GroupMembershipLevel.INVITED:
|
||||
return tr("Invited");
|
||||
return tr("Invited")!;
|
||||
case GroupMembershipLevel.PENDING:
|
||||
return tr("Requested");
|
||||
return tr("Requested")!;
|
||||
case GroupMembershipLevel.VISITOR:
|
||||
return tr("Visitor");
|
||||
return tr("Visitor")!;
|
||||
}
|
||||
throw new Exception("Unreachable statement!");
|
||||
}
|
||||
@ -51,16 +50,16 @@ class Group implements Comparable<Group> {
|
||||
bool following;
|
||||
|
||||
Group({
|
||||
@required this.id,
|
||||
@required this.name,
|
||||
@required this.iconURL,
|
||||
@required this.numberMembers,
|
||||
@required this.membershipLevel,
|
||||
@required this.visibilityLevel,
|
||||
@required this.registrationLevel,
|
||||
@required this.postCreationLevel,
|
||||
@required this.virtualDirectory,
|
||||
@required this.following,
|
||||
required this.id,
|
||||
required this.name,
|
||||
required this.iconURL,
|
||||
required this.numberMembers,
|
||||
required this.membershipLevel,
|
||||
required this.visibilityLevel,
|
||||
required this.registrationLevel,
|
||||
required this.postCreationLevel,
|
||||
required this.virtualDirectory,
|
||||
required this.following,
|
||||
}) : assert(id != null),
|
||||
assert(name != null),
|
||||
assert(iconURL != null),
|
||||
|
@ -1,5 +1,4 @@
|
||||
import 'package:comunic/models/group.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// Group membership information
|
||||
///
|
||||
@ -12,10 +11,10 @@ class GroupMembership {
|
||||
final GroupMembershipLevel level;
|
||||
|
||||
const GroupMembership({
|
||||
@required this.userID,
|
||||
@required this.groupID,
|
||||
@required this.timeCreate,
|
||||
@required this.level,
|
||||
required this.userID,
|
||||
required this.groupID,
|
||||
required this.timeCreate,
|
||||
required this.level,
|
||||
}) : assert(userID != null),
|
||||
assert(groupID != null),
|
||||
assert(timeCreate != null),
|
||||
|
@ -9,6 +9,6 @@ abstract class LikeElement {
|
||||
|
||||
int get id;
|
||||
|
||||
bool userLike;
|
||||
int likes;
|
||||
late bool userLike;
|
||||
late int likes;
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
import 'package:comunic/models/conversation.dart';
|
||||
import 'package:comunic/models/friend.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// Membership information
|
||||
///
|
||||
@ -10,40 +9,40 @@ enum MembershipType { FRIEND, GROUP, CONVERSATION }
|
||||
|
||||
class Membership {
|
||||
final MembershipType type;
|
||||
final Conversation conversation;
|
||||
final Friend friend;
|
||||
final int groupID;
|
||||
final int groupLastActive;
|
||||
final Conversation? conversation;
|
||||
final Friend? friend;
|
||||
final int? groupID;
|
||||
final int? groupLastActive;
|
||||
|
||||
Membership.conversation(this.conversation)
|
||||
Membership.conversation(Conversation this.conversation)
|
||||
: type = MembershipType.CONVERSATION,
|
||||
friend = null,
|
||||
groupID = null,
|
||||
groupLastActive = null,
|
||||
assert(conversation != null);
|
||||
|
||||
Membership.friend(this.friend)
|
||||
Membership.friend(Friend this.friend)
|
||||
: type = MembershipType.FRIEND,
|
||||
conversation = null,
|
||||
groupID = null,
|
||||
groupLastActive = null,
|
||||
assert(friend != null);
|
||||
|
||||
Membership.group({@required this.groupID, @required this.groupLastActive})
|
||||
Membership.group({required int this.groupID, required int this.groupLastActive})
|
||||
: type = MembershipType.GROUP,
|
||||
conversation = null,
|
||||
friend = null,
|
||||
assert(groupID != null),
|
||||
assert(groupLastActive != null);
|
||||
|
||||
int get lastActive {
|
||||
int? get lastActive {
|
||||
switch (type) {
|
||||
case MembershipType.FRIEND:
|
||||
return friend.lastActive;
|
||||
return friend!.lastActive;
|
||||
case MembershipType.GROUP:
|
||||
return groupLastActive;
|
||||
case MembershipType.CONVERSATION:
|
||||
return conversation.lastActivity;
|
||||
return conversation!.lastActivity;
|
||||
default:
|
||||
throw Exception("Unreachable statment!");
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
|
||||
/// New account information container
|
||||
///
|
||||
@ -11,10 +11,10 @@ class NewAccount {
|
||||
final String password;
|
||||
|
||||
NewAccount({
|
||||
@required this.firstName,
|
||||
@required this.lastName,
|
||||
@required this.email,
|
||||
@required this.password,
|
||||
required this.firstName,
|
||||
required this.lastName,
|
||||
required this.email,
|
||||
required this.password,
|
||||
}) : assert(firstName != null),
|
||||
assert(lastName != null),
|
||||
assert(email != null),
|
||||
|
@ -1,5 +1,3 @@
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
import 'api_request.dart';
|
||||
|
||||
/// New comment information
|
||||
@ -9,12 +7,12 @@ import 'api_request.dart';
|
||||
class NewComment {
|
||||
final int postID;
|
||||
final String content;
|
||||
final BytesFile image;
|
||||
final BytesFile? image;
|
||||
|
||||
const NewComment({
|
||||
@required this.postID,
|
||||
@required this.content,
|
||||
@required this.image,
|
||||
required this.postID,
|
||||
required this.content,
|
||||
required this.image,
|
||||
}) : assert(postID != null);
|
||||
|
||||
bool get hasContent => content != null && content.length > 0;
|
||||
|
@ -6,17 +6,17 @@ import 'package:flutter/cupertino.dart';
|
||||
|
||||
class NewConversation {
|
||||
final String name;
|
||||
final List<int> members;
|
||||
final List<int?> members;
|
||||
final bool follow;
|
||||
final bool canEveryoneAddMembers;
|
||||
final Color color;
|
||||
final Color? color;
|
||||
|
||||
const NewConversation({
|
||||
@required this.name,
|
||||
@required this.members,
|
||||
@required this.follow,
|
||||
@required this.canEveryoneAddMembers,
|
||||
@required this.color,
|
||||
required this.name,
|
||||
required this.members,
|
||||
required this.follow,
|
||||
required this.canEveryoneAddMembers,
|
||||
required this.color,
|
||||
}) : assert(members != null),
|
||||
assert(members.length > 0),
|
||||
assert(follow != null),
|
||||
|
@ -1,5 +1,4 @@
|
||||
import 'package:comunic/models/api_request.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
/// New conversation message model
|
||||
///
|
||||
@ -9,13 +8,13 @@ import 'package:meta/meta.dart';
|
||||
|
||||
class NewConversationMessage {
|
||||
final int conversationID;
|
||||
final String message;
|
||||
final BytesFile file;
|
||||
final BytesFile thumbnail;
|
||||
final String? message;
|
||||
final BytesFile? file;
|
||||
final BytesFile? thumbnail;
|
||||
|
||||
NewConversationMessage({
|
||||
@required this.conversationID,
|
||||
@required this.message,
|
||||
required this.conversationID,
|
||||
required this.message,
|
||||
this.file,
|
||||
this.thumbnail,
|
||||
}) : assert(conversationID != null),
|
||||
|
@ -9,16 +9,16 @@ class NewConversationsSettings {
|
||||
final bool following;
|
||||
final bool isComplete;
|
||||
final String name;
|
||||
final bool canEveryoneAddMembers;
|
||||
final Color color;
|
||||
final bool? canEveryoneAddMembers;
|
||||
final Color? color;
|
||||
|
||||
const NewConversationsSettings({
|
||||
@required this.convID,
|
||||
@required this.following,
|
||||
@required this.isComplete,
|
||||
@required this.name,
|
||||
@required this.canEveryoneAddMembers,
|
||||
@required this.color,
|
||||
required this.convID,
|
||||
required this.following,
|
||||
required this.isComplete,
|
||||
required this.name,
|
||||
required this.canEveryoneAddMembers,
|
||||
required this.color,
|
||||
}) : assert(convID != null),
|
||||
assert(convID > 0),
|
||||
assert(following != null),
|
||||
|
@ -1,5 +1,3 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'api_request.dart';
|
||||
|
||||
/// New emoji information
|
||||
@ -11,8 +9,8 @@ class NewEmoji {
|
||||
final BytesFile image;
|
||||
|
||||
const NewEmoji({
|
||||
@required this.shortcut,
|
||||
@required this.image,
|
||||
required this.shortcut,
|
||||
required this.image,
|
||||
}) : assert(shortcut != null),
|
||||
assert(image != null);
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
import 'package:comunic/models/group.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
/// This class contains information about a conversation linked to a group
|
||||
/// to create
|
||||
@ -12,9 +11,9 @@ class NewGroupConversation {
|
||||
final GroupMembershipLevel minMembershipLevel;
|
||||
|
||||
const NewGroupConversation({
|
||||
@required this.groupID,
|
||||
@required this.name,
|
||||
@required this.minMembershipLevel,
|
||||
required this.groupID,
|
||||
required this.name,
|
||||
required this.minMembershipLevel,
|
||||
}) : assert(groupID != null),
|
||||
assert(name != null),
|
||||
assert(minMembershipLevel != null);
|
||||
|
@ -1,7 +1,6 @@
|
||||
import 'package:comunic/enums/post_kind.dart';
|
||||
import 'package:comunic/enums/post_target.dart';
|
||||
import 'package:comunic/enums/post_visibility_level.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
import 'api_request.dart';
|
||||
|
||||
@ -15,9 +14,9 @@ class NewSurvey {
|
||||
final bool allowNewChoicesCreation;
|
||||
|
||||
const NewSurvey({
|
||||
@required this.question,
|
||||
@required this.answers,
|
||||
@required this.allowNewChoicesCreation,
|
||||
required this.question,
|
||||
required this.answers,
|
||||
required this.allowNewChoicesCreation,
|
||||
}) : assert(question != null),
|
||||
assert(answers.length > 1),
|
||||
assert(allowNewChoicesCreation != null);
|
||||
@ -28,26 +27,26 @@ class NewPost {
|
||||
final int targetID;
|
||||
final PostVisibilityLevel visibility;
|
||||
final String content;
|
||||
final BytesFile image;
|
||||
final String url;
|
||||
final List<int> pdf;
|
||||
final BytesFile? image;
|
||||
final String? url;
|
||||
final List<int>? pdf;
|
||||
final PostKind kind;
|
||||
final DateTime timeEnd;
|
||||
final NewSurvey survey;
|
||||
final String youtubeId;
|
||||
final DateTime? timeEnd;
|
||||
final NewSurvey? survey;
|
||||
final String? youtubeId;
|
||||
|
||||
const NewPost({
|
||||
@required this.target,
|
||||
@required this.targetID,
|
||||
@required this.visibility,
|
||||
@required this.content,
|
||||
@required this.kind,
|
||||
@required this.image,
|
||||
@required this.url,
|
||||
@required this.pdf,
|
||||
@required this.timeEnd,
|
||||
@required this.survey,
|
||||
@required this.youtubeId,
|
||||
required this.target,
|
||||
required this.targetID,
|
||||
required this.visibility,
|
||||
required this.content,
|
||||
required this.kind,
|
||||
required this.image,
|
||||
required this.url,
|
||||
required this.pdf,
|
||||
required this.timeEnd,
|
||||
required this.survey,
|
||||
required this.youtubeId,
|
||||
}) : assert(target != null),
|
||||
assert(targetID != null),
|
||||
assert(visibility != null),
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
|
||||
/// Notification model
|
||||
///
|
||||
@ -45,19 +45,19 @@ class Notification {
|
||||
final int onElemId;
|
||||
final NotificationElementType onElemType;
|
||||
final NotificationType type;
|
||||
final int fromContainerId;
|
||||
final NotificationElementType fromContainerType;
|
||||
final int? fromContainerId;
|
||||
final NotificationElementType? fromContainerType;
|
||||
|
||||
const Notification({
|
||||
@required this.id,
|
||||
@required this.timeCreate,
|
||||
@required this.seen,
|
||||
@required this.fromUser,
|
||||
@required this.onElemId,
|
||||
@required this.onElemType,
|
||||
@required this.type,
|
||||
@required this.fromContainerId,
|
||||
@required this.fromContainerType,
|
||||
required this.id,
|
||||
required this.timeCreate,
|
||||
required this.seen,
|
||||
required this.fromUser,
|
||||
required this.onElemId,
|
||||
required this.onElemType,
|
||||
required this.type,
|
||||
required this.fromContainerId,
|
||||
required this.fromContainerType,
|
||||
}) : assert(id != null),
|
||||
assert(timeCreate != null),
|
||||
assert(seen != null),
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
||||
/// Notifications settings
|
||||
///
|
||||
@ -9,8 +9,8 @@ class NotificationsSettings {
|
||||
bool allowNotificationsSound;
|
||||
|
||||
NotificationsSettings({
|
||||
@required this.allowConversations,
|
||||
@required this.allowNotificationsSound,
|
||||
required this.allowConversations,
|
||||
required this.allowNotificationsSound,
|
||||
}) : assert(allowConversations != null),
|
||||
assert(allowNotificationsSound != null);
|
||||
}
|
||||
|
@ -6,7 +6,6 @@ import 'package:comunic/lists/comments_list.dart';
|
||||
import 'package:comunic/models/displayed_content.dart';
|
||||
import 'package:comunic/models/like_element.dart';
|
||||
import 'package:comunic/models/survey.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
/// Single post information
|
||||
///
|
||||
@ -15,50 +14,50 @@ import 'package:meta/meta.dart';
|
||||
class Post implements LikeElement {
|
||||
final int id;
|
||||
final int userID;
|
||||
final int userPageID;
|
||||
final int groupID;
|
||||
final int? userPageID;
|
||||
final int? groupID;
|
||||
final int timeSent;
|
||||
DisplayedString content;
|
||||
PostVisibilityLevel visibilityLevel;
|
||||
final PostKind kind;
|
||||
final int fileSize;
|
||||
final String fileType;
|
||||
final String filePath;
|
||||
final String fileURL;
|
||||
final int timeEnd;
|
||||
final String linkURL;
|
||||
final String linkTitle;
|
||||
final String linkDescription;
|
||||
final String linkImage;
|
||||
final int? fileSize;
|
||||
final String? fileType;
|
||||
final String? filePath;
|
||||
final String? fileURL;
|
||||
final int? timeEnd;
|
||||
final String? linkURL;
|
||||
final String? linkTitle;
|
||||
final String? linkDescription;
|
||||
final String? linkImage;
|
||||
int likes;
|
||||
bool userLike;
|
||||
final UserAccessLevels access;
|
||||
final CommentsList comments;
|
||||
Survey survey;
|
||||
final CommentsList? comments;
|
||||
Survey? survey;
|
||||
|
||||
Post(
|
||||
{@required this.id,
|
||||
@required this.userID,
|
||||
@required this.userPageID,
|
||||
@required this.groupID,
|
||||
@required this.timeSent,
|
||||
@required this.content,
|
||||
@required this.visibilityLevel,
|
||||
@required this.kind,
|
||||
@required this.fileSize,
|
||||
@required this.fileType,
|
||||
@required this.filePath,
|
||||
@required this.fileURL,
|
||||
@required this.timeEnd,
|
||||
@required this.linkURL,
|
||||
@required this.linkTitle,
|
||||
@required this.linkDescription,
|
||||
@required this.linkImage,
|
||||
@required this.likes,
|
||||
@required this.userLike,
|
||||
@required this.access,
|
||||
@required this.comments,
|
||||
@required this.survey})
|
||||
{required this.id,
|
||||
required this.userID,
|
||||
required this.userPageID,
|
||||
required this.groupID,
|
||||
required this.timeSent,
|
||||
required this.content,
|
||||
required this.visibilityLevel,
|
||||
required this.kind,
|
||||
required this.fileSize,
|
||||
required this.fileType,
|
||||
required this.filePath,
|
||||
required this.fileURL,
|
||||
required this.timeEnd,
|
||||
required this.linkURL,
|
||||
required this.linkTitle,
|
||||
required this.linkDescription,
|
||||
required this.linkImage,
|
||||
required this.likes,
|
||||
required this.userLike,
|
||||
required this.access,
|
||||
required this.comments,
|
||||
required this.survey})
|
||||
: assert(id != null),
|
||||
assert(userID != null),
|
||||
assert(userPageID != 0 || groupID != 0),
|
||||
@ -72,7 +71,7 @@ class Post implements LikeElement {
|
||||
assert(userLike != null),
|
||||
assert(access != null);
|
||||
|
||||
bool get isGroupPost => groupID != null && groupID > 0;
|
||||
bool get isGroupPost => groupID != null && groupID! > 0;
|
||||
|
||||
bool get hasContent => content != null && !content.isNull;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
||||
/// Check password reset token result
|
||||
///
|
||||
@ -10,9 +10,9 @@ class ResCheckPasswordToken {
|
||||
final String email;
|
||||
|
||||
const ResCheckPasswordToken({
|
||||
@required this.firstName,
|
||||
@required this.lastName,
|
||||
@required this.email,
|
||||
required this.firstName,
|
||||
required this.lastName,
|
||||
required this.email,
|
||||
}) : assert(firstName != null),
|
||||
assert(lastName != null),
|
||||
assert(email != null);
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
|
||||
/// Single search result
|
||||
///
|
||||
@ -11,8 +11,8 @@ class SearchResult {
|
||||
final SearchResultKind kind;
|
||||
|
||||
SearchResult({
|
||||
@required this.id,
|
||||
@required this.kind,
|
||||
required this.id,
|
||||
required this.kind,
|
||||
}) : assert(id != null),
|
||||
assert(kind != null);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
||||
/// Security settings of the user
|
||||
///
|
||||
@ -11,10 +11,10 @@ class SecuritySettings {
|
||||
final String securityAnswer2;
|
||||
|
||||
const SecuritySettings({
|
||||
@required this.securityQuestion1,
|
||||
@required this.securityAnswer1,
|
||||
@required this.securityQuestion2,
|
||||
@required this.securityAnswer2,
|
||||
required this.securityQuestion1,
|
||||
required this.securityAnswer1,
|
||||
required this.securityQuestion2,
|
||||
required this.securityAnswer2,
|
||||
}) : assert(securityQuestion1 != null),
|
||||
assert(securityAnswer1 != null),
|
||||
assert(securityQuestion2 != null),
|
||||
|
@ -1,5 +1,4 @@
|
||||
import 'package:comunic/utils/date_utils.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:version/version.dart';
|
||||
|
||||
/// Server static configuration
|
||||
@ -11,8 +10,8 @@ class NotificationsPolicy {
|
||||
final bool hasIndependent;
|
||||
|
||||
const NotificationsPolicy({
|
||||
@required this.hasFirebase,
|
||||
@required this.hasIndependent,
|
||||
required this.hasFirebase,
|
||||
required this.hasIndependent,
|
||||
}) : assert(hasFirebase != null),
|
||||
assert(hasIndependent != null);
|
||||
}
|
||||
@ -28,14 +27,14 @@ class PasswordPolicy {
|
||||
final int minCategoriesPresence;
|
||||
|
||||
const PasswordPolicy({
|
||||
@required this.allowMailInPassword,
|
||||
@required this.allowNameInPassword,
|
||||
@required this.minPasswordLength,
|
||||
@required this.minNumberUpperCaseLetters,
|
||||
@required this.minNumberLowerCaseLetters,
|
||||
@required this.minNumberDigits,
|
||||
@required this.minNumberSpecialCharacters,
|
||||
@required this.minCategoriesPresence,
|
||||
required this.allowMailInPassword,
|
||||
required this.allowNameInPassword,
|
||||
required this.minPasswordLength,
|
||||
required this.minNumberUpperCaseLetters,
|
||||
required this.minNumberLowerCaseLetters,
|
||||
required this.minNumberDigits,
|
||||
required this.minNumberSpecialCharacters,
|
||||
required this.minCategoriesPresence,
|
||||
}) : assert(allowMailInPassword != null),
|
||||
assert(allowNameInPassword != null),
|
||||
assert(minPasswordLength != null),
|
||||
@ -55,12 +54,12 @@ class ServerDataConservationPolicy {
|
||||
final int minLikesLifetime;
|
||||
|
||||
const ServerDataConservationPolicy({
|
||||
@required this.minInactiveAccountLifetime,
|
||||
@required this.minNotificationLifetime,
|
||||
@required this.minCommentsLifetime,
|
||||
@required this.minPostsLifetime,
|
||||
@required this.minConversationMessagesLifetime,
|
||||
@required this.minLikesLifetime,
|
||||
required this.minInactiveAccountLifetime,
|
||||
required this.minNotificationLifetime,
|
||||
required this.minCommentsLifetime,
|
||||
required this.minPostsLifetime,
|
||||
required this.minConversationMessagesLifetime,
|
||||
required this.minLikesLifetime,
|
||||
}) : assert(minInactiveAccountLifetime != null),
|
||||
assert(minNotificationLifetime != null),
|
||||
assert(minCommentsLifetime != null),
|
||||
@ -85,19 +84,19 @@ class ConversationsPolicy {
|
||||
final int maxLogoHeight;
|
||||
|
||||
const ConversationsPolicy({
|
||||
@required this.maxConversationNameLen,
|
||||
@required this.minMessageLen,
|
||||
@required this.maxMessageLen,
|
||||
@required this.allowedFilesType,
|
||||
@required this.filesMaxSize,
|
||||
@required this.writingEventInterval,
|
||||
@required this.writingEventLifetime,
|
||||
@required this.maxMessageImageWidth,
|
||||
@required this.maxMessageImageHeight,
|
||||
@required this.maxThumbnailWidth,
|
||||
@required this.maxThumbnailHeight,
|
||||
@required this.maxLogoWidth,
|
||||
@required this.maxLogoHeight,
|
||||
required this.maxConversationNameLen,
|
||||
required this.minMessageLen,
|
||||
required this.maxMessageLen,
|
||||
required this.allowedFilesType,
|
||||
required this.filesMaxSize,
|
||||
required this.writingEventInterval,
|
||||
required this.writingEventLifetime,
|
||||
required this.maxMessageImageWidth,
|
||||
required this.maxMessageImageHeight,
|
||||
required this.maxThumbnailWidth,
|
||||
required this.maxThumbnailHeight,
|
||||
required this.maxLogoWidth,
|
||||
required this.maxLogoHeight,
|
||||
}) : assert(maxConversationNameLen != null),
|
||||
assert(minMessageLen != null),
|
||||
assert(maxMessageLen != null),
|
||||
@ -121,11 +120,11 @@ class AccountInformationPolicy {
|
||||
final int maxLocationLength;
|
||||
|
||||
const AccountInformationPolicy({
|
||||
@required this.minFirstNameLength,
|
||||
@required this.maxFirstNameLength,
|
||||
@required this.minLastNameLength,
|
||||
@required this.maxLastNameLength,
|
||||
@required this.maxLocationLength,
|
||||
required this.minFirstNameLength,
|
||||
required this.maxFirstNameLength,
|
||||
required this.minLastNameLength,
|
||||
required this.maxLastNameLength,
|
||||
required this.maxLocationLength,
|
||||
}) : assert(minFirstNameLength != null),
|
||||
assert(maxFirstNameLength != null),
|
||||
assert(minLastNameLength != null),
|
||||
@ -136,7 +135,7 @@ class AccountInformationPolicy {
|
||||
enum BannerNature { Information, Warning, Success }
|
||||
|
||||
extension BannerNatureExt on BannerNature {
|
||||
static BannerNature fromStr(String s) {
|
||||
static BannerNature fromStr(String? s) {
|
||||
switch (s) {
|
||||
case "information":
|
||||
return BannerNature.Information;
|
||||
@ -151,22 +150,22 @@ extension BannerNatureExt on BannerNature {
|
||||
|
||||
class Banner {
|
||||
final bool enabled;
|
||||
final int expire;
|
||||
final int? expire;
|
||||
final BannerNature nature;
|
||||
final Map<String, String> message;
|
||||
final String link;
|
||||
final String? link;
|
||||
|
||||
const Banner({
|
||||
@required this.enabled,
|
||||
@required this.expire,
|
||||
@required this.nature,
|
||||
@required this.message,
|
||||
@required this.link,
|
||||
required this.enabled,
|
||||
required this.expire,
|
||||
required this.nature,
|
||||
required this.message,
|
||||
required this.link,
|
||||
}) : assert(enabled != null),
|
||||
assert(nature != null),
|
||||
assert(message != null);
|
||||
|
||||
bool get visible => enabled && (expire == null || expire > time());
|
||||
bool get visible => enabled && (expire == null || expire! > time());
|
||||
}
|
||||
|
||||
class ServerConfig {
|
||||
@ -176,7 +175,7 @@ class ServerConfig {
|
||||
final String contactEmail;
|
||||
final String playStoreURL;
|
||||
final String androidDirectDownloadURL;
|
||||
final Banner banner;
|
||||
final Banner? banner;
|
||||
final NotificationsPolicy notificationsPolicy;
|
||||
final PasswordPolicy passwordPolicy;
|
||||
final ServerDataConservationPolicy dataConservationPolicy;
|
||||
@ -184,18 +183,18 @@ class ServerConfig {
|
||||
final AccountInformationPolicy accountInformationPolicy;
|
||||
|
||||
const ServerConfig({
|
||||
@required this.minSupportedMobileVersion,
|
||||
@required this.termsURL,
|
||||
@required this.privacyPolicyURL,
|
||||
@required this.contactEmail,
|
||||
@required this.playStoreURL,
|
||||
@required this.androidDirectDownloadURL,
|
||||
@required this.banner,
|
||||
@required this.notificationsPolicy,
|
||||
@required this.passwordPolicy,
|
||||
@required this.dataConservationPolicy,
|
||||
@required this.conversationsPolicy,
|
||||
@required this.accountInformationPolicy,
|
||||
required this.minSupportedMobileVersion,
|
||||
required this.termsURL,
|
||||
required this.privacyPolicyURL,
|
||||
required this.contactEmail,
|
||||
required this.playStoreURL,
|
||||
required this.androidDirectDownloadURL,
|
||||
required this.banner,
|
||||
required this.notificationsPolicy,
|
||||
required this.passwordPolicy,
|
||||
required this.dataConservationPolicy,
|
||||
required this.conversationsPolicy,
|
||||
required this.accountInformationPolicy,
|
||||
}) : assert(minSupportedMobileVersion != null),
|
||||
assert(termsURL != null),
|
||||
assert(privacyPolicyURL != null),
|
||||
|
@ -1,6 +1,5 @@
|
||||
import 'package:comunic/models/survey_choice.dart';
|
||||
import 'package:comunic/utils/account_utils.dart' as account;
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
/// Survey information
|
||||
///
|
||||
@ -17,14 +16,14 @@ class Survey {
|
||||
bool allowNewChoicesCreation;
|
||||
|
||||
Survey({
|
||||
@required this.id,
|
||||
@required this.userID,
|
||||
@required this.postID,
|
||||
@required this.creationTime,
|
||||
@required this.question,
|
||||
@required this.userChoice,
|
||||
@required this.choices,
|
||||
@required this.allowNewChoicesCreation,
|
||||
required this.id,
|
||||
required this.userID,
|
||||
required this.postID,
|
||||
required this.creationTime,
|
||||
required this.question,
|
||||
required this.userChoice,
|
||||
required this.choices,
|
||||
required this.allowNewChoicesCreation,
|
||||
}) : assert(id != null),
|
||||
assert(userID != null),
|
||||
assert(postID != null),
|
||||
@ -43,14 +42,14 @@ class Survey {
|
||||
bool get canBlockNewChoicesCreation =>
|
||||
allowNewChoicesCreation && account.userID() == this.userID;
|
||||
|
||||
SurveyChoice get userResponse {
|
||||
SurveyChoice? get userResponse {
|
||||
if (!hasResponded) return null;
|
||||
|
||||
return choices.firstWhere((e) => e.id == userChoice);
|
||||
}
|
||||
|
||||
void cancelUserResponse() {
|
||||
if (hasResponded) userResponse.responses--;
|
||||
if (hasResponded) userResponse!.responses--;
|
||||
userChoice = 0;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
|
||||
/// Single survey choice
|
||||
///
|
||||
@ -10,9 +10,9 @@ class SurveyChoice {
|
||||
int responses;
|
||||
|
||||
SurveyChoice({
|
||||
@required this.id,
|
||||
@required this.name,
|
||||
@required this.responses,
|
||||
required this.id,
|
||||
required this.name,
|
||||
required this.responses,
|
||||
}) : assert(id != null),
|
||||
assert(name != null),
|
||||
assert(responses != null);
|
||||
|
@ -1,6 +1,5 @@
|
||||
import 'package:comunic/models/conversation.dart';
|
||||
import 'package:comunic/models/conversation_message.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// Unread conversation information
|
||||
///
|
||||
@ -11,8 +10,8 @@ class UnreadConversation {
|
||||
final ConversationMessage message;
|
||||
|
||||
const UnreadConversation({
|
||||
@required this.conv,
|
||||
@required this.message,
|
||||
required this.conv,
|
||||
required this.message,
|
||||
}) : assert(conv != null),
|
||||
assert(message != null);
|
||||
}
|
||||
|
@ -5,7 +5,6 @@ import 'package:comunic/helpers/serialization/base_serialization_helper.dart';
|
||||
import 'package:comunic/lists/custom_emojies_list.dart';
|
||||
import 'package:comunic/utils/account_utils.dart';
|
||||
import 'package:comunic/utils/ui_utils.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
/// Single user information
|
||||
///
|
||||
@ -13,21 +12,21 @@ import 'package:meta/meta.dart';
|
||||
|
||||
class User implements SerializableElement<User> {
|
||||
final int id;
|
||||
final String firstName;
|
||||
final String lastName;
|
||||
final String? firstName;
|
||||
final String? lastName;
|
||||
final UserPageVisibility pageVisibility;
|
||||
final String virtualDirectory;
|
||||
final String accountImageURL;
|
||||
final String? virtualDirectory;
|
||||
final String? accountImageURL;
|
||||
final CustomEmojiesList customEmojies;
|
||||
|
||||
const User({
|
||||
@required this.id,
|
||||
@required this.firstName,
|
||||
@required this.lastName,
|
||||
@required this.pageVisibility,
|
||||
@required this.virtualDirectory,
|
||||
@required this.accountImageURL,
|
||||
@required this.customEmojies,
|
||||
required int this.id,
|
||||
required String this.firstName,
|
||||
required String this.lastName,
|
||||
required this.pageVisibility,
|
||||
required this.virtualDirectory,
|
||||
required String this.accountImageURL,
|
||||
required this.customEmojies,
|
||||
}) : assert(id != null),
|
||||
assert(id > 0),
|
||||
assert(firstName != null),
|
||||
@ -37,13 +36,13 @@ class User implements SerializableElement<User> {
|
||||
assert(customEmojies != null);
|
||||
|
||||
/// Get user full name
|
||||
String get fullName => firstName + " " + lastName;
|
||||
String get fullName => firstName! + " " + lastName!;
|
||||
|
||||
/// Get user display name
|
||||
String get displayName => htmlDecodeCharacters(fullName);
|
||||
|
||||
bool get hasVirtualDirectory =>
|
||||
virtualDirectory != null && virtualDirectory.length > 0;
|
||||
virtualDirectory != null && virtualDirectory!.length > 0;
|
||||
|
||||
bool get isCurrentUser => id == userID();
|
||||
|
||||
@ -69,5 +68,5 @@ class User implements SerializableElement<User> {
|
||||
jsonDecode(map["customEmojies"]));
|
||||
|
||||
@override
|
||||
int compareTo(User other) => id.compareTo(other.id);
|
||||
int compareTo(User other) => id!.compareTo(other.id!);
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
/// WebSocket message
|
||||
///
|
||||
/// @author Pierre Hubert
|
||||
@ -12,9 +10,9 @@ class WsMessage {
|
||||
final dynamic data;
|
||||
|
||||
const WsMessage({
|
||||
@required this.id,
|
||||
@required this.title,
|
||||
@required this.data,
|
||||
required this.id,
|
||||
required this.title,
|
||||
required this.data,
|
||||
}) : assert(id != null),
|
||||
assert(title != null),
|
||||
assert(title.length > 0);
|
||||
|
Reference in New Issue
Block a user