fix #6: ChannelListView NULL error when a channel has no messages

This commit is contained in:
Salvatore Giordano
2020-03-15 11:43:52 +01:00
parent 0952c0d5e1
commit 38300939d3
4 changed files with 67 additions and 64 deletions
+61 -61
View File
@@ -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
+1 -1
View File
@@ -126,7 +126,7 @@ class _ChannelListViewState extends State<ChannelListView> {
return widget.errorBuilder(snapshot.error); return widget.errorBuilder(snapshot.error);
} }
String message = snapshot.error.toString(); var message = snapshot.error.toString();
if (snapshot.error is DioError) { if (snapshot.error is DioError) {
final dioError = snapshot.error as DioError; final dioError = snapshot.error as DioError;
if (dioError.type == DioErrorType.RESPONSE) { if (dioError.type == DioErrorType.RESPONSE) {
+3
View File
@@ -68,6 +68,9 @@ class ChannelPreview extends StatelessWidget {
stream: channel.lastMessageAtStream, stream: channel.lastMessageAtStream,
initialData: channel.lastMessageAt, initialData: channel.lastMessageAt,
builder: (context, snapshot) { builder: (context, snapshot) {
if (!snapshot.hasData) {
return SizedBox();
}
final lastMessageAt = snapshot.data.toLocal(); final lastMessageAt = snapshot.data.toLocal();
String stringDate; String stringDate;
+2 -2
View File
@@ -93,7 +93,7 @@ class _MessageWidgetState extends State<MessageWidget>
final alignment = final alignment =
_isMyMessage ? Alignment.centerRight : Alignment.centerLeft; _isMyMessage ? Alignment.centerRight : Alignment.centerLeft;
List<Widget> row = <Widget>[ var row = <Widget>[
Column( Column(
crossAxisAlignment: crossAxisAlignment:
_isMyMessage ? CrossAxisAlignment.end : CrossAxisAlignment.start, _isMyMessage ? CrossAxisAlignment.end : CrossAxisAlignment.start,
@@ -302,7 +302,7 @@ class _MessageWidgetState extends State<MessageWidget>
})); }));
if (widget.message.text.trim().isNotEmpty) { if (widget.message.text.trim().isNotEmpty) {
String text = widget.message.text; var text = widget.message.text;
text = _replaceMentions(text); text = _replaceMentions(text);
column.addAll( column.addAll(