version bump
This commit is contained in:
@@ -1,3 +1,9 @@
|
|||||||
|
## 0.2.1-alpha+3
|
||||||
|
|
||||||
|
- Update llc dependency
|
||||||
|
|
||||||
|
- Fix hero tag generation for attachment
|
||||||
|
|
||||||
## 0.2.1-alpha+2
|
## 0.2.1-alpha+2
|
||||||
|
|
||||||
- Fixed reactions bubble going below other messages
|
- Fixed reactions bubble going below other messages
|
||||||
|
|||||||
+61
-61
@@ -1,61 +1,61 @@
|
|||||||
#include: package:pedantic/analysis_options.yaml
|
include: package:pedantic/analysis_options.yaml
|
||||||
#
|
|
||||||
#analyzer:
|
analyzer:
|
||||||
# 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
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ class _ChannelListViewState extends State<ChannelListView>
|
|||||||
TextSpan(text: 'Error loading channels'),
|
TextSpan(text: 'Error loading channels'),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
style: Theme.of(context).textTheme.title,
|
style: Theme.of(context).textTheme.headline6,
|
||||||
),
|
),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(
|
padding: const EdgeInsets.only(
|
||||||
|
|||||||
@@ -67,7 +67,8 @@ class DateDivider extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 10,
|
fontSize: 10,
|
||||||
color: Theme.of(context).textTheme.title.color.withOpacity(.5),
|
color:
|
||||||
|
Theme.of(context).textTheme.headline6.color.withOpacity(.5),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ class _FullScreenVideoState extends State<FullScreenVideo> {
|
|||||||
ChewieController _chewieController;
|
ChewieController _chewieController;
|
||||||
VideoPlayerController _videoPlayerController;
|
VideoPlayerController _videoPlayerController;
|
||||||
bool initialized = false;
|
bool initialized = false;
|
||||||
GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey();
|
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@@ -71,8 +71,8 @@ class _FullScreenVideoState extends State<FullScreenVideo> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_videoPlayerController.dispose();
|
_videoPlayerController?.dispose();
|
||||||
_chewieController.dispose();
|
_chewieController?.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import '../stream_chat_flutter.dart';
|
|||||||
import 'attachment_error.dart';
|
import 'attachment_error.dart';
|
||||||
import 'attachment_title.dart';
|
import 'attachment_title.dart';
|
||||||
import 'full_screen_image.dart';
|
import 'full_screen_image.dart';
|
||||||
|
import 'utils.dart';
|
||||||
|
|
||||||
class GiphyAttachment extends StatelessWidget {
|
class GiphyAttachment extends StatelessWidget {
|
||||||
final Attachment attachment;
|
final Attachment attachment;
|
||||||
@@ -48,8 +49,7 @@ class GiphyAttachment extends StatelessWidget {
|
|||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
child: Hero(
|
child: Hero(
|
||||||
tag:
|
tag: getAttachmentHeroTag(message, attachment),
|
||||||
'${message.id} - ${attachment.imageUrl ?? attachment.assetUrl ?? attachment.thumbUrl}',
|
|
||||||
child: CachedNetworkImage(
|
child: CachedNetworkImage(
|
||||||
height: size?.height,
|
height: size?.height,
|
||||||
width: size?.width,
|
width: size?.width,
|
||||||
|
|||||||
@@ -38,8 +38,7 @@ class ImageAttachment extends StatelessWidget {
|
|||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Hero(
|
child: Hero(
|
||||||
tag:
|
tag: getAttachmentHeroTag(message, attachment),
|
||||||
'${message.id} - ${attachment.imageUrl ?? attachment.assetUrl ?? attachment.thumbUrl}',
|
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.push(context, MaterialPageRoute(builder: (_) {
|
Navigator.push(context, MaterialPageRoute(builder: (_) {
|
||||||
|
|||||||
@@ -275,7 +275,7 @@ class MessageInputState extends State<MessageInput> {
|
|||||||
_typingStarted = true;
|
_typingStarted = true;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
style: Theme.of(context).textTheme.body1,
|
style: Theme.of(context).textTheme.bodyText2,
|
||||||
autofocus: false,
|
autofocus: false,
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
hintText: 'Write a message',
|
hintText: 'Write a message',
|
||||||
|
|||||||
@@ -339,9 +339,8 @@ class _MessageWidgetState extends State<MessageWidget> {
|
|||||||
if (_reactionPickerKey.currentContext != null &&
|
if (_reactionPickerKey.currentContext != null &&
|
||||||
widget.message.reactionCounts != null &&
|
widget.message.reactionCounts != null &&
|
||||||
widget.message.reactionCounts.values
|
widget.message.reactionCounts.values
|
||||||
.where((element) => element > 0)
|
.where((element) => element > 0)
|
||||||
.length >
|
.isNotEmpty) {
|
||||||
0) {
|
|
||||||
setState(() {
|
setState(() {
|
||||||
_reactionPadding = _reactionPickerKey.currentContext.size.height;
|
_reactionPadding = _reactionPickerKey.currentContext.size.height;
|
||||||
});
|
});
|
||||||
@@ -624,7 +623,7 @@ class _MessageWidgetState extends State<MessageWidget> {
|
|||||||
EdgeInsetsGeometry padding,
|
EdgeInsetsGeometry padding,
|
||||||
}) {
|
}) {
|
||||||
Widget failedWidget;
|
Widget failedWidget;
|
||||||
if (widget.message.status == MessageSendingStatus.FAILED)
|
if (widget.message.status == MessageSendingStatus.FAILED) {
|
||||||
failedWidget = Text(
|
failedWidget = Text(
|
||||||
'MESSAGE FAILED · CLICK TO TRY AGAIN',
|
'MESSAGE FAILED · CLICK TO TRY AGAIN',
|
||||||
style: widget.messageTheme.messageText.copyWith(
|
style: widget.messageTheme.messageText.copyWith(
|
||||||
@@ -634,7 +633,8 @@ class _MessageWidgetState extends State<MessageWidget> {
|
|||||||
fontSize: 11,
|
fontSize: 11,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
if (widget.message.status == MessageSendingStatus.FAILED_UPDATE)
|
}
|
||||||
|
if (widget.message.status == MessageSendingStatus.FAILED_UPDATE) {
|
||||||
failedWidget = Text(
|
failedWidget = Text(
|
||||||
'MESSAGE UPDATE FAILED · CLICK TO TRY AGAIN',
|
'MESSAGE UPDATE FAILED · CLICK TO TRY AGAIN',
|
||||||
style: widget.messageTheme.messageText.copyWith(
|
style: widget.messageTheme.messageText.copyWith(
|
||||||
@@ -644,7 +644,8 @@ class _MessageWidgetState extends State<MessageWidget> {
|
|||||||
fontSize: 11,
|
fontSize: 11,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
if (widget.message.status == MessageSendingStatus.FAILED_DELETE)
|
}
|
||||||
|
if (widget.message.status == MessageSendingStatus.FAILED_DELETE) {
|
||||||
failedWidget = Text(
|
failedWidget = Text(
|
||||||
'MESSAGE DELETE FAILED · CLICK TO TRY AGAIN',
|
'MESSAGE DELETE FAILED · CLICK TO TRY AGAIN',
|
||||||
style: widget.messageTheme.messageText.copyWith(
|
style: widget.messageTheme.messageText.copyWith(
|
||||||
@@ -654,6 +655,7 @@ class _MessageWidgetState extends State<MessageWidget> {
|
|||||||
fontSize: 11,
|
fontSize: 11,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (failedWidget != null) {
|
if (failedWidget != null) {
|
||||||
return Padding(
|
return Padding(
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
Future<void> launchURL(BuildContext context, String url) async {
|
Future<void> launchURL(BuildContext context, String url) async {
|
||||||
@@ -12,3 +13,7 @@ Future<void> launchURL(BuildContext context, String url) async {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String getAttachmentHeroTag(Message message, Attachment attachment) {
|
||||||
|
return '${message.id}-${attachment.imageUrl ?? attachment.assetUrl ?? attachment.thumbUrl ?? attachment.ogScrapeUrl}';
|
||||||
|
}
|
||||||
|
|||||||
@@ -148,8 +148,8 @@ class _VideoAttachmentState extends State<VideoAttachment> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_videoPlayerController.dispose();
|
_videoPlayerController?.dispose();
|
||||||
_chewieController.dispose();
|
_chewieController?.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
name: stream_chat_flutter
|
name: stream_chat_flutter
|
||||||
homepage: https://github.com/GetStream/stream-chat-flutter
|
homepage: https://github.com/GetStream/stream-chat-flutter
|
||||||
description: Stream Chat official Flutter SDK. Build your own chat experience using Dart and Flutter.
|
description: Stream Chat official Flutter SDK. Build your own chat experience using Dart and Flutter.
|
||||||
version: 0.2.1-alpha+2
|
version: 0.2.1-alpha+3
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=2.3.0 <3.0.0"
|
sdk: ">=2.3.0 <3.0.0"
|
||||||
@@ -21,7 +21,7 @@ dependencies:
|
|||||||
file_picker: ^1.9.0+1
|
file_picker: ^1.9.0+1
|
||||||
image_picker: ^0.6.6+1
|
image_picker: ^0.6.6+1
|
||||||
flutter_keyboard_visibility: ^2.0.0
|
flutter_keyboard_visibility: ^2.0.0
|
||||||
stream_chat: ^0.2.0-alpha+11
|
stream_chat: ^0.2.0-alpha+15
|
||||||
mime: ^0.9.6+3
|
mime: ^0.9.6+3
|
||||||
visibility_detector: ^0.1.5
|
visibility_detector: ^0.1.5
|
||||||
http_parser: ^3.1.4
|
http_parser: ^3.1.4
|
||||||
|
|||||||
Reference in New Issue
Block a user