From 65d3a0b6b3bbc4b27b3618a9cebe1bacbc28f1c7 Mon Sep 17 00:00:00 2001 From: Freek van de Ven Date: Fri, 31 Mar 2023 13:16:35 +0200 Subject: [PATCH] feat: fix example and update melos configuration --- melos.yaml | 8 +- packages/flutter_community_chat/pubspec.yaml | 2 +- .../example/.gitignore | 3 +- .../example/.metadata | 36 --- .../example/README.md | 0 .../example/analysis_options.yaml | 231 ++---------------- .../example/lib/main.dart | 205 ++++++++-------- .../example/pubspec.yaml | 72 +----- .../example/test/widget_test.dart | 14 ++ .../lib/flutter_community_chat_view.dart | 2 + .../flutter_community_chat_view/pubspec.yaml | 32 +-- 11 files changed, 156 insertions(+), 449 deletions(-) delete mode 100644 packages/flutter_community_chat_view/example/.metadata create mode 100644 packages/flutter_community_chat_view/example/README.md create mode 100644 packages/flutter_community_chat_view/example/test/widget_test.dart diff --git a/melos.yaml b/melos.yaml index ca743d9..cf9d29b 100644 --- a/melos.yaml +++ b/melos.yaml @@ -13,11 +13,17 @@ scripts: description: Run all static analysis checks. get: - run: melos exec -c 1 -- "flutter pub get" + run: | + melos exec -c 1 -- "flutter pub get" + melos exec --scope="*example*" -c 1 -- "flutter pub get" upgrade: run: melos exec -c 1 -- "flutter pub upgrade" + create: + # run create in the example folder of flutter_community_chat_view + run: melos exec --scope="*example*" -c 1 -- "flutter create ." + analyze: run: | melos exec -c 1 -- \ diff --git a/packages/flutter_community_chat/pubspec.yaml b/packages/flutter_community_chat/pubspec.yaml index 938d9ea..550573c 100644 --- a/packages/flutter_community_chat/pubspec.yaml +++ b/packages/flutter_community_chat/pubspec.yaml @@ -1,7 +1,7 @@ name: flutter_community_chat description: A new Flutter package project. version: 0.0.1 -homepage: + publish_to: none environment: diff --git a/packages/flutter_community_chat_view/example/.gitignore b/packages/flutter_community_chat_view/example/.gitignore index 0904c66..f729720 100644 --- a/packages/flutter_community_chat_view/example/.gitignore +++ b/packages/flutter_community_chat_view/example/.gitignore @@ -52,4 +52,5 @@ ios web windows macos -linux \ No newline at end of file +linux +.metadata \ No newline at end of file diff --git a/packages/flutter_community_chat_view/example/.metadata b/packages/flutter_community_chat_view/example/.metadata deleted file mode 100644 index 77b2662..0000000 --- a/packages/flutter_community_chat_view/example/.metadata +++ /dev/null @@ -1,36 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled. - -version: - revision: 18a827f3933c19f51862dde3fa472197683249d6 - channel: stable - -project_type: app - -# Tracks metadata for the flutter migrate command -migration: - platforms: - - platform: root - create_revision: 18a827f3933c19f51862dde3fa472197683249d6 - base_revision: 18a827f3933c19f51862dde3fa472197683249d6 - - platform: android - create_revision: 18a827f3933c19f51862dde3fa472197683249d6 - base_revision: 18a827f3933c19f51862dde3fa472197683249d6 - - platform: ios - create_revision: 18a827f3933c19f51862dde3fa472197683249d6 - base_revision: 18a827f3933c19f51862dde3fa472197683249d6 - - platform: web - create_revision: 18a827f3933c19f51862dde3fa472197683249d6 - base_revision: 18a827f3933c19f51862dde3fa472197683249d6 - - # User provided section - - # List of Local paths (relative to this file) that should be - # ignored by the migrate tool. - # - # Files that are not part of the templates will be ignored by default. - unmanaged_files: - - 'lib/main.dart' - - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/packages/flutter_community_chat_view/example/README.md b/packages/flutter_community_chat_view/example/README.md new file mode 100644 index 0000000..e69de29 diff --git a/packages/flutter_community_chat_view/example/analysis_options.yaml b/packages/flutter_community_chat_view/example/analysis_options.yaml index 68a0118..61b6c4d 100644 --- a/packages/flutter_community_chat_view/example/analysis_options.yaml +++ b/packages/flutter_community_chat_view/example/analysis_options.yaml @@ -1,218 +1,29 @@ -# SPDX-FileCopyrightText: 2022 Iconica +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. # -# SPDX-License-Identifier: GPL-3.0-or-later +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. include: package:flutter_lints/flutter.yaml -analyzer: - errors: - todo: ignore - exclude: [lib/generated_plugin_registrant.dart] + linter: - # https://dart.dev/tools/linter-rules#lints + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. rules: - # error rules - always_use_package_imports: false - avoid_dynamic_calls: true - avoid_empty_else: true - avoid_print: true - avoid_relative_lib_imports: true - avoid_returning_null_for_future: true - avoid_slow_async_io: true - avoid_type_to_string: true - avoid_types_as_parameter_names: true - avoid_web_libraries_in_flutter: true - cancel_subscriptions: true - close_sinks: true - comment_references: false - control_flow_in_finally: true - diagnostic_describe_all_properties: false - empty_statements: true - hash_and_equals: true - invariant_booleans: true - iterable_contains_unrelated_type: true - list_remove_unrelated_type: true - literal_only_boolean_expressions: true - no_adjacent_strings_in_list: true - no_duplicate_case_values: true - no_logic_in_create_state: true - prefer_relative_imports: false - prefer_void_to_null: true - test_types_in_equals: true - throw_in_finally: true - unnecessary_statements: true - unrelated_type_equality_checks: true - unsafe_html: true - use_build_context_synchronously: true - use_key_in_widget_constructors: true - valid_regexps: true - # style rules - always_declare_return_types: true - always_put_control_body_on_new_line: true - always_put_required_named_parameters_first: true - always_require_non_null_named_parameters: true - always_specify_types: false - annotate_overrides: true - avoid_annotating_with_dynamic: false - avoid_bool_literals_in_conditional_expressions: true - avoid_catches_without_on_clauses: false - avoid_catching_errors: false - avoid_classes_with_only_static_members: true - avoid_double_and_int_checks: true - avoid_equals_and_hash_code_on_mutable_classes: false - avoid_escaping_inner_quotes: false - avoid_field_initializers_in_const_classes: true - avoid_final_parameters: true - avoid_function_literals_in_foreach_calls: true - avoid_implementing_value_types: true - avoid_init_to_null: true - avoid_js_rounded_ints: true - avoid_multiple_declarations_per_line: true - avoid_null_checks_in_equality_operators: true - avoid_positional_boolean_parameters: true - avoid_private_typedef_functions: true - avoid_redundant_argument_values: false - avoid_renaming_method_parameters: true - avoid_return_types_on_setters: true - avoid_returning_null: true - avoid_returning_null_for_void: true - avoid_returning_this: true - avoid_setters_without_getters: true - avoid_shadowing_type_parameters: true - avoid_single_cascade_in_expression_statements: true - avoid_types_on_closure_parameters: false - avoid_unnecessary_containers: false - avoid_unused_constructor_parameters: true - avoid_void_async: true - await_only_futures: true - camel_case_extensions: true - camel_case_types: true - cascade_invocations: true - cast_nullable_to_non_nullable: true - conditional_uri_does_not_exist: true - constant_identifier_names: true - curly_braces_in_flow_control_structures: true - deprecated_consistency: true - directives_ordering: true - do_not_use_environment: true - empty_catches: true - empty_constructor_bodies: true - eol_at_end_of_file: true - exhaustive_cases: true - file_names: true - flutter_style_todos: true - implementation_imports: true - join_return_with_assignment: true - leading_newlines_in_multiline_strings: true - library_names: true - library_prefixes: true - library_private_types_in_public_api: true - lines_longer_than_80_chars: true - missing_whitespace_between_adjacent_strings: true - no_default_cases: true - no_leading_underscores_for_library_prefixes: true - no_leading_underscores_for_local_identifiers: true - no_runtimeType_toString: true - non_constant_identifier_names: true - noop_primitive_operations: true - null_check_on_nullable_type_parameter: true - null_closures: true - omit_local_variable_types: true - one_member_abstracts: true - only_throw_errors: true - overridden_fields: true - package_api_docs: true - package_prefixed_library_names: true - parameter_assignments: true - prefer_adjacent_string_concatenation: true - prefer_asserts_in_initializer_lists: true - prefer_asserts_with_message: true - prefer_collection_literals: true - prefer_conditional_assignment: true - prefer_const_constructors: true - prefer_const_constructors_in_immutables: true - prefer_const_declarations: false - prefer_const_literals_to_create_immutables: false - prefer_constructors_over_static_methods: true - prefer_contains: true - prefer_double_quotes: false - prefer_equal_for_default_values: true - prefer_expression_function_bodies: false - prefer_final_fields: true - prefer_final_in_for_each: false - prefer_final_locals: false - prefer_final_parameters: false - prefer_for_elements_to_map_fromIterable: true - prefer_foreach: true - prefer_function_declarations_over_variables: true - prefer_generic_function_type_aliases: true - prefer_if_elements_to_conditional_expressions: true - prefer_if_null_operators: true - prefer_initializing_formals: true - prefer_inlined_adds: true - prefer_int_literals: false - prefer_interpolation_to_compose_strings: true - prefer_is_empty: true - prefer_is_not_empty: true - prefer_is_not_operator: true - prefer_iterable_whereType: true - prefer_mixin: true - prefer_null_aware_method_calls: true - prefer_null_aware_operators: true - prefer_single_quotes: true - prefer_spread_collections: true - prefer_typing_uninitialized_variables: true - provide_deprecation_message: true - public_member_api_docs: false - recursive_getters: true - require_trailing_commas: true - sized_box_for_whitespace: true - sized_box_shrink_expand: true - slash_for_doc_comments: true - sort_child_properties_last: true - sort_constructors_first: true - sort_unnamed_constructors_first: true - tighten_type_of_initializing_formals: true - type_annotate_public_apis: true - type_init_formals: true - unawaited_futures: true - unnecessary_await_in_return: true - unnecessary_brace_in_string_interps: true - unnecessary_const: false - unnecessary_constructor_name: true - unnecessary_final: true - unnecessary_getters_setters: true - unnecessary_lambdas: true - unnecessary_late: true - unnecessary_new: true - unnecessary_null_aware_assignments: true - unnecessary_null_checks: true - unnecessary_null_in_if_null_operators: true - unnecessary_nullable_for_final_variable_declarations: true - unnecessary_overrides: true - unnecessary_parenthesis: true - unnecessary_raw_strings: true - unnecessary_string_escapes: true - unnecessary_string_interpolations: true - unnecessary_this: true - use_decorated_box: true - use_full_hex_values_for_flutter_colors: true - use_function_type_syntax_for_parameters: true - use_if_null_to_convert_nulls_to_bools: true - use_is_even_rather_than_modulo: true - use_late_for_private_fields_and_variables: true - use_named_constants: true - use_raw_strings: false - use_rethrow_when_possible: true - use_setters_to_change_properties: true - use_string_buffers: true - use_test_throws_matchers: true - use_to_and_as_if_applicable: true - void_checks: true - # pub rules - depend_on_referenced_packages: true - lowercase_with_underscores: true - secure_pubspec_urls: false - sort_pub_dependencies: false + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule # Additional information about this file can be found at # https://dart.dev/guides/language/analysis-options diff --git a/packages/flutter_community_chat_view/example/lib/main.dart b/packages/flutter_community_chat_view/example/lib/main.dart index 264c2de..1ec8188 100644 --- a/packages/flutter_community_chat_view/example/lib/main.dart +++ b/packages/flutter_community_chat_view/example/lib/main.dart @@ -2,110 +2,119 @@ // // SPDX-License-Identifier: BSD-3-Clause -// import 'dart:async'; -// import 'package:flutter/material.dart'; -// import 'package:flutter_community_chat_view/flutter_community_chat.dart'; +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:flutter_community_chat_view/flutter_community_chat_view.dart'; -// void main() { -// runApp(const MaterialApp(home: MyStatefulWidget())); -// } +void main() { + runApp(const MaterialApp(home: MyStatefulWidget())); +} -// class MyStatefulWidget extends StatefulWidget { -// const MyStatefulWidget({super.key}); +class MyStatefulWidget extends StatefulWidget { + const MyStatefulWidget({super.key}); -// @override -// State createState() => _MyStatefulWidgetState(); -// } + @override + State createState() => _MyStatefulWidgetState(); +} -// class _MyStatefulWidgetState extends State { -// static final messages = [ -// ChatTextMessage( -// sender: const ChatUser( -// name: 'Piet Jansen', -// image: 'https://xsgames.co/randomusers/avatar.php?g=female', -// ), -// text: 'Hoe gaat het?', -// timestamp: DateTime.now(), -// ), -// ChatTextMessage( -// sender: const ChatUser( -// name: 'Jan Jansen', -// image: 'https://xsgames.co/randomusers/avatar.php?g=male', -// ), -// text: 'Met mij gaat het goed, dankje!', -// timestamp: DateTime.now(), -// ) -// ]; +class _MyStatefulWidgetState extends State { + static final messages = [ + ChatTextMessageModel( + sender: ChatUserModel( + firstName: 'Piet', + lastName: 'Jansen', + imageUrl: 'https://xsgames.co/randomusers/avatar.php?g=female', + ), + text: 'Hoe gaat het?', + timestamp: DateTime.now(), + ), + ChatTextMessageModel( + sender: ChatUserModel( + firstName: 'Jan', + lastName: 'Jansen', + imageUrl: 'https://xsgames.co/randomusers/avatar.php?g=male', + ), + text: 'Met mij gaat het goed, dankje!', + timestamp: DateTime.now(), + ) + ]; -// static final chat = Chat( -// title: 'Sjoerd Sjagerars', -// image: 'https://xsgames.co/randomusers/avatar.php?g=female', -// messages: messages, -// ); + static final chat = PersonalChatModel( + user: ChatUserModel( + firstName: 'Sjoerd', + lastName: 'Sjagerars', + imageUrl: 'https://xsgames.co/randomusers/avatar.php?g=female', + ), + messages: messages, + ); -// Stream> get chatStream => (() { -// late StreamController> controller; -// controller = StreamController>( -// onListen: () { -// controller.add([ -// chat, -// chat, -// chat, -// ]); -// }, -// ); -// return controller.stream; -// })(); + Stream> get chatStream => (() { + late StreamController> controller; + controller = StreamController>( + onListen: () { + controller.add([ + chat, + chat, + chat, + ]); + }, + ); + return controller.stream; + })(); -// Stream> get messageStream => (() { -// late StreamController> controller; -// controller = StreamController>( -// onListen: () { -// controller.add( -// messages, -// ); + Stream> get messageStream => (() { + late StreamController> controller; + controller = StreamController>( + onListen: () { + controller.add( + messages, + ); -// Future.delayed( -// const Duration(seconds: 5), -// () => controller.add( -// [ -// ...messages, -// ...messages, -// ], -// ), -// ); -// }, -// ); -// return controller.stream; -// })(); + Future.delayed( + const Duration(seconds: 5), + () => controller.add( + [ + ...messages, + ...messages, + ], + ), + ); + }, + ); + return controller.stream; + })(); -// @override -// Widget build(BuildContext context) => ChatScreen( -// chats: chatStream, -// chatOptions: ChatOptions( -// pressChatHandler: (context, chatOptions, chat) => -// Navigator.of(context).push( -// MaterialPageRoute( -// builder: (context) => ChatDetailScreen( -// chatOptions: chatOptions, -// chat: chat, -// chatMessages: messageStream, -// ), -// ), -// ), -// messageHandler: (chat, text) => Future.delayed( -// const Duration( -// milliseconds: 500, -// ), -// () => debugPrint('messageHandler with message: $text'), -// ), -// onPressSelectImage: (ChatModel chat) => Future.delayed( -// const Duration( -// milliseconds: 500, -// ), -// () => debugPrint('onPressSelectImage'), -// ), -// onPressStartChat: () => debugPrint('onPressStartChat'), -// ), -// ); -// } + @override + Widget build(BuildContext context) { + var options = const ChatOptions(); + return ChatScreen( + chats: chatStream, + options: options, + onPressChat: (chat) => Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => ChatDetailScreen( + chat: chat, + chatMessages: messageStream, + options: options, + onMessageSubmit: (text) async { + return Future.delayed( + const Duration( + milliseconds: 500, + ), + () => debugPrint('onMessageSubmit'), + ); + }, + onUploadImage: (image) async {}, + ), + ), + ), + onDeleteChat: (chat) => Future.delayed( + const Duration( + milliseconds: 500, + ), + () => debugPrint('onDeleteChat'), + ), + onPressStartChat: () => debugPrint('onPressStartChat'), + ); + } +} diff --git a/packages/flutter_community_chat_view/example/pubspec.yaml b/packages/flutter_community_chat_view/example/pubspec.yaml index 5bebd24..6868924 100644 --- a/packages/flutter_community_chat_view/example/pubspec.yaml +++ b/packages/flutter_community_chat_view/example/pubspec.yaml @@ -5,93 +5,23 @@ name: flutter_community_chat_view_example description: A standard flutter package. -# The following line prevents the package from being accidentally published to -# pub.dev using `flutter pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. -# Read more about iOS versioning at -# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -# In Windows, build-name is used as the major, minor, and patch parts -# of the product and file versions while build-number is used as the build suffix. version: 1.0.0+1 environment: sdk: '>=2.18.2 <3.0.0' - -# Dependencies specify other packages that your package needs in order to work. -# To automatically upgrade your package dependencies to the latest versions -# consider running `flutter pub upgrade --major-versions`. Alternatively, -# dependencies can be manually updated by changing the version numbers below to -# the latest version available on pub.dev. To see which dependencies have newer -# versions available, run `flutter pub outdated`. dependencies: flutter: sdk: flutter - - - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^1.0.2 flutter_community_chat_view: path: .. + cupertino_icons: ^1.0.2 dev_dependencies: flutter_test: sdk: flutter - - # The "flutter_lints" package below contains a set of recommended lints to - # encourage good coding practices. The lint set provided by the package is - # activated in the `analysis_options.yaml` file located at the root of your - # package. See that file for information about deactivating specific lint - # rules and activating additional ones. flutter_lints: ^2.0.0 -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter packages. flutter: - - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the material Icons class. uses-material-design: true - - # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages diff --git a/packages/flutter_community_chat_view/example/test/widget_test.dart b/packages/flutter_community_chat_view/example/test/widget_test.dart new file mode 100644 index 0000000..73b773e --- /dev/null +++ b/packages/flutter_community_chat_view/example/test/widget_test.dart @@ -0,0 +1,14 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility in the flutter_test package. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter_test/flutter_test.dart'; + +void main() { + test('blank test', () { + expect(true, isTrue); + }); +} diff --git a/packages/flutter_community_chat_view/lib/flutter_community_chat_view.dart b/packages/flutter_community_chat_view/lib/flutter_community_chat_view.dart index 1cf80d0..f855097 100644 --- a/packages/flutter_community_chat_view/lib/flutter_community_chat_view.dart +++ b/packages/flutter_community_chat_view/lib/flutter_community_chat_view.dart @@ -4,6 +4,8 @@ library flutter_community_chat_view; +export 'package:flutter_community_chat_interface/flutter_community_chat_interface.dart'; + export 'src/components/chat_row.dart'; export 'src/config/chat_options.dart'; export 'src/config/chat_translations.dart'; diff --git a/packages/flutter_community_chat_view/pubspec.yaml b/packages/flutter_community_chat_view/pubspec.yaml index f052191..6ef0146 100644 --- a/packages/flutter_community_chat_view/pubspec.yaml +++ b/packages/flutter_community_chat_view/pubspec.yaml @@ -5,7 +5,7 @@ name: flutter_community_chat_view description: A standard flutter package. version: 0.0.1 -homepage: + publish_to: none environment: @@ -36,33 +36,3 @@ dev_dependencies: # The following section is specific to Flutter packages. flutter: - # To add assets to your package, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - # - # For details regarding assets in packages, see - # https://flutter.dev/assets-and-images/#from-packages - # - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware - - # To add custom fonts to your package, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts in packages, see - # https://flutter.dev/custom-fonts/#from-packages