fix flutter analyze issues

This commit is contained in:
Salvatore Giordano
2021-02-02 12:15:54 +01:00
parent c89b54a65b
commit 47ccc0491a
27 changed files with 204 additions and 217 deletions
@@ -1,63 +1,63 @@
#include: package:pedantic/analysis_options.yaml
#
#analyzer:
# enable-experiment:
# - extension-methods
# exclude:
# - lib/**/*.g.dart
# - example/**
#
#linter:
# rules:
# # these rules are documented on and in the same order as
# # the Dart Lint rules page to make maintenance easier
# # https://github.com/dart-lang/linter/blob/master/example/all.yaml
# # - always_declare_return_types
# # - always_specify_types
# # - annotate_overrides
# # - avoid_as
# - avoid_empty_else
# - avoid_init_to_null
# - avoid_return_types_on_setters
# - avoid_web_libraries_in_flutter
# - await_only_futures
# - camel_case_types
# - cancel_subscriptions
# - close_sinks
# # - comment_references # we do not presume as to what people want to reference in their dartdocs
# # - constant_identifier_names # https://github.com/dart-lang/linter/issues/204
# - control_flow_in_finally
# - empty_constructor_bodies
# - empty_statements
# - hash_and_equals
# - implementation_imports
# # - invariant_booleans
# # - iterable_contains_unrelated_type
# - library_names
# # - library_prefixes
# # - list_remove_unrelated_type
# # - literal_only_boolean_expressions
# - non_constant_identifier_names
# # - one_member_abstracts
# # - only_throw_errors
# # - overridden_fields
## - package_api_docs
# - package_names
# - package_prefixed_library_names
# - prefer_is_not_empty
# # - prefer_mixin # https://github.com/dart-lang/language/issues/32
# - public_member_api_docs
# - slash_for_doc_comments
# # - sort_constructors_first
# # - sort_unnamed_constructors_first
# # - super_goes_last # no longer needed w/ Dart 2
# - test_types_in_equals
# - throw_in_finally
# # - type_annotate_public_apis # subset of always_specify_types
# - type_init_formals
# # - unawaited_futures
# - unnecessary_brace_in_string_interps
# - unnecessary_getters_setters
# - unnecessary_statements
include: package:pedantic/analysis_options.yaml
analyzer:
enable-experiment:
- extension-methods
exclude:
- lib/**/*.g.dart
- example/**
linter:
rules:
# these rules are documented on and in the same order as
# the Dart Lint rules page to make maintenance easier
# https://github.com/dart-lang/linter/blob/master/example/all.yaml
# - always_declare_return_types
# - always_specify_types
# - annotate_overrides
# - avoid_as
- avoid_empty_else
- avoid_init_to_null
- avoid_return_types_on_setters
- avoid_web_libraries_in_flutter
- await_only_futures
- camel_case_types
- cancel_subscriptions
- close_sinks
# - comment_references # we do not presume as to what people want to reference in their dartdocs
# - constant_identifier_names # https://github.com/dart-lang/linter/issues/204
- control_flow_in_finally
- empty_constructor_bodies
- empty_statements
- hash_and_equals
- implementation_imports
# - invariant_booleans
# - iterable_contains_unrelated_type
- library_names
# - library_prefixes
# - list_remove_unrelated_type
# - literal_only_boolean_expressions
- non_constant_identifier_names
# - one_member_abstracts
# - only_throw_errors
# - overridden_fields
# - package_api_docs
- package_names
- package_prefixed_library_names
- prefer_is_not_empty
# - prefer_mixin # https://github.com/dart-lang/language/issues/32
- public_member_api_docs
- slash_for_doc_comments
# - sort_constructors_first
# - sort_unnamed_constructors_first
# - super_goes_last # no longer needed w/ Dart 2
- test_types_in_equals
- throw_in_finally
# - type_annotate_public_apis # subset of always_specify_types
- type_init_formals
# - unawaited_futures
- unnecessary_brace_in_string_interps
- unnecessary_getters_setters
- unnecessary_statements
- unrelated_type_equality_checks
- valid_regexps
@@ -1,7 +1,6 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:jiffy/jiffy.dart';
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
import 'main.dart';
@@ -285,7 +284,7 @@ class _ChatInfoScreenState extends State<ChatInfoScreen> {
titleTextStyle: StreamChatTheme.of(context).textTheme.body,
leading: Padding(
padding: const EdgeInsets.symmetric(horizontal: 22.0),
child: StreamSvgIcon.Icon_group(
child: StreamSvgIcon.iconGroup(
size: 24.0,
color:
StreamChatTheme.of(context).colorTheme.black.withOpacity(0.5),
@@ -213,7 +213,7 @@ class ChooseUserPage extends StatelessWidget {
.grey,
),
),
trailing: StreamSvgIcon.arrow_right(
trailing: StreamSvgIcon.arrowRight(
color: StreamChatTheme.of(context)
.colorTheme
.accentBlue,
@@ -377,7 +377,7 @@ class _GroupInfoScreenState extends State<GroupInfoScreen> {
mainAxisSize: MainAxisSize.min,
children: [
InkWell(
child: StreamSvgIcon.close_small(),
child: StreamSvgIcon.closeSmall(),
onTap: () {
setState(() {
_nameController.text =
@@ -739,7 +739,7 @@ class _GroupInfoScreenState extends State<GroupInfoScreen> {
),
SizedBox(width: 16.0),
IconButton(
icon: StreamSvgIcon.close_small(
icon: StreamSvgIcon.closeSmall(
color: theme.colorTheme.grey,
),
constraints: BoxConstraints.tightFor(
@@ -869,7 +869,7 @@ class _GroupInfoScreenState extends State<GroupInfoScreen> {
isUserAdmin)
_buildModalListTile(
context,
StreamSvgIcon.Icon_user_settings(
StreamSvgIcon.iconUserSettings(
color: StreamChatTheme.of(context).colorTheme.grey,
size: 24.0,
),
@@ -891,7 +891,7 @@ class _GroupInfoScreenState extends State<GroupInfoScreen> {
}, color: StreamChatTheme.of(context).colorTheme.accentRed),
_buildModalListTile(
context,
StreamSvgIcon.close_small(
StreamSvgIcon.closeSmall(
color: StreamChatTheme.of(context).colorTheme.grey,
size: 24.0,
),
@@ -294,7 +294,7 @@ class _HomePageState extends State<HomePage> {
),
),
trailing: IconButton(
icon: StreamSvgIcon.Icon_moon(
icon: StreamSvgIcon.iconMoon(
size: 24,
),
color: StreamChatTheme.of(context).colorTheme.grey,
@@ -67,7 +67,7 @@ class _NewGroupChatScreenState extends State<NewGroupChatScreen> {
actions: [
if (_selectedUsers.isNotEmpty)
IconButton(
icon: StreamSvgIcon.arrow_right(
icon: StreamSvgIcon.arrowRight(
color: StreamChatTheme.of(context).colorTheme.accentBlue,
),
onPressed: () async {
@@ -71,7 +71,7 @@ class SearchTextField extends StatelessWidget {
color: Colors.transparent,
child: IconButton(
padding: const EdgeInsets.all(0),
icon: StreamSvgIcon.close_small(
icon: StreamSvgIcon.closeSmall(
color: Colors.grey,
),
splashRadius: 24,
@@ -195,7 +195,7 @@ class _ChannelBottomSheetState extends State<ChannelBottomSheet> {
OptionListTile(
leading: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: StreamSvgIcon.close_small(
child: StreamSvgIcon.closeSmall(
color: StreamChatTheme.of(context).colorTheme.grey,
),
),
@@ -89,8 +89,8 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget {
return ConnectionStatusBuilder(
statusBuilder: (context, status) {
String statusString = '';
bool showStatus = true;
var statusString = '';
var showStatus = true;
switch (status) {
case ConnectionStatus.connected:
@@ -82,8 +82,8 @@ class ChannelListHeader extends StatelessWidget implements PreferredSizeWidget {
final user = _client.state.user;
return ConnectionStatusBuilder(
statusBuilder: (context, status) {
String statusString = '';
bool showStatus = true;
var statusString = '';
var showStatus = true;
switch (status) {
case ConnectionStatus.connected:
@@ -1,8 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:jiffy/jiffy.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'package:stream_chat_flutter/src/stream_svg_icon.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import '../stream_chat_flutter.dart';
import 'channel_name.dart';
@@ -269,7 +269,7 @@ class ChannelPreview extends StatelessWidget {
TextStyle normalTextStyle,
TextStyle mentionsTextStyle) {
var textList = text.split(' ');
List<TextSpan> resList = [];
var resList = <TextSpan>[];
for (var e in textList) {
if (mentions != null &&
mentions.isNotEmpty &&
@@ -1,18 +1,20 @@
import 'package:emojis/emoji.dart';
import 'package:characters/characters.dart';
import 'package:emojis/emoji.dart';
final _emojis = Emoji.all();
/// String extension
extension StringExtension on String {
/// Returns the capitalized string
String capitalize() {
return "${this[0].toUpperCase()}${this.substring(1)}";
return '${this[0].toUpperCase()}${substring(1)}';
}
// Emojis guidelines
// 1 to 3 emojis: big size with no text bubble.
// 4+ emojis or emojis+text: standard size with text bubble.
bool get isOnlyEmoji {
final characters = this.trim().characters;
final characters = trim().characters;
if (characters.isEmpty) return false;
if (characters.length > 3) return false;
return characters.every((c) => _emojis.map((e) => e.char).contains(c));
@@ -3,10 +3,10 @@ import 'dart:io';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'package:stream_chat_flutter/src/stream_chat_theme.dart';
import 'package:stream_chat_flutter/src/stream_svg_icon.dart';
import 'package:stream_chat_flutter/src/utils.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'package:video_compress/video_compress.dart';
import 'package:video_player/video_player.dart';
@@ -110,7 +110,7 @@ class _FileAttachmentState extends State<FileAttachment> {
type: MaterialType.transparency,
child: widget.trailing ??
IconButton(
icon: StreamSvgIcon.cloud_download(
icon: StreamSvgIcon.cloudDownload(
color: StreamChatTheme.of(context).colorTheme.black,
),
padding: const EdgeInsets.all(8),
@@ -258,9 +258,9 @@ class VideoPackage {
_videoPlayerController.addListener(errorListener);
}
get videoPlayer => _videoPlayerController;
VideoPlayerController get videoPlayer => _videoPlayerController;
get chewieController => _chewieController;
ChewieController get chewieController => _chewieController;
void dispose() {
_videoPlayerController.dispose();
@@ -56,7 +56,7 @@ class ImageActionsModal extends StatelessWidget {
_buildButton(
context,
'Reply',
StreamSvgIcon.Icon_curve_line_left_up(
StreamSvgIcon.iconCurveLineLeftUp(
size: 24.0,
color: StreamChatTheme.of(context).colorTheme.grey,
),
@@ -76,7 +76,7 @@ class ImageActionsModal extends StatelessWidget {
_buildButton(
context,
'Save ${urls[currentIndex].type == 'video' ? 'Video' : 'Image'}',
StreamSvgIcon.Icon_save(
StreamSvgIcon.iconSave(
size: 24.0,
color: StreamChatTheme.of(context).colorTheme.grey,
),
@@ -167,14 +167,14 @@ class ImageActionsModal extends StatelessWidget {
final result = await ImageGallerySaver.saveImage(
Uint8List.fromList(response.data),
quality: 60,
name: "${DateTime.now().millisecondsSinceEpoch}");
name: '${DateTime.now().millisecondsSinceEpoch}');
return result;
}
Future<void> _saveVideo(String url) async {
var appDocDir = await getTemporaryDirectory();
var savePath =
appDocDir.path + "/${DateTime.now().millisecondsSinceEpoch}.mp4";
appDocDir.path + '/${DateTime.now().millisecondsSinceEpoch}.mp4';
await Dio().download(url, savePath);
final result = await ImageGallerySaver.saveFile(savePath);
print(result);
@@ -7,9 +7,9 @@ import 'package:dio/dio.dart';
import 'package:esys_flutter_share/esys_flutter_share.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'package:stream_chat_flutter/src/stream_chat_theme.dart';
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
class ImageFooter extends StatefulWidget implements PreferredSizeWidget {
/// Callback to call when pressing the back button.
@@ -54,36 +54,17 @@ class ImageFooter extends StatefulWidget implements PreferredSizeWidget {
}
class _ImageFooterState extends State<ImageFooter> {
//ignore:unused_field
bool _userSearchMode = false;
TextEditingController _searchController;
final TextEditingController _messageController = TextEditingController();
final FocusNode _messageFocusNode = FocusNode();
//ignore:unused_field
String _channelNameQuery;
final List<Channel> _selectedChannels = [];
Timer _debounce;
Function modalSetStateCallback;
void _userNameListener() {
if (_debounce?.isActive ?? false) _debounce.cancel();
_debounce = Timer(const Duration(milliseconds: 350), () {
if (mounted && modalSetStateCallback != null) {
modalSetStateCallback(() {
_channelNameQuery = _searchController.text;
});
}
});
}
@override
void initState() {
super.initState();
_searchController = TextEditingController()..addListener(_userNameListener);
_messageFocusNode.addListener(() {
setState(() {});
});
@@ -92,7 +73,6 @@ class _ImageFooterState extends State<ImageFooter> {
@override
void dispose() {
_searchController?.clear();
_searchController?.removeListener(_userNameListener);
_searchController?.dispose();
super.dispose();
}
@@ -113,7 +93,7 @@ class _ImageFooterState extends State<ImageFooter> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
IconButton(
icon: StreamSvgIcon.Icon_SHARE(
icon: StreamSvgIcon.iconShare(
size: 24.0,
color: StreamChatTheme.of(context).colorTheme.black,
),
@@ -151,7 +131,7 @@ class _ImageFooterState extends State<ImageFooter> {
),
),
IconButton(
icon: StreamSvgIcon.Icon_grid(
icon: StreamSvgIcon.iconGrid(
color: StreamChatTheme.of(context).colorTheme.black,
),
onPressed: () => _showPhotosModal(context),
@@ -174,9 +154,9 @@ class _ImageFooterState extends State<ImageFooter> {
backgroundColor: StreamChatTheme.of(context).colorTheme.white,
isScrollControlled: true,
shape: const RoundedRectangleBorder(
borderRadius: const BorderRadius.only(
topLeft: const Radius.circular(16.0),
topRight: const Radius.circular(16.0),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(16.0),
topRight: Radius.circular(16.0),
),
),
builder: (context) {
@@ -1,7 +1,8 @@
import 'package:flutter/material.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'package:stream_chat_flutter/src/stream_chat_theme.dart';
import 'package:stream_chat_flutter/src/stream_svg_icon.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'image_actions_modal.dart';
class ImageHeader extends StatelessWidget implements PreferredSizeWidget {
@@ -63,7 +64,7 @@ class ImageHeader extends StatelessWidget implements PreferredSizeWidget {
StreamChatTheme.of(context).channelTheme.channelHeaderTheme.color,
actions: <Widget>[
IconButton(
icon: StreamSvgIcon.Icon_menu_point_v(
icon: StreamSvgIcon.iconMenuPoint(
color: StreamChatTheme.of(context).colorTheme.black,
),
onPressed: () {
@@ -1,14 +1,14 @@
import 'package:http_parser/http_parser.dart' as httpParser;
import 'package:http_parser/http_parser.dart' as http_parser;
import 'package:mime/mime.dart';
class MediaUtils {
static httpParser.MediaType getMimeType(String filename) {
httpParser.MediaType mimeType;
static http_parser.MediaType getMimeType(String filename) {
http_parser.MediaType mimeType;
if (filename != null) {
if (filename.toLowerCase().endsWith('heic')) {
mimeType = httpParser.MediaType.parse('image/heic');
mimeType = http_parser.MediaType.parse('image/heic');
} else {
mimeType = httpParser.MediaType.parse(lookupMimeType(filename));
mimeType = http_parser.MediaType.parse(lookupMimeType(filename));
}
}
@@ -4,16 +4,16 @@ import 'dart:ui';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'package:stream_chat_flutter/src/reaction_picker.dart';
import 'package:stream_chat_flutter/src/stream_svg_icon.dart';
import 'package:stream_chat_flutter/src/utils.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'extension.dart';
import 'message_input.dart';
import 'message_widget.dart';
import 'stream_chat.dart';
import 'stream_chat_theme.dart';
import 'extension.dart';
class MessageActionsModal extends StatefulWidget {
final Widget Function(BuildContext, Message) editMessageInputBuilder;
@@ -280,20 +280,22 @@ class _MessageActionsModalState extends State<MessageActionsModal> {
setState(() {
_showActions = false;
});
var answer = await showConfirmationDialog(context,
title: 'Delete message',
icon: StreamSvgIcon.flag(
color: StreamChatTheme.of(context).colorTheme.accentRed,
size: 24.0,
),
question: 'Are you sure you want to permanently delete this\nmessage?',
okText: 'DELETE',
cancelText: 'CANCEL');
var answer = await showConfirmationDialog(
context,
title: 'Delete message',
icon: StreamSvgIcon.flag(
color: StreamChatTheme.of(context).colorTheme.accentRed,
size: 24.0,
),
question: 'Are you sure you want to permanently delete this\nmessage?',
okText: 'DELETE',
cancelText: 'CANCEL',
);
if (answer) {
try {
Navigator.pop(context);
StreamChat.of(context).client.deleteMessage(
await StreamChat.of(context).client.deleteMessage(
widget.message,
StreamChannel.of(context).channel.cid,
);
@@ -470,7 +472,7 @@ class _MessageActionsModalState extends State<MessageActionsModal> {
padding: const EdgeInsets.symmetric(vertical: 11.0, horizontal: 16.0),
child: Row(
children: [
StreamSvgIcon.icon_flag(
StreamSvgIcon.iconFlag(
color: StreamChatTheme.of(context).primaryIconTheme.color,
),
const SizedBox(width: 16),
@@ -577,7 +579,7 @@ class _MessageActionsModalState extends State<MessageActionsModal> {
padding: const EdgeInsets.symmetric(vertical: 11.0, horizontal: 16.0),
child: Row(
children: [
StreamSvgIcon.circle_up(
StreamSvgIcon.circleUp(
color: StreamChatTheme.of(context).colorTheme.accentBlue,
),
const SizedBox(width: 16),
@@ -632,7 +634,7 @@ class _MessageActionsModalState extends State<MessageActionsModal> {
),
IconButton(
visualDensity: VisualDensity.compact,
icon: StreamSvgIcon.close_small(),
icon: StreamSvgIcon.closeSmall(),
onPressed: Navigator.of(context).pop,
),
],
@@ -9,7 +9,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:http_parser/http_parser.dart' as httpParser;
import 'package:http_parser/http_parser.dart' as http_parser;
import 'package:image_picker/image_picker.dart';
import 'package:mime/mime.dart';
import 'package:photo_manager/photo_manager.dart';
@@ -202,7 +202,7 @@ class MessageInputState extends State<MessageInput> {
bool _openFilePickerSection = false;
int _filePickerIndex = 0;
double _filePickerSize = _kMinMediaPickerSize;
KeyboardVisibilityController _keyboardVisibilityController =
final KeyboardVisibilityController _keyboardVisibilityController =
KeyboardVisibilityController();
/// The editing controller passed to the input TextField
@@ -247,7 +247,7 @@ class MessageInputState extends State<MessageInput> {
),
IconButton(
visualDensity: VisualDensity.compact,
icon: StreamSvgIcon.close_small(),
icon: StreamSvgIcon.closeSmall(),
onPressed: widget.onQuotedMessageCleared,
),
],
@@ -493,7 +493,7 @@ class MessageInputState extends State<MessageInput> {
: null,
suffixIcon: _commandEnabled
? IconButton(
icon: StreamSvgIcon.close_small(),
icon: StreamSvgIcon.closeSmall(),
splashRadius: 24,
padding: const EdgeInsets.all(0),
constraints: BoxConstraints.tightFor(
@@ -1128,7 +1128,7 @@ class MessageInputState extends State<MessageInput> {
case 'ban':
return CircleAvatar(
backgroundColor: StreamChatTheme.of(context).colorTheme.accentBlue,
child: StreamSvgIcon.Icon_user_delete(
child: StreamSvgIcon.iconUserDelete(
size: 16.0,
color: Colors.white,
),
@@ -1964,7 +1964,7 @@ class MessageInputState extends State<MessageInput> {
final mimeType = _getMimeType(file.path.split('/').last);
Map<String, dynamic> extraDataMap = {};
var extraDataMap = <String, dynamic>{};
if (camera) {
if (mimeType.type == 'video' || mimeType.type == 'image') {
@@ -2074,13 +2074,13 @@ class MessageInputState extends State<MessageInput> {
return res.file;
}
httpParser.MediaType _getMimeType(String filename) {
httpParser.MediaType mimeType;
http_parser.MediaType _getMimeType(String filename) {
http_parser.MediaType mimeType;
if (filename != null) {
if (filename.toLowerCase().endsWith('heic')) {
mimeType = httpParser.MediaType.parse('image/heic');
mimeType = http_parser.MediaType.parse('image/heic');
} else {
mimeType = httpParser.MediaType.parse(lookupMimeType(filename));
mimeType = http_parser.MediaType.parse(lookupMimeType(filename));
}
}
@@ -6,18 +6,18 @@ import 'package:flutter/material.dart';
import 'package:jiffy/jiffy.dart';
import 'package:rxdart/rxdart.dart';
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'package:stream_chat_flutter/src/info_tile.dart';
import 'package:stream_chat_flutter/src/message_widget.dart';
import 'package:stream_chat_flutter/src/stream_svg_icon.dart';
import 'package:stream_chat_flutter/src/system_message.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'package:visibility_detector/visibility_detector.dart';
import '../stream_chat_flutter.dart';
import 'connection_status_builder.dart';
import 'date_divider.dart';
import 'swipeable.dart';
import 'extension.dart';
import 'swipeable.dart';
typedef MessageBuilder = Widget Function(
BuildContext,
@@ -237,7 +237,7 @@ class _MessageListViewState extends State<MessageListView> {
bool _inBetweenList = false;
MessageListController _messageListController = MessageListController();
final MessageListController _messageListController = MessageListController();
@override
Widget build(BuildContext context) {
@@ -308,8 +308,8 @@ class _MessageListViewState extends State<MessageListView> {
children: [
ConnectionStatusBuilder(
statusBuilder: (context, status) {
String statusString = '';
bool showStatus = true;
var statusString = '';
var showStatus = true;
switch (status) {
case ConnectionStatus.connected:
statusString = 'Connected';
@@ -878,7 +878,7 @@ class _MessageListViewState extends State<MessageListView> {
if (messages.map((e) => e.id).contains(quotedMessageId)) {
scrollToIndex();
} else {
streamChannel.loadChannelAtMessage(quotedMessageId).then((_) {
await streamChannel.loadChannelAtMessage(quotedMessageId).then((_) {
WidgetsBinding.instance.addPostFrameCallback((_) {
if (messages.map((e) => e.id).contains(quotedMessageId)) {
scrollToIndex();
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:jiffy/jiffy.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
/// It shows the current [Message] preview.
///
@@ -152,7 +152,7 @@ class MessageSearchItem extends StatelessWidget {
TextStyle normalTextStyle,
TextStyle mentionsTextStyle) {
var textList = text.split(' ');
List<TextSpan> resList = [];
var resList = <TextSpan>[];
for (var e in textList) {
if (mentions != null &&
mentions.isNotEmpty &&
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'package:stream_chat_flutter/src/info_tile.dart';
import 'package:stream_chat_flutter/src/message_search_item.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import '../stream_chat_flutter.dart';
@@ -116,7 +116,7 @@ class MessageSearchListView extends StatefulWidget {
}
class _MessageSearchListViewState extends State<MessageSearchListView> {
MessageSearchListController _messageSearchListController =
final MessageSearchListController _messageSearchListController =
MessageSearchListController();
@override
@@ -245,7 +245,7 @@ class _MessageSearchListViewState extends State<MessageSearchListView> {
}
Widget _buildQueryProgressIndicator(context) {
MessageSearchBlocState messageSearchBloc = MessageSearchBloc.of(context);
final messageSearchBloc = MessageSearchBloc.of(context);
return StreamBuilder<bool>(
stream: messageSearchBloc.queryMessagesLoading,
@@ -1,11 +1,11 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'package:stream_chat_flutter/src/channel_header.dart';
import 'package:stream_chat_flutter/src/channel_preview.dart';
import 'package:stream_chat_flutter/src/message_input.dart';
import 'package:stream_chat_flutter/src/reaction_icon.dart';
import 'package:stream_chat_flutter/src/utils.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
/// Inherited widget providing the [StreamChatThemeData] to the widget tree
class StreamChatTheme extends InheritedWidget {
@@ -476,7 +476,7 @@ class ColorTheme {
this.bgGradient = const LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [const Color(0xfff7f7f7), const Color(0xfffcfcfc)],
colors: [Color(0xfff7f7f7), Color(0xfffcfcfc)],
stops: [0, 1],
),
this.borderTop = const Effect(
@@ -519,7 +519,10 @@ class ColorTheme {
this.bgGradient = const LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [const Color(0xff101214), const Color(0xff070a0d)],
colors: [
Color(0xff101214),
Color(0xff070a0d),
],
stops: [0, 1],
),
});
@@ -386,7 +386,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.cloud_download({
factory StreamSvgIcon.cloudDownload({
double size,
Color color,
}) {
@@ -434,7 +434,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.arrow_right({
factory StreamSvgIcon.arrowRight({
double size,
Color color,
}) {
@@ -446,7 +446,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.close_small({
factory StreamSvgIcon.closeSmall({
double size,
Color color,
}) {
@@ -458,7 +458,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.Icon_curve_line_left_up({
factory StreamSvgIcon.iconCurveLineLeftUp({
double size,
Color color,
}) {
@@ -470,7 +470,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.Icon_moon({
factory StreamSvgIcon.iconMoon({
double size,
Color color,
}) {
@@ -482,7 +482,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.Icon_SHARE({
factory StreamSvgIcon.iconShare({
double size,
Color color,
}) {
@@ -494,7 +494,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.Icon_grid({
factory StreamSvgIcon.iconGrid({
double size,
Color color,
}) {
@@ -506,7 +506,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.Icon_send_message({
factory StreamSvgIcon.iconSendMessage({
double size,
Color color,
}) {
@@ -518,7 +518,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.Icon_menu_point_v({
factory StreamSvgIcon.iconMenuPoint({
double size,
Color color,
}) {
@@ -530,7 +530,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.Icon_save({
factory StreamSvgIcon.iconSave({
double size,
Color color,
}) {
@@ -542,7 +542,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.share_arrow({
factory StreamSvgIcon.shareArrow({
double size,
Color color,
}) {
@@ -554,7 +554,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_7z({
factory StreamSvgIcon.filetype7z({
double size,
Color color,
}) {
@@ -566,7 +566,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_csv({
factory StreamSvgIcon.filetypeCsv({
double size,
Color color,
}) {
@@ -578,7 +578,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_doc({
factory StreamSvgIcon.filetypeDoc({
double size,
Color color,
}) {
@@ -590,7 +590,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_docx({
factory StreamSvgIcon.filetypeDocx({
double size,
Color color,
}) {
@@ -602,7 +602,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_Generic({
factory StreamSvgIcon.filetypeGeneric({
double size,
Color color,
}) {
@@ -614,7 +614,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_html({
factory StreamSvgIcon.filetypeHtml({
double size,
Color color,
}) {
@@ -626,7 +626,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_md({
factory StreamSvgIcon.filetypeMd({
double size,
Color color,
}) {
@@ -638,7 +638,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_odt({
factory StreamSvgIcon.filetypeOdt({
double size,
Color color,
}) {
@@ -650,7 +650,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_pdf({
factory StreamSvgIcon.filetypePdf({
double size,
Color color,
}) {
@@ -662,7 +662,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_ppt({
factory StreamSvgIcon.filetypePpt({
double size,
Color color,
}) {
@@ -674,7 +674,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_pptx({
factory StreamSvgIcon.filetypePptx({
double size,
Color color,
}) {
@@ -686,7 +686,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_rar({
factory StreamSvgIcon.filetypeRar({
double size,
Color color,
}) {
@@ -698,7 +698,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_rtf({
factory StreamSvgIcon.filetypeRtf({
double size,
Color color,
}) {
@@ -710,7 +710,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_tar({
factory StreamSvgIcon.filetypeTar({
double size,
Color color,
}) {
@@ -722,7 +722,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_txt({
factory StreamSvgIcon.filetypeTxt({
double size,
Color color,
}) {
@@ -734,7 +734,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_xls({
factory StreamSvgIcon.filetypeXls({
double size,
Color color,
}) {
@@ -746,7 +746,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_xlsx({
factory StreamSvgIcon.filetypeXlsx({
double size,
Color color,
}) {
@@ -758,7 +758,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.filetype_zip({
factory StreamSvgIcon.filetypeZip({
double size,
Color color,
}) {
@@ -770,7 +770,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.Icon_group({
factory StreamSvgIcon.iconGroup({
double size,
Color color,
}) {
@@ -782,7 +782,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.Icon_notification({
factory StreamSvgIcon.iconNotification({
double size,
Color color,
}) {
@@ -794,7 +794,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.Icon_user_delete({
factory StreamSvgIcon.iconUserDelete({
double size,
Color color,
}) {
@@ -818,7 +818,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.circle_up({
factory StreamSvgIcon.circleUp({
double size,
Color color,
}) {
@@ -830,7 +830,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.Icon_user_settings({
factory StreamSvgIcon.iconUserSettings({
double size,
Color color,
}) {
@@ -890,7 +890,7 @@ class StreamSvgIcon extends StatelessWidget {
);
}
factory StreamSvgIcon.icon_flag({
factory StreamSvgIcon.iconFlag({
double size,
Color color,
}) {
@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
import 'user_item.dart';
@@ -138,7 +138,7 @@ class _UserListViewState extends State<UserListView>
with WidgetsBindingObserver {
bool get _isListView => widget.crossAxisCount == 1;
UserListController _userListController = UserListController();
final UserListController _userListController = UserListController();
@override
Widget build(BuildContext context) {
+19 -19
View File
@@ -221,7 +221,7 @@ String getSizeText(int bytes) {
}
if (bytes <= 1000) {
return '${bytes} bytes';
return '$bytes bytes';
} else if (bytes <= 100000) {
return '${(bytes / 1000).toStringAsFixed(2)} KB';
} else {
@@ -233,58 +233,58 @@ String getSizeText(int bytes) {
StreamSvgIcon getFileTypeImage(String type) {
switch (type) {
case '7z':
return StreamSvgIcon.filetype_7z();
return StreamSvgIcon.filetype7z();
break;
case 'csv':
return StreamSvgIcon.filetype_csv();
return StreamSvgIcon.filetypeCsv();
break;
case 'doc':
return StreamSvgIcon.filetype_doc();
return StreamSvgIcon.filetypeDoc();
break;
case 'docx':
return StreamSvgIcon.filetype_docx();
return StreamSvgIcon.filetypeDocx();
break;
case 'html':
return StreamSvgIcon.filetype_html();
return StreamSvgIcon.filetypeHtml();
break;
case 'md':
return StreamSvgIcon.filetype_md();
return StreamSvgIcon.filetypeMd();
break;
case 'odt':
return StreamSvgIcon.filetype_odt();
return StreamSvgIcon.filetypeOdt();
break;
case 'pdf':
return StreamSvgIcon.filetype_pdf();
return StreamSvgIcon.filetypePdf();
break;
case 'ppt':
return StreamSvgIcon.filetype_ppt();
return StreamSvgIcon.filetypePpt();
break;
case 'pptx':
return StreamSvgIcon.filetype_pptx();
return StreamSvgIcon.filetypePptx();
break;
case 'rar':
return StreamSvgIcon.filetype_rar();
return StreamSvgIcon.filetypeRar();
break;
case 'rtf':
return StreamSvgIcon.filetype_rtf();
return StreamSvgIcon.filetypeRtf();
break;
case 'tar':
return StreamSvgIcon.filetype_tar();
return StreamSvgIcon.filetypeTar();
break;
case 'txt':
return StreamSvgIcon.filetype_txt();
return StreamSvgIcon.filetypeTxt();
break;
case 'xls':
return StreamSvgIcon.filetype_xls();
return StreamSvgIcon.filetypeXls();
break;
case 'xlsx':
return StreamSvgIcon.filetype_xlsx();
return StreamSvgIcon.filetypeXlsx();
break;
case 'zip':
return StreamSvgIcon.filetype_zip();
return StreamSvgIcon.filetypeZip();
break;
default:
return StreamSvgIcon.filetype_Generic();
return StreamSvgIcon.filetypeGeneric();
break;
}
}