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