From 47a00ae9b778b9e82f23e4a2d5ea8a3656556976 Mon Sep 17 00:00:00 2001 From: Maximilian Fischer Date: Sat, 30 Apr 2022 22:37:55 +0200 Subject: [PATCH 01/10] flutter analyze no-fatal-infos --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c47d56e84..4c02b3c98 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -56,7 +56,7 @@ jobs: flutter pub add parse_server_sdk --path ../dart flutter pub get - name: Analyze code - run: flutter analyze packages/flutter + run: flutter analyze packages/flutter --no-fatal-infos check-code-analysis-dart: name: Code analysis (dart) timeout-minutes: 5 From 23ac6a2f5d2f52e802a347340fd775baca4dbb51 Mon Sep 17 00:00:00 2001 From: Maximilian Fischer Date: Sat, 30 Apr 2022 22:38:29 +0200 Subject: [PATCH 02/10] temporary publish_to when running analyzer --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4c02b3c98..a7882a0fe 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,6 +52,7 @@ jobs: flutter pub get cd ../.. cd packages/flutter + echo "publish_to: none" >> pubspec.yaml flutter pub remove parse_server_sdk flutter pub add parse_server_sdk --path ../dart flutter pub get From 4a245059bcaa2ad24fa011f505f7dbd6abbc5f5a Mon Sep 17 00:00:00 2001 From: Maximilian Fischer Date: Sat, 30 Apr 2022 22:39:23 +0200 Subject: [PATCH 03/10] fix sdk of example_livelist --- packages/flutter/example_livelist/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/flutter/example_livelist/pubspec.yaml b/packages/flutter/example_livelist/pubspec.yaml index 028b56a05..fed66ae6a 100644 --- a/packages/flutter/example_livelist/pubspec.yaml +++ b/packages/flutter/example_livelist/pubspec.yaml @@ -5,7 +5,7 @@ publish_to: none version: 1.0.0+1 environment: - sdk: ">=2.2.2 <3.0.0" + sdk: ">=2.12.0 <3.0.0" dependencies: flutter: From 183989c48bb9e9e5ba213066d4f5e0f21fd06d77 Mon Sep 17 00:00:00 2001 From: Maximilian Fischer Date: Sat, 30 Apr 2022 22:41:09 +0200 Subject: [PATCH 04/10] use the recommended lints --- analysis_options.yaml | 179 ------------------ packages/dart/analysis_options.yaml | 1 + packages/dart/pubspec.yaml | 3 +- packages/flutter/analysis_options.yaml | 28 +++ packages/flutter/example/pubspec.yaml | 1 + .../flutter/example_livelist/pubspec.yaml | 1 + packages/flutter/pubspec.yaml | 3 +- 7 files changed, 35 insertions(+), 181 deletions(-) delete mode 100644 analysis_options.yaml create mode 100644 packages/flutter/analysis_options.yaml diff --git a/analysis_options.yaml b/analysis_options.yaml deleted file mode 100644 index bb1a51614..000000000 --- a/analysis_options.yaml +++ /dev/null @@ -1,179 +0,0 @@ -# Specify analysis options. -# -# Until there are meta linter rules, each desired lint must be explicitly enabled. -# See: https://github.com/dart-lang/linter/issues/288 -# -# For a list of lints, see: http://dart-lang.github.io/linter/lints/ -# See the configuration guide for more -# https://github.com/dart-lang/sdk/tree/master/pkg/analyzer#configuring-the-analyzer -# -# There are other similar analysis options files in the flutter repos, -# which should be kept in sync with this file: -# -# - analysis_options.yaml (this file) -# - packages/flutter/lib/analysis_options_user.yaml -# - https://github.com/flutter/plugins/blob/master/analysis_options.yaml -# - https://github.com/flutter/engine/blob/master/analysis_options.yaml -# -# This file contains the analysis options used by Flutter tools, such as IntelliJ, -# Android Studio, and the `flutter analyze` command. - -analyzer: - strong-mode: - implicit-dynamic: false - errors: - # treat missing required parameters as a warning (not a hint) - missing_required_param: warning - # treat missing returns as a warning (not a hint) - missing_return: warning - # allow having TODOs in the code - todo: ignore - # Ignore analyzer hints for updating pubspecs when using Future or - # Stream and not importing dart:async - # Please see https://github.com/flutter/flutter/pull/24528 for details. - sdk_version_async_exported_from_core: ignore - exclude: - - 'bin/cache/**' - # the following two are relative to the stocks example and the flutter package respectively - # see https://github.com/dart-lang/sdk/issues/28463 - - 'lib/i18n/stock_messages_*.dart' - - 'lib/src/http/**' - -linter: - rules: - # these rules are documented on and in the same order as - # the Dart Lint rules page to make maintenance easier - # https://github.com/dart-lang/linter/blob/master/example/all.yaml - - always_declare_return_types - - always_put_control_body_on_new_line - # - always_put_required_named_parameters_first # we prefer having parameters in the same order as fields https://github.com/flutter/flutter/issues/10219 - - always_require_non_null_named_parameters - - always_specify_types - - annotate_overrides - # - avoid_annotating_with_dynamic # conflicts with always_specify_types - - avoid_as - # - avoid_bool_literals_in_conditional_expressions # not yet tested - # - avoid_catches_without_on_clauses # we do this commonly - # - avoid_catching_errors # we do this commonly - - avoid_classes_with_only_static_members - # - avoid_double_and_int_checks # only useful when targeting JS runtime - - avoid_empty_else - - avoid_field_initializers_in_const_classes - - avoid_function_literals_in_foreach_calls - # - avoid_implementing_value_types # not yet tested - - avoid_init_to_null - # - avoid_js_rounded_ints # only useful when targeting JS runtime - - avoid_null_checks_in_equality_operators - # - avoid_positional_boolean_parameters # not yet tested - # - avoid_private_typedef_functions # we prefer having typedef (discussion in https://github.com/flutter/flutter/pull/16356) - - avoid_relative_lib_imports - - avoid_renaming_method_parameters - - avoid_return_types_on_setters - # - avoid_returning_null # there are plenty of valid reasons to return null - # - avoid_returning_null_for_future # not yet tested - - avoid_returning_null_for_void - # - avoid_returning_this # there are plenty of valid reasons to return this - # - avoid_setters_without_getters # not yet tested - # - avoid_shadowing_type_parameters # not yet tested - # - avoid_single_cascade_in_expression_statements # not yet tested - - avoid_slow_async_io - - avoid_types_as_parameter_names - # - avoid_types_on_closure_parameters # conflicts with always_specify_types - - avoid_unused_constructor_parameters - - avoid_void_async - - await_only_futures - - camel_case_types - - cancel_subscriptions - # - cascade_invocations # not yet tested - # - close_sinks # not reliable enough - # - comment_references # blocked on https://github.com/flutter/flutter/issues/20765 - # - constant_identifier_names # needs an opt-out https://github.com/dart-lang/linter/issues/204 - - control_flow_in_finally - # - curly_braces_in_flow_control_structures # not yet tested - - directives_ordering - - empty_catches - - empty_constructor_bodies - - empty_statements - # - file_names # not yet tested - - flutter_style_todos - - hash_and_equals - - implementation_imports - # - invariant_booleans # too many false positives: https://github.com/dart-lang/linter/issues/811 - - iterable_contains_unrelated_type - # - join_return_with_assignment # not yet tested - - library_names - - library_prefixes - # - lines_longer_than_80_chars # not yet tested - - list_remove_unrelated_type - # - literal_only_boolean_expressions # too many false positives: https://github.com/dart-lang/sdk/issues/34181 - - no_adjacent_strings_in_list - - no_duplicate_case_values - - non_constant_identifier_names - # - null_closures # not yet tested - # - omit_local_variable_types # opposite of always_specify_types - # - one_member_abstracts # too many false positives - # - only_throw_errors # https://github.com/flutter/flutter/issues/5792 - - overridden_fields - - package_api_docs - - package_names - - package_prefixed_library_names - # - parameter_assignments # we do this commonly - - prefer_adjacent_string_concatenation - - prefer_asserts_in_initializer_lists - # - prefer_collection_literals # temporary until all platforms support set literals - - prefer_conditional_assignment - - prefer_const_constructors - - prefer_const_constructors_in_immutables - - prefer_const_declarations - - prefer_const_literals_to_create_immutables - # - prefer_constructors_over_static_methods # not yet tested - - prefer_contains - - prefer_equal_for_default_values - # - prefer_expression_function_bodies # conflicts with https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#consider-using--for-short-functions-and-methods - - prefer_final_fields - - prefer_final_locals - - prefer_foreach - # - prefer_function_declarations_over_variables # not yet tested - - prefer_generic_function_type_aliases - - prefer_initializing_formals - # - prefer_int_literals # not yet tested - # - prefer_interpolation_to_compose_strings # not yet tested - - prefer_is_empty - - prefer_is_not_empty - - prefer_iterable_whereType - # - prefer_mixin # https://github.com/dart-lang/language/issues/32 - - prefer_single_quotes - - prefer_typing_uninitialized_variables - - prefer_void_to_null - # - public_member_api_docs # enabled on a case-by-case basis; see e.g. packages/analysis_options.yaml - - recursive_getters - - slash_for_doc_comments - - sort_constructors_first - - sort_pub_dependencies - - sort_unnamed_constructors_first - # - super_goes_last # no longer needed w/ Dart 2 - - test_types_in_equals - - throw_in_finally - # - type_annotate_public_apis # subset of always_specify_types - - type_init_formals - # - unawaited_futures # too many false positives - # - unnecessary_await_in_return # not yet tested - - unnecessary_brace_in_string_interps - - unnecessary_const - - unnecessary_getters_setters - # - unnecessary_lambdas # has false positives: https://github.com/dart-lang/linter/issues/498 - - unnecessary_new - - unnecessary_null_aware_assignments - - unnecessary_null_in_if_null_operators - - unnecessary_overrides - - unnecessary_parenthesis - - unnecessary_statements - - unnecessary_this - - unrelated_type_equality_checks - # - use_function_type_syntax_for_parameters # not yet tested - - use_rethrow_when_possible - # - use_setters_to_change_properties # not yet tested - # - use_string_buffers # has false positives: https://github.com/dart-lang/sdk/issues/34182 - # - use_to_and_as_if_applicable # has false positives, so we prefer to catch this by code-review - - valid_regexps - # - void_checks # not yet tested \ No newline at end of file diff --git a/packages/dart/analysis_options.yaml b/packages/dart/analysis_options.yaml index e69de29bb..572dd239d 100644 --- a/packages/dart/analysis_options.yaml +++ b/packages/dart/analysis_options.yaml @@ -0,0 +1 @@ +include: package:lints/recommended.yaml diff --git a/packages/dart/pubspec.yaml b/packages/dart/pubspec.yaml index 24fc1e74f..77980cc5c 100644 --- a/packages/dart/pubspec.yaml +++ b/packages/dart/pubspec.yaml @@ -4,7 +4,7 @@ version: 3.1.0 homepage: https://github.com/phillwiggins/flutter_parse_sdk environment: - sdk: '>=2.12.0 <3.0.0' + sdk: ">=2.12.0 <3.0.0" dependencies: # Networking @@ -24,6 +24,7 @@ dependencies: mime_type: ^1.0.0 dev_dependencies: + lints: ^1.0.1 # Testing build_runner: ^2.0.5 mockito: ^5.0.10 diff --git a/packages/flutter/analysis_options.yaml b/packages/flutter/analysis_options.yaml new file mode 100644 index 000000000..fd16f9219 --- /dev/null +++ b/packages/flutter/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# 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 + +linter: + # 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: + # 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/example/pubspec.yaml b/packages/flutter/example/pubspec.yaml index 3a0b0179d..f6e011791 100644 --- a/packages/flutter/example/pubspec.yaml +++ b/packages/flutter/example/pubspec.yaml @@ -17,6 +17,7 @@ dependencies: shared_preferences: ^2.0.5 dev_dependencies: + flutter_lints: ^1.0.4 flutter_test: sdk: flutter mockito: ^5.0.2 diff --git a/packages/flutter/example_livelist/pubspec.yaml b/packages/flutter/example_livelist/pubspec.yaml index fed66ae6a..dec5862b3 100644 --- a/packages/flutter/example_livelist/pubspec.yaml +++ b/packages/flutter/example_livelist/pubspec.yaml @@ -16,6 +16,7 @@ dependencies: cupertino_icons: ^1.0.2 dev_dependencies: + flutter_lints: ^1.0.4 flutter_test: sdk: flutter mockito: ^5.0.2 diff --git a/packages/flutter/pubspec.yaml b/packages/flutter/pubspec.yaml index 086a5bd62..fd465cd1f 100644 --- a/packages/flutter/pubspec.yaml +++ b/packages/flutter/pubspec.yaml @@ -4,7 +4,7 @@ version: 3.1.0 homepage: https://github.com/phillwiggins/flutter_parse_sdk environment: - sdk: '>=2.12.0 <3.0.0' + sdk: ">=2.12.0 <3.0.0" dependencies: flutter: @@ -38,6 +38,7 @@ dependencies: path: ^1.8.0 # required for transitive use only dev_dependencies: + flutter_lints: ^1.0.4 # Testing flutter_test: sdk: flutter From 414e8d6afb7e7454fcdc04fcd8ef05c102c35876 Mon Sep 17 00:00:00 2001 From: Maximilian Fischer Date: Sun, 1 May 2022 01:43:22 +0200 Subject: [PATCH 05/10] Fixed the simple analyzer infos --- .../lib/src/data/parse_subclass_handler.dart | 16 ++-- .../dart/lib/src/network/dio_adapter_io.dart | 3 +- .../dart/lib/src/network/parse_client.dart | 2 +- .../lib/src/network/parse_dio_client.dart | 9 ++- .../lib/src/network/parse_http_client.dart | 9 ++- .../lib/src/network/parse_live_query.dart | 8 +- .../dart/lib/src/network/parse_query.dart | 74 +++++++++---------- packages/dart/lib/src/objects/parse_base.dart | 8 +- .../dart/lib/src/objects/parse_config.dart | 2 +- .../dart/lib/src/objects/parse_error.dart | 2 +- packages/dart/lib/src/objects/parse_file.dart | 2 +- .../dart/lib/src/objects/parse_file_web.dart | 2 +- .../dart/lib/src/objects/parse_object.dart | 22 +++--- .../dart/lib/src/objects/parse_relation.dart | 2 +- packages/dart/lib/src/objects/parse_user.dart | 14 ++-- .../response/parse_exception_response.dart | 1 - .../response/parse_response_builder.dart | 12 +-- .../dart/lib/src/utils/parse_decoder.dart | 4 +- .../dart/lib/src/utils/parse_live_list.dart | 12 +-- .../diet_plan/provider_api_diet_plan.dart | 4 +- .../diet_plan/provider_db_diet_plan.dart | 12 +-- .../repositories/user/provider_db_user.dart | 2 +- packages/flutter/example/lib/main.dart | 8 +- .../example/lib/pages/decision_page.dart | 30 ++++---- .../flutter/example/lib/pages/home_page.dart | 4 +- .../flutter/example/lib/pages/login_page.dart | 38 ++++++---- .../repository_diet_plan_api_test.dart | 8 +- .../repository_diet_plan_db_test.dart | 10 +-- .../diet_plan/repository_diet_plan_test.dart | 6 +- .../flutter/example_livelist/lib/main.dart | 7 +- packages/flutter/lib/parse_server_sdk.dart | 1 - .../lib/src/utils/parse_live_list.dart | 4 +- .../test/parse_client_configuration_test.dart | 2 +- 33 files changed, 180 insertions(+), 160 deletions(-) diff --git a/packages/dart/lib/src/data/parse_subclass_handler.dart b/packages/dart/lib/src/data/parse_subclass_handler.dart index 2205abc7c..f7ed18cf9 100644 --- a/packages/dart/lib/src/data/parse_subclass_handler.dart +++ b/packages/dart/lib/src/data/parse_subclass_handler.dart @@ -12,30 +12,34 @@ class ParseSubClassHandler { {Map? registeredSubClassMap, ParseUserConstructor? parseUserConstructor, ParseFileConstructor? parseFileConstructor}) { - _subClassMap = - registeredSubClassMap ?? Map(); + _subClassMap = registeredSubClassMap ?? {}; _parseUserConstructor = parseUserConstructor; - if (parseFileConstructor != null) + if (parseFileConstructor != null) { _parseFileConstructor = parseFileConstructor; + } } late Map _subClassMap; ParseUserConstructor? _parseUserConstructor; - ParseFileConstructor _parseFileConstructor = ({String? name, String? url}) { + ParseFileConstructor _parseFileConstructor = defaultParseFileConstructor; + + static ParseFileBase defaultParseFileConstructor( + {String? name, String? url}) { if (parseIsWeb) { return ParseWebFile(null, name: name!, url: url); } else { return ParseFile(null, name: name, url: url); } - }; + } void registerSubClass( String className, ParseObjectConstructor objectConstructor) { if (className != keyClassUser && className != keyClassInstallation && className != keyClassSession && - className != keyFileClassname) + className != keyFileClassname) { _subClassMap[className] = objectConstructor; + } } void registerUserSubClass(ParseUserConstructor parseUserConstructor) { diff --git a/packages/dart/lib/src/network/dio_adapter_io.dart b/packages/dart/lib/src/network/dio_adapter_io.dart index e8e509560..e0dd6bc17 100644 --- a/packages/dart/lib/src/network/dio_adapter_io.dart +++ b/packages/dart/lib/src/network/dio_adapter_io.dart @@ -7,8 +7,9 @@ HttpClientAdapter createHttpClientAdapter(SecurityContext? securityContext) { final DefaultHttpClientAdapter defaultHttpClientAdapter = DefaultHttpClientAdapter(); - if (securityContext != null) + if (securityContext != null) { defaultHttpClientAdapter.onHttpClientCreate = (HttpClient client) => HttpClient(context: securityContext); + } return defaultHttpClientAdapter; } diff --git a/packages/dart/lib/src/network/parse_client.dart b/packages/dart/lib/src/network/parse_client.dart index d71683f73..bf8c30f04 100644 --- a/packages/dart/lib/src/network/parse_client.dart +++ b/packages/dart/lib/src/network/parse_client.dart @@ -62,7 +62,7 @@ abstract class ParseClient { // ParseNetworkOptions options, // }); - @deprecated + @Deprecated("Use ParseCoreData() instead.") ParseCoreData get data => ParseCoreData(); } diff --git a/packages/dart/lib/src/network/parse_dio_client.dart b/packages/dart/lib/src/network/parse_dio_client.dart index f76a3babb..a28483155 100644 --- a/packages/dart/lib/src/network/parse_dio_client.dart +++ b/packages/dart/lib/src/network/parse_dio_client.dart @@ -159,13 +159,16 @@ class _ParseDioClient with dio.DioMixin implements dio.Dio { options.headers![keyHeaderApplicationId] = parseCoreData.applicationId; if (_sendSessionId && parseCoreData.sessionId != null && - options.headers![keyHeaderSessionToken] == null) + options.headers![keyHeaderSessionToken] == null) { options.headers![keyHeaderSessionToken] = parseCoreData.sessionId; + } - if (parseCoreData.clientKey != null) + if (parseCoreData.clientKey != null) { options.headers![keyHeaderClientKey] = parseCoreData.clientKey; - if (parseCoreData.masterKey != null) + } + if (parseCoreData.masterKey != null) { options.headers![keyHeaderMasterKey] = parseCoreData.masterKey; + } /// If developer wants to add custom headers, extend this class and add headers needed. if (additionalHeaders != null && additionalHeaders!.isNotEmpty) { diff --git a/packages/dart/lib/src/network/parse_http_client.dart b/packages/dart/lib/src/network/parse_http_client.dart index 3992373d9..bc49c9581 100644 --- a/packages/dart/lib/src/network/parse_http_client.dart +++ b/packages/dart/lib/src/network/parse_http_client.dart @@ -133,13 +133,16 @@ class _ParseHTTPClient extends http.BaseClient { request.headers[keyHeaderApplicationId] = parseCoreData.applicationId; if (_sendSessionId && parseCoreData.sessionId != null && - request.headers[keyHeaderSessionToken] == null) + request.headers[keyHeaderSessionToken] == null) { request.headers[keyHeaderSessionToken] = parseCoreData.sessionId!; + } - if (parseCoreData.clientKey != null) + if (parseCoreData.clientKey != null) { request.headers[keyHeaderClientKey] = parseCoreData.clientKey!; - if (parseCoreData.masterKey != null) + } + if (parseCoreData.masterKey != null) { request.headers[keyHeaderMasterKey] = parseCoreData.masterKey!; + } /// If developer wants to add custom headers, extend this class and add headers needed. if (additionalHeaders != null && additionalHeaders!.isNotEmpty) { diff --git a/packages/dart/lib/src/network/parse_live_query.dart b/packages/dart/lib/src/network/parse_live_query.dart index 93dbba882..f30cfedf6 100644 --- a/packages/dart/lib/src/network/parse_live_query.dart +++ b/packages/dart/lib/src/network/parse_live_query.dart @@ -115,8 +115,9 @@ class LiveQueryReconnectingController { _currentTimer = null; _reconnect(); }); - if (debug) + if (debug) { print('$DEBUG_TAG: Retrytimer set to ${retryInterval[_retryState]}ms'); + } if (_retryState < retryInterval.length - 1) { _retryState++; } @@ -212,9 +213,10 @@ class LiveQueryClient { subscription._enabled = false; }); _connecting = false; - if (userInitialized) + if (userInitialized) { _clientEventStreamController.sink .add(LiveQueryClientEvent.USER_DISCONNECTED); + } } Future> subscribe( @@ -353,7 +355,7 @@ class LiveQueryClient { final String _where = query.buildQuery().replaceAll('where=', ''); //Convert where condition to Map - Map _whereMap = Map(); + Map _whereMap = {}; if (_where != '') { _whereMap = json.decode(_where); } diff --git a/packages/dart/lib/src/network/parse_query.dart b/packages/dart/lib/src/network/parse_query.dart index b2932ef06..9d5bde048 100644 --- a/packages/dart/lib/src/network/parse_query.dart +++ b/packages/dart/lib/src/network/parse_query.dart @@ -37,7 +37,7 @@ class QueryBuilder { T object; List> queries = >[]; - final Map limiters = Map(); + final Map limiters = {}; /// Adds a limit to amount of results return from Parse void setLimit(int limit) { @@ -103,10 +103,10 @@ class QueryBuilder { {bool caseSensitive = false}) { if (caseSensitive) { queries.add(MapEntry( - _SINGLE_QUERY, '\"$column\":{\"\$regex\": \"^$query\"}')); + _SINGLE_QUERY, '"$column":{"\$regex": "^$query"}')); } else { - queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$regex\": \"^$query\", \"\$options\": \"i\"}')); + queries.add(MapEntry( + _SINGLE_QUERY, '"$column":{"\$regex": "^$query", "\$options": "i"}')); } } @@ -115,10 +115,10 @@ class QueryBuilder { {bool caseSensitive = false}) { if (caseSensitive) { queries.add(MapEntry( - _SINGLE_QUERY, '\"$column\":{\"\$regex\": \"$query\$\"}')); + _SINGLE_QUERY, '"$column":{"\$regex": "$query\$"}')); } else { queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$regex\": \"$query\$\", \"\$options\": \"i\"}')); + '"$column":{"\$regex": "$query\$", "\$options": "i"}')); } } @@ -183,7 +183,7 @@ class QueryBuilder { /// Retrieves related objets where [String] column is a relation field to the class [String] className void whereRelatedTo(String column, String className, String objectId) { queries.add(MapEntry(_SINGLE_QUERY, - '\"\$relatedTo\":{\"object\":{\"__type\":\"Pointer\",\"className\":\"$className\",\"objectId\":\"$objectId\"},\"key\":\"$column\"}')); + '"\$relatedTo":{"object":{"__type":"Pointer","className":"$className","objectId":"$objectId"},"key":"$column"}')); } /// Returns an object where the [String] column contains select @@ -216,10 +216,10 @@ class QueryBuilder { {bool caseSensitive = false}) { if (caseSensitive) { queries.add(MapEntry( - _SINGLE_QUERY, '\"$column\":{\"\$regex\": \"$value\"}')); + _SINGLE_QUERY, '"$column":{"\$regex": "$value"}')); } else { - queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$regex\": \"$value\", \"\$options\": \"i\"}')); + queries.add(MapEntry( + _SINGLE_QUERY, '"$column":{"\$regex": "$value", "\$options": "i"}')); } } @@ -230,7 +230,7 @@ class QueryBuilder { bool orderByScore = true, bool diacriticSensitive = false}) { queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$text\":{\"\$search\":{\"\$term\": \"$query\", \"\$caseSensitive\": $caseSensitive , \"\$diacriticSensitive\": $diacriticSensitive }}}')); + '"$column":{"\$text":{"\$search":{"\$term": "$query", "\$caseSensitive": $caseSensitive , "\$diacriticSensitive": $diacriticSensitive }}}')); if (orderByScore) { orderByAscending('\$score'); keysToReturn(['\$score']); @@ -242,7 +242,7 @@ class QueryBuilder { final double latitude = point.latitude; final double longitude = point.longitude; queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$nearSphere\":{\"__type\":\"GeoPoint\",\"latitude\":$latitude,\"longitude\":$longitude}}')); + '"$column":{"\$nearSphere":{"__type":"GeoPoint","latitude":$latitude,"longitude":$longitude}}')); } /// Returns an object with key point values near the point given and within the maximum distance given. @@ -252,7 +252,7 @@ class QueryBuilder { final double longitude = point.longitude; queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$nearSphere\":{\"__type\":\"GeoPoint\",\"latitude\":$latitude,\"longitude\":$longitude},\"\$maxDistanceInMiles\":$maxDistance}')); + '"$column":{"\$nearSphere":{"__type":"GeoPoint","latitude":$latitude,"longitude":$longitude},"\$maxDistanceInMiles":$maxDistance}')); } /// Returns an object with key point values near the point given and within the maximum distance given. @@ -262,7 +262,7 @@ class QueryBuilder { final double longitude = point.longitude; queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$nearSphere\":{\"__type\":\"GeoPoint\",\"latitude\":$latitude,\"longitude\":$longitude},\"\$maxDistanceInKilometers\":$maxDistance}')); + '"$column":{"\$nearSphere":{"__type":"GeoPoint","latitude":$latitude,"longitude":$longitude},"\$maxDistanceInKilometers":$maxDistance}')); } /// Returns an object with key point values near the point given and within the maximum distance given. @@ -272,7 +272,7 @@ class QueryBuilder { final double longitude = point.longitude; queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$nearSphere\":{\"__type\":\"GeoPoint\",\"latitude\":$latitude,\"longitude\":$longitude},\"\$maxDistanceInRadians\":$maxDistance}')); + '"$column":{"\$nearSphere":{"__type":"GeoPoint","latitude":$latitude,"longitude":$longitude},"\$maxDistanceInRadians":$maxDistance}')); } /// Returns an object with key point values contained within a given rectangular geographic bounding box. @@ -285,20 +285,21 @@ class QueryBuilder { final double longitudeN = northeast.longitude; queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$within\":{\"\$box\": [{\"__type\": \"GeoPoint\",\"latitude\":$latitudeS,\"longitude\":$longitudeS},{\"__type\": \"GeoPoint\",\"latitude\":$latitudeN,\"longitude\":$longitudeN}]}}')); + '"$column":{"\$within":{"\$box": [{"__type": "GeoPoint","latitude":$latitudeS,"longitude":$longitudeS},{"__type": "GeoPoint","latitude":$latitudeN,"longitude":$longitudeN}]}}')); } /// Return an object with key coordinates be contained within and on the bounds of a given polygon. /// Supports closed and open (last point is connected to first) paths /// Polygon must have at least 3 points void whereWithinPolygon(String column, List points) { - if (points.length < 3) + if (points.length < 3) { throw ArgumentError('Polygon must have at least 3 points'); + } Map dictionary = {}; dictionary['\$polygon'] = points.map((e) => e.toJson()).toList(); - queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$geoWithin\":${jsonEncode(dictionary)}}')); + queries.add(MapEntry( + _SINGLE_QUERY, '"$column":{"\$geoWithin":${jsonEncode(dictionary)}}')); } /// Add a constraint to the query that requires a particular key's value match another QueryBuilder @@ -308,7 +309,7 @@ class QueryBuilder { query._buildQueryRelational(query.object.parseClassName); queries.add(MapEntry( - _SINGLE_QUERY, '\"$column\":{\"\$inQuery\":$inQuery}')); + _SINGLE_QUERY, '"$column":{"\$inQuery":$inQuery}')); } ///Add a constraint to the query that requires a particular key's value does not match another QueryBuilder @@ -318,7 +319,7 @@ class QueryBuilder { query._buildQueryRelational(query.object.parseClassName); queries.add(MapEntry( - _SINGLE_QUERY, '\"$column\":{\"\$notInQuery\":$inQuery}')); + _SINGLE_QUERY, '"$column":{"\$notInQuery":$inQuery}')); } /// Add a constraint to the query that requires a particular key's value matches a value for a key in the results of another ParseQuery. @@ -338,7 +339,7 @@ class QueryBuilder { query._buildQueryRelationalKey(query.object.parseClassName, keyInQuery); queries.add(MapEntry( - _SINGLE_QUERY, '\"$column\":{\"\$select\":$inQuery}')); + _SINGLE_QUERY, '"$column":{"\$select":$inQuery}')); } /// Add a constraint to the query that requires a particular key's value does not match any value for a key in the results of another ParseQuery @@ -358,24 +359,24 @@ class QueryBuilder { query._buildQueryRelationalKey(query.object.parseClassName, keyInQuery); queries.add(MapEntry( - _SINGLE_QUERY, '\"$column\":{\"\$dontSelect\":$inQuery}')); + _SINGLE_QUERY, '"$column":{"\$dontSelect":$inQuery}')); } /// Finishes the query and calls the server /// /// Make sure to call this after defining your queries - Future query( + Future query( {ProgressCallback? progressCallback}) async { - return object.query( + return object.query( buildQuery(), progressCallback: progressCallback, ); } - Future distinct( + Future distinct( String className) async { final String queryString = 'distinct=$className'; - return object.distinct(queryString); + return object.distinct(queryString); } ///Counts the number of objects that match this query @@ -392,13 +393,13 @@ class QueryBuilder { /// Builds the query relational for Parse String _buildQueryRelational(String className) { queries = _checkForMultipleColumnInstances(queries); - return '{\"where\":{${buildQueries(queries)}},\"className\":\"$className\"${getLimitersRelational(limiters)}}'; + return '{"where":{${buildQueries(queries)}},"className":"$className"${getLimitersRelational(limiters)}}'; } /// Builds the query relational with Key for Parse String _buildQueryRelationalKey(String className, String keyInQuery) { queries = _checkForMultipleColumnInstances(queries); - return '{\"query\":{\"className\":\"$className\",\"where\":{${buildQueries(queries)}}},\"key\":\"$keyInQuery\"}'; + return '{"query":{"className":"$className","where":{${buildQueries(queries)}}},"key":"$keyInQuery"}'; } /// Builds the query for Parse @@ -446,15 +447,14 @@ class QueryBuilder { if (queryOperator == _NO_OPERATOR_NEEDED) { return MapEntry( - _NO_OPERATOR_NEEDED, '\"$key\": ${jsonEncode(value)}'); + _NO_OPERATOR_NEEDED, '"$key": ${jsonEncode(value)}'); } else { - String queryString = '\"$key\":'; - final Map queryOperatorAndValueMap = - Map(); + String queryString = '"$key":'; + final Map queryOperatorAndValueMap = {}; queryOperatorAndValueMap[queryOperator] = parseEncode(value); final String formattedQueryOperatorAndValue = jsonEncode(queryOperatorAndValueMap); - queryString += '$formattedQueryOperatorAndValue'; + queryString += formattedQueryOperatorAndValue; return MapEntry(key, queryString); } } @@ -488,7 +488,7 @@ class QueryBuilder { .toList(); // Build first part of query - String queryStart = '\"${query.key}\":'; + String queryStart = '"${query.key}":'; String queryEnd = ''; // Compact all the queries in the correct format @@ -526,9 +526,9 @@ class QueryBuilder { String result = ''; map.forEach((String key, dynamic value) { if (result.isNotEmpty) { - result = result + ',\"$key":$value'; + result = result + ',"$key":$value'; } else { - result = '\"$key\":$value'; + result = '"$key":$value'; } }); return result; diff --git a/packages/dart/lib/src/objects/parse_base.dart b/packages/dart/lib/src/objects/parse_base.dart index 6521729d1..1edc5908c 100644 --- a/packages/dart/lib/src/objects/parse_base.dart +++ b/packages/dart/lib/src/objects/parse_base.dart @@ -3,11 +3,11 @@ part of flutter_parse_sdk; abstract class ParseBase { String parseClassName = 'ParseBase'; final bool _dirty = false; // reserved property - final Map _unsavedChanges = Map(); - final Map _savingChanges = Map(); + final Map _unsavedChanges = {}; + final Map _savingChanges = {}; /// Stores all the values of a class - Map _objectData = Map(); + Map _objectData = {}; /// Returns [String] objectId String? get objectId => get(keyVarObjectId); @@ -27,7 +27,7 @@ abstract class ParseBase { } if (considerChildren) { - return _areChildrenDirty(Set()); + return _areChildrenDirty({}); } return false; } diff --git a/packages/dart/lib/src/objects/parse_config.dart b/packages/dart/lib/src/objects/parse_config.dart index 1e0d85640..8df935d63 100644 --- a/packages/dart/lib/src/objects/parse_config.dart +++ b/packages/dart/lib/src/objects/parse_config.dart @@ -30,7 +30,7 @@ class ParseConfig extends ParseObject { try { final String uri = '${ParseCoreData().serverUrl}/config'; final String body = - '{\"params\":{\"$key\": ${json.encode(parseEncode(value))}}}'; + '{"params":{"$key": ${json.encode(parseEncode(value))}}}'; final ParseNetworkResponse result = await _client.put(uri, data: body); return handleResponse( this, result, ParseApiRQ.addConfig, _debug, parseClassName); diff --git a/packages/dart/lib/src/objects/parse_error.dart b/packages/dart/lib/src/objects/parse_error.dart index d450ba737..a13b32c5d 100644 --- a/packages/dart/lib/src/objects/parse_error.dart +++ b/packages/dart/lib/src/objects/parse_error.dart @@ -13,7 +13,7 @@ class ParseError { } } - Map _exceptions = { + static const Map _exceptions = { -1: 'UnknownError', // SDK errors / Errors diff --git a/packages/dart/lib/src/objects/parse_file.dart b/packages/dart/lib/src/objects/parse_file.dart index 35ed5c8fd..fe223d6fa 100644 --- a/packages/dart/lib/src/objects/parse_file.dart +++ b/packages/dart/lib/src/objects/parse_file.dart @@ -73,7 +73,7 @@ class ParseFile extends ParseFileBase { mime(file!.path) ?? 'application/octet-stream', }; try { - final String uri = ParseCoreData().serverUrl + '$_path'; + final String uri = ParseCoreData().serverUrl + _path; final ParseNetworkResponse response = await _client.postBytes( uri, options: ParseNetworkOptions(headers: headers), diff --git a/packages/dart/lib/src/objects/parse_file_web.dart b/packages/dart/lib/src/objects/parse_file_web.dart index 3a6a57398..2b1f050e1 100644 --- a/packages/dart/lib/src/objects/parse_file_web.dart +++ b/packages/dart/lib/src/objects/parse_file_web.dart @@ -53,7 +53,7 @@ class ParseWebFile extends ParseFileBase { mime(url ?? name) ?? 'application/octet-stream', }; try { - final String uri = ParseCoreData().serverUrl + '$_path'; + final String uri = ParseCoreData().serverUrl + _path; final ParseNetworkResponse response = await _client.postBytes( uri, options: ParseNetworkOptions(headers: headers), diff --git a/packages/dart/lib/src/objects/parse_object.dart b/packages/dart/lib/src/objects/parse_object.dart index 12b4f9985..3a2ee5728 100644 --- a/packages/dart/lib/src/objects/parse_object.dart +++ b/packages/dart/lib/src/objects/parse_object.dart @@ -49,7 +49,7 @@ class ParseObject extends ParseBase implements ParseCloneable { /// Gets all objects from this table - Limited response at the moment Future getAll() async { try { - final Uri url = getSanitisedUri(_client, '$_path'); + final Uri url = getSanitisedUri(_client, _path); final ParseNetworkResponse result = await _client.get(url.toString()); return handleResponse( this, result, ParseApiRQ.getAll, _debug, parseClassName); @@ -61,7 +61,7 @@ class ParseObject extends ParseBase implements ParseCloneable { /// Creates a new object and saves it online Future create({bool allowCustomObjectId = false}) async { try { - final Uri url = getSanitisedUri(_client, '$_path'); + final Uri url = getSanitisedUri(_client, _path); final String body = json.encode(toJson( forApiRQ: true, allowCustomObjectId: allowCustomObjectId, @@ -118,10 +118,10 @@ class ParseObject extends ParseBase implements ParseCloneable { } Future _saveChildren(dynamic object) async { - final Set uniqueObjects = Set(); - final Set uniqueFiles = Set(); - if (!_collectionDirtyChildren(object, uniqueObjects, uniqueFiles, - Set(), Set())) { + final Set uniqueObjects = {}; + final Set uniqueFiles = {}; + if (!_collectionDirtyChildren( + object, uniqueObjects, uniqueFiles, {}, {})) { final ParseResponse response = ParseResponse(); return response; } @@ -279,7 +279,7 @@ class ParseObject extends ParseBase implements ParseCloneable { /* Check for cycles of new objects. Any such cycle means it will be impossible to save this collection of objects, so throw an exception. */ if (object.objectId != null) { - seenNew = Set(); + seenNew = {}; } else { if (seenNew.contains(object)) { // TODO(yulingtianxia): throw an error? @@ -385,7 +385,7 @@ class ParseObject extends ParseBase implements ParseCloneable { try { if (objectId != null) { final Uri url = getSanitisedUri(_client, '$_path/$objectId'); - final String body = '{\"$key\":{\"__op\":\"Delete\"}}'; + final String body = '{"$key":{"__op":"Delete"}}'; final ParseNetworkResponse result = await _client.put(url.toString(), data: body); final ParseResponse response = handleResponse( @@ -411,7 +411,7 @@ class ParseObject extends ParseBase implements ParseCloneable { Future query(String query, {ProgressCallback? progressCallback}) async { try { - final Uri url = getSanitisedUri(_client, '$_path', query: query); + final Uri url = getSanitisedUri(_client, _path, query: query); final ParseNetworkResponse result = await _client.get( url.toString(), onReceiveProgress: progressCallback, @@ -425,7 +425,7 @@ class ParseObject extends ParseBase implements ParseCloneable { Future distinct(String query) async { try { - final Uri url = getSanitisedUri(_client, '$_aggregatepath', query: query); + final Uri url = getSanitisedUri(_client, _aggregatepath, query: query); final ParseNetworkResponse result = await _client.get(url.toString()); return handleResponse( this, result, ParseApiRQ.query, _debug, parseClassName); @@ -456,7 +456,7 @@ class ParseObject extends ParseBase implements ParseCloneable { throw 'can not fetch without a objectId'; } - final ParseResponse response = await this.getObject(this.objectId!); + final ParseResponse response = await getObject(objectId!); if (response.success && response.results != null) { return response.results!.first; diff --git a/packages/dart/lib/src/objects/parse_relation.dart b/packages/dart/lib/src/objects/parse_relation.dart index 2f3721f8f..7c117e5d4 100644 --- a/packages/dart/lib/src/objects/parse_relation.dart +++ b/packages/dart/lib/src/objects/parse_relation.dart @@ -26,7 +26,7 @@ class ParseRelation { //The key of the relation in the parent object. String _key = ''; //For offline caching, we keep track of every object we've known to be in the relation. - Set? _knownObjects = Set(); + Set? _knownObjects = {}; QueryBuilder getQuery() { return QueryBuilder(ParseObject(_targetClass!)) diff --git a/packages/dart/lib/src/objects/parse_user.dart b/packages/dart/lib/src/objects/parse_user.dart index dc386d9e6..63a24e9ef 100644 --- a/packages/dart/lib/src/objects/parse_user.dart +++ b/packages/dart/lib/src/objects/parse_user.dart @@ -130,7 +130,7 @@ class ParseUser extends ParseObject implements ParseCloneable { } try { - final Uri url = getSanitisedUri(_client, '$keyEndPointUserName'); + final Uri url = getSanitisedUri(_client, keyEndPointUserName); final ParseNetworkResponse response = await _client.get( url.toString(), options: ParseNetworkOptions(headers: headers), @@ -185,7 +185,7 @@ class ParseUser extends ParseObject implements ParseCloneable { } } - final Uri url = getSanitisedUri(_client, '$path'); + final Uri url = getSanitisedUri(_client, path); final String body = json.encode(toJson(forApiRQ: true)); _saveChanges(); final String? installationId = await _getInstallationId(); @@ -219,7 +219,7 @@ class ParseUser extends ParseObject implements ParseCloneable { keyVarPassword: password! }; final String? installationId = await _getInstallationId(); - final Uri url = getSanitisedUri(_client, '$keyEndPointLogin'); + final Uri url = getSanitisedUri(_client, keyEndPointLogin); _saveChanges(); final ParseNetworkResponse response = await _client.post( url.toString(), @@ -245,7 +245,7 @@ class ParseUser extends ParseObject implements ParseCloneable { {bool doNotSendInstallationID = false}) async { forgetLocalSession(); try { - final Uri url = getSanitisedUri(_client, '$keyEndPointUsers'); + final Uri url = getSanitisedUri(_client, keyEndPointUsers); const Uuid uuid = Uuid(); final String? installationId = await _getInstallationId(); @@ -290,7 +290,7 @@ class ParseUser extends ParseObject implements ParseCloneable { Future _loginWith(String provider, Object authData, {bool doNotSendInstallationID = false}) async { try { - final Uri url = getSanitisedUri(_client, '$keyEndPointUsers'); + final Uri url = getSanitisedUri(_client, keyEndPointUsers); final String? installationId = await _getInstallationId(); final Map body = toJson(forApiRQ: true); body['authData'] = {provider: authData}; @@ -324,7 +324,7 @@ class ParseUser extends ParseObject implements ParseCloneable { } try { - final Uri url = getSanitisedUri(_client, '$keyEndPointLogout'); + final Uri url = getSanitisedUri(_client, keyEndPointLogout); final ParseNetworkResponse response = await _client.post( url.toString(), options: ParseNetworkOptions( @@ -440,7 +440,7 @@ class ParseUser extends ParseObject implements ParseCloneable { securityContext: ParseCoreData().securityContext); try { - final Uri url = getSanitisedUri(_client, '$path'); + final Uri url = getSanitisedUri(_client, path); final ParseNetworkResponse response = await _client.get(url.toString()); final ParseResponse parseResponse = handleResponse( emptyUser, response, ParseApiRQ.getAll, _debug, keyClassUser); diff --git a/packages/dart/lib/src/objects/response/parse_exception_response.dart b/packages/dart/lib/src/objects/response/parse_exception_response.dart index f2e6faf19..aea23d599 100644 --- a/packages/dart/lib/src/objects/response/parse_exception_response.dart +++ b/packages/dart/lib/src/objects/response/parse_exception_response.dart @@ -24,5 +24,4 @@ ParseResponse buildParseResponseWithException(Exception exception) { return ParseResponse( error: ParseError(message: exception.toString(), exception: exception)); - ; } diff --git a/packages/dart/lib/src/objects/response/parse_response_builder.dart b/packages/dart/lib/src/objects/response/parse_response_builder.dart index dec3e91b9..d36d8dd98 100644 --- a/packages/dart/lib/src/objects/response/parse_response_builder.dart +++ b/packages/dart/lib/src/objects/response/parse_response_builder.dart @@ -79,11 +79,11 @@ class _ParseResponseBuilder { } } } - } else if (result is Map) { - final Map map = result as Map; + } else if (result is Map) { + final Map map = result; if (object is Parse) { response.result = map; - } else if (map != null && map.length == 1 && map.containsKey('results')) { + } else if (map.length == 1 && map.containsKey('results')) { final List results = map['results']; if (results[0] is String) { response.results = results; @@ -95,7 +95,7 @@ class _ParseResponseBuilder { response.result = items; response.count = items.length; } - } else if (map != null && map.length == 2 && map.containsKey('count')) { + } else if (map.length == 2 && map.containsKey('count')) { final List results = [map['count']]; response.results = results; response.result = results; @@ -127,7 +127,7 @@ class _ParseResponseBuilder { return object.clone(map); } else if (object is ParseObject) { // Merge unsaved changes and response. - final Map unsaved = Map(); + final Map unsaved = {}; unsaved.addAll(object._unsavedChanges); unsaved.forEach((String k, dynamic v) { if (map[k] != null && map[k] != v) { @@ -145,6 +145,6 @@ class _ParseResponseBuilder { } bool isHealthCheck(ParseNetworkResponse apiResponse) { - return ['{\"status\":\"ok\"}', 'OK'].contains(apiResponse.data); + return ['{"status":"ok"}', 'OK'].contains(apiResponse.data); } } diff --git a/packages/dart/lib/src/utils/parse_decoder.dart b/packages/dart/lib/src/utils/parse_decoder.dart index b3f14c1a6..331f1173a 100644 --- a/packages/dart/lib/src/utils/parse_decoder.dart +++ b/packages/dart/lib/src/utils/parse_decoder.dart @@ -9,7 +9,7 @@ List _convertJSONArrayToList(List array) { } Map _convertJSONObjectToMap(Map object) { - final Map map = Map(); + final Map map = {}; object.forEach((String key, dynamic value) { map.putIfAbsent(key, () => parseDecode(value)); }); @@ -38,7 +38,7 @@ dynamic parseDecode(dynamic value) { return value; } - if (!(value is Map)) { + if (value is! Map) { return value; } diff --git a/packages/dart/lib/src/utils/parse_live_list.dart b/packages/dart/lib/src/utils/parse_live_list.dart index fb6a74cd5..5547d62e5 100644 --- a/packages/dart/lib/src/utils/parse_live_list.dart +++ b/packages/dart/lib/src/utils/parse_live_list.dart @@ -129,11 +129,12 @@ class ParseLiveList { Future _runQuery() async { final QueryBuilder query = QueryBuilder.copy(_query); - if (_debug) + if (_debug) { print('ParseLiveList: lazyLoading is ${_lazyLoading ? 'on' : 'off'}'); + } if (_lazyLoading) { final List keys = _preloadedColumns.toList(); - if (_lazyLoading && query.limiters.containsKey('order')) + if (_lazyLoading && query.limiters.containsKey('order')) { keys.addAll( query.limiters['order'].toString().split(',').map((String string) { if (string.startsWith('-')) { @@ -142,6 +143,7 @@ class ParseLiveList { return string; }), ); + } query.keysToReturn(keys); } return await query.query(); @@ -556,7 +558,7 @@ class ParseLiveListElement { {bool loaded = false, Map? updatedSubItems}) : _loaded = loaded { _updatedSubItems = - _toSubscriptionMap(updatedSubItems ?? Map()); + _toSubscriptionMap(updatedSubItems ?? {}); if (_updatedSubItems.isNotEmpty) { _liveQuery = LiveQuery(); _subscribe(); @@ -575,7 +577,7 @@ class ParseLiveListElement { T get object => _object.clone(_object.toJson(full: true)); Map _toSubscriptionMap(Map map) { - final Map result = Map(); + final Map result = {}; for (String key in map.keys) { result.putIfAbsent(PathKey(key), () => _toSubscriptionMap(map[key])); } @@ -583,7 +585,7 @@ class ParseLiveListElement { } Map _toKeyMap(Map map) { - final Map result = Map(); + final Map result = {}; for (PathKey key in map.keys) { result.putIfAbsent(key.key, () => _toKeyMap(map[key])); } diff --git a/packages/flutter/example/lib/data/repositories/diet_plan/provider_api_diet_plan.dart b/packages/flutter/example/lib/data/repositories/diet_plan/provider_api_diet_plan.dart index 41583c797..e5aed5100 100644 --- a/packages/flutter/example/lib/data/repositories/diet_plan/provider_api_diet_plan.dart +++ b/packages/flutter/example/lib/data/repositories/diet_plan/provider_api_diet_plan.dart @@ -13,7 +13,7 @@ class DietPlanProviderApi implements DietPlanProviderContract { @override Future addAll(List items) async { - final List responses = List(); + final List responses = []; for (final DietPlan item in items) { final ApiResponse response = await add(item); @@ -57,7 +57,7 @@ class DietPlanProviderApi implements DietPlanProviderContract { @override Future updateAll(List items) async { - final List responses = List(); + final List responses = []; for (final DietPlan item in items) { final ApiResponse response = await update(item); diff --git a/packages/flutter/example/lib/data/repositories/diet_plan/provider_db_diet_plan.dart b/packages/flutter/example/lib/data/repositories/diet_plan/provider_db_diet_plan.dart index 4528ead5f..97a0e412b 100644 --- a/packages/flutter/example/lib/data/repositories/diet_plan/provider_db_diet_plan.dart +++ b/packages/flutter/example/lib/data/repositories/diet_plan/provider_db_diet_plan.dart @@ -26,7 +26,7 @@ class DietPlanProviderDB implements DietPlanProviderContract { @override Future addAll(List items) async { - final List itemsInDb = List(); + final List itemsInDb = []; for (final DietPlan item in items) { final ApiResponse response = await add(item); @@ -45,9 +45,9 @@ class DietPlanProviderDB implements DietPlanProviderContract { @override Future getAll() async { - final List foodItems = List(); + final List foodItems = []; - final List sortOrders = List(); + final List sortOrders = []; sortOrders.add(SortOrder(keyName)); final Finder finder = Finder(sortOrders: sortOrders); final List>> records = @@ -82,7 +82,7 @@ class DietPlanProviderDB implements DietPlanProviderContract { @override Future getNewerThan(DateTime date) async { - final List foodItems = List(); + final List foodItems = []; final Finder finder = Finder( filter: @@ -113,7 +113,7 @@ class DietPlanProviderDB implements DietPlanProviderContract { @override Future updateAll(List items) async { - final List updatedItems = List(); + final List updatedItems = []; for (final DietPlan item in items) { final ApiResponse response = await update(item); @@ -145,7 +145,7 @@ class DietPlanProviderDB implements DietPlanProviderContract { } Map convertItemToStorageMap(DietPlan item) { - final Map values = Map(); + final Map values = {}; // ignore: invalid_use_of_protected_member values['value'] = json.jsonEncode(item.toJson(full: true)); values[keyVarObjectId] = item.objectId; diff --git a/packages/flutter/example/lib/data/repositories/user/provider_db_user.dart b/packages/flutter/example/lib/data/repositories/user/provider_db_user.dart index be2a615bb..c40e3b368 100644 --- a/packages/flutter/example/lib/data/repositories/user/provider_db_user.dart +++ b/packages/flutter/example/lib/data/repositories/user/provider_db_user.dart @@ -82,7 +82,7 @@ class UserProviderDB implements UserProviderContract { void logout(User user) {} Map convertItemToStorageMap(User item) { - final Map values = Map(); + final Map values = {}; // ignore: invalid_use_of_protected_member values['value'] = json.jsonEncode(item.toJson(full: true)); values[keyVarObjectId] = item.objectId; diff --git a/packages/flutter/example/lib/main.dart b/packages/flutter/example/lib/main.dart index 003b9d850..cabbc552e 100644 --- a/packages/flutter/example/lib/main.dart +++ b/packages/flutter/example/lib/main.dart @@ -1,3 +1,5 @@ +// ignore_for_file: avoid_print + import 'dart:convert'; import 'dart:io'; @@ -16,7 +18,7 @@ import 'package:parse_server_sdk_flutter/parse_server_sdk.dart'; void main() { _setTargetPlatformForDesktop(); - runApp(MyApp()); + runApp(const MyApp()); } void _setTargetPlatformForDesktop() { @@ -33,6 +35,8 @@ void _setTargetPlatformForDesktop() { } class MyApp extends StatefulWidget { + const MyApp({Key key}) : super(key: key); + @override _MyAppState createState() => _MyAppState(); } @@ -56,7 +60,7 @@ class _MyAppState extends State { appBar: AppBar( title: const Text('Plugin example app'), ), - body: Center( + body: const Center( //child: Text(text), child: DecisionPage(), //child: HomePage(), diff --git a/packages/flutter/example/lib/pages/decision_page.dart b/packages/flutter/example/lib/pages/decision_page.dart index 33788cfd6..da97929b9 100644 --- a/packages/flutter/example/lib/pages/decision_page.dart +++ b/packages/flutter/example/lib/pages/decision_page.dart @@ -7,6 +7,8 @@ import 'home_page.dart'; import 'login_page.dart'; class DecisionPage extends StatefulWidget { + const DecisionPage({Key key}) : super(key: key); + @override _DecisionPageState createState() => _DecisionPageState(); } @@ -26,20 +28,18 @@ class _DecisionPageState extends State { Widget build(BuildContext context) { return Scaffold( body: Center( - child: Container( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - _showLogo(), - const SizedBox( - height: 20, - ), - Center( - child: Text(_parseServerState), - ), - ], - ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + _showLogo(), + const SizedBox( + height: 20, + ), + Center( + child: Text(_parseServerState), + ), + ], ), ), ); @@ -69,7 +69,7 @@ class _DecisionPageState extends State { if (user != null) { _redirectToPage(context, HomePage(DietPlanProviderApi())); } else { - _redirectToPage(context, LoginPage()); + _redirectToPage(context, const LoginPage()); } } else { setState(() { diff --git a/packages/flutter/example/lib/pages/home_page.dart b/packages/flutter/example/lib/pages/home_page.dart index 4515e9f7f..31298dec3 100644 --- a/packages/flutter/example/lib/pages/home_page.dart +++ b/packages/flutter/example/lib/pages/home_page.dart @@ -8,7 +8,7 @@ import 'package:flutter_plugin_example/data/repositories/diet_plan/contract_prov import 'package:parse_server_sdk/parse_server_sdk.dart'; class HomePage extends StatefulWidget { - const HomePage(this._dietPlanProvider); + const HomePage(this._dietPlanProvider, {Key key}) : super(key: key); final DietPlanProviderContract _dietPlanProvider; @@ -40,7 +40,7 @@ class _HomePageState extends State { automaticallyImplyLeading: false, title: const Text('Parse Server demo'), actions: [ - FlatButton( + TextButton( child: const Text('Logout', style: TextStyle(fontSize: 17.0, color: Colors.white)), onPressed: () async { diff --git a/packages/flutter/example/lib/pages/login_page.dart b/packages/flutter/example/lib/pages/login_page.dart index 54d3fc84e..c91ab0286 100644 --- a/packages/flutter/example/lib/pages/login_page.dart +++ b/packages/flutter/example/lib/pages/login_page.dart @@ -1,10 +1,14 @@ +// ignore_for_file: avoid_print + import 'package:flutter/material.dart'; import 'package:flutter_plugin_example/data/model/user.dart'; import 'package:parse_server_sdk/parse_server_sdk.dart'; -enum FormMode { LOGIN, SIGNUP } +enum FormMode { login, signUp } class LoginPage extends StatefulWidget { + const LoginPage({Key key}) : super(key: key); + @override _LoginPageState createState() => _LoginPageState(); } @@ -17,7 +21,7 @@ class _LoginPageState extends State { String _errorMessage; // Initial form is login form - FormMode _formMode = FormMode.LOGIN; + FormMode _formMode = FormMode.login; bool _isLoading; // Check if form is valid before perform login or signup @@ -41,7 +45,7 @@ class _LoginPageState extends State { ParseResponse response; try { - if (_formMode == FormMode.LOGIN) { + if (_formMode == FormMode.login) { response = await user.login(); print('Signed in'); } else { @@ -52,7 +56,7 @@ class _LoginPageState extends State { _isLoading = false; }); if (response.success) { - if (_formMode == FormMode.LOGIN) { + if (_formMode == FormMode.login) { Navigator.pop(context, true); } } else { @@ -82,7 +86,7 @@ class _LoginPageState extends State { _formKey.currentState.reset(); _errorMessage = ''; setState(() { - _formMode = FormMode.SIGNUP; + _formMode = FormMode.signUp; }); } @@ -90,7 +94,7 @@ class _LoginPageState extends State { _formKey.currentState.reset(); _errorMessage = ''; setState(() { - _formMode = FormMode.LOGIN; + _formMode = FormMode.login; }); } @@ -116,7 +120,7 @@ class _LoginPageState extends State { if (_isLoading) { return const Center(child: CircularProgressIndicator()); } - return Container( + return const SizedBox( height: 0.0, width: 0.0, ); @@ -213,13 +217,13 @@ class _LoginPageState extends State { } Widget _showSecondaryButton() { - return FlatButton( - child: _formMode == FormMode.LOGIN + return TextButton( + child: _formMode == FormMode.login ? const Text('Create an account', style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.w300)) : const Text('Have an account? Sign in', style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.w300)), - onPressed: _formMode == FormMode.LOGIN + onPressed: _formMode == FormMode.login ? _changeFormToSignUp : _changeFormToLogin, ); @@ -230,12 +234,14 @@ class _LoginPageState extends State { padding: const EdgeInsets.fromLTRB(0.0, 45.0, 0.0, 0.0), child: SizedBox( height: 40.0, - child: RaisedButton( - elevation: 5.0, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(30.0)), - color: Colors.blue, - child: _formMode == FormMode.LOGIN + child: ElevatedButton( + style: ElevatedButton.styleFrom( + primary: Colors.blue, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(30.0)), + elevation: 5.0, + ), + child: _formMode == FormMode.login ? const Text('Login', style: TextStyle(fontSize: 20.0, color: Colors.white)) : const Text('Create account', diff --git a/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_api_test.dart b/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_api_test.dart index a0f95f909..dcd1a9d68 100644 --- a/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_api_test.dart +++ b/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_api_test.dart @@ -10,7 +10,7 @@ import '../repository_mock_utils.dart'; // ignore_for_file: invalid_use_of_protected_member void main() { DietPlanProviderContract repository; - SharedPreferences.setMockInitialValues(Map()); + SharedPreferences.setMockInitialValues({}); Future getRepository() async { repository ??= DietPlanProviderApi(); @@ -49,7 +49,7 @@ void main() { test('addAll DietPlan from API', () async { // Given - final List actual = List(); + final List actual = []; final DietPlan item1 = getDummyDietPlan(); item1['objectId'] = null; item1.protein = 5; @@ -117,7 +117,7 @@ void main() { }); test('getAll DietPlan from API', () async { - final List actual = List(); + final List actual = []; final DietPlan item1 = getDummyDietPlan(); item1['objectId'] = null; @@ -162,7 +162,7 @@ void main() { test('updateAll DietPlan from API', () async { // Given - final List actual = List(); + final List actual = []; final DietPlan item1 = getDummyDietPlan(); item1['objectId'] = null; diff --git a/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_db_test.dart b/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_db_test.dart index 89c99187b..3c5cc9523 100644 --- a/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_db_test.dart +++ b/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_db_test.dart @@ -11,7 +11,7 @@ import '../repository_mock_utils.dart'; void main() { DietPlanProviderContract repository; - SharedPreferences.setMockInitialValues(Map()); + SharedPreferences.setMockInitialValues({}); StoreRef> _getStore(Database database) { final StoreRef> store = @@ -61,7 +61,7 @@ void main() { test('addAll DietPlan from DB', () async { // Given const String objectIdPrefix = '12345abc'; - final List actual = List(); + final List actual = []; final DietPlan item1 = getDummyDietPlan(); item1.objectId = '${objectIdPrefix}0'; @@ -104,9 +104,7 @@ void main() { const String objectIdPrefix = '12345abc'; final DietPlan item1 = getDummyDietPlan()..objectId = '${objectIdPrefix}0'; final DietPlan item2 = getDummyDietPlan()..objectId = '${objectIdPrefix}1'; - final List actual = List() - ..add(item1) - ..add(item2); + final List actual = [item1, item2]; // When final ApiResponse response = await repository.addAll(actual); @@ -170,7 +168,7 @@ void main() { // Given const String objectIdPrefix = '12345abc'; - final List actual = List(); + final List actual = []; final DietPlan item1 = getDummyDietPlan(); item1.objectId = '${objectIdPrefix}0'; actual.add(item1); diff --git a/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_test.dart b/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_test.dart index 540d32016..4d959c1db 100644 --- a/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_test.dart +++ b/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_test.dart @@ -10,7 +10,7 @@ import '../repository_mock_utils.dart'; void main() { DietPlanRepository repository; - SharedPreferences.setMockInitialValues(Map()); + SharedPreferences.setMockInitialValues({}); DietPlanProviderContract apiRepository; DietPlanProviderContract dbRepository; @@ -21,9 +21,7 @@ void main() { const String objectIdPrefix = '12345abc'; final DietPlan item1 = getDummyDietPlan()..objectId = '${objectIdPrefix}0'; final DietPlan item2 = getDummyDietPlan()..objectId = '${objectIdPrefix}1'; - final List mockList = List() - ..add(item1) - ..add(item2); + final List mockList = [item1, item2]; when(repositoryApi.add(any)).thenAnswer((_) async => Future.value( diff --git a/packages/flutter/example_livelist/lib/main.dart b/packages/flutter/example_livelist/lib/main.dart index f7c709189..c9881962e 100644 --- a/packages/flutter/example_livelist/lib/main.dart +++ b/packages/flutter/example_livelist/lib/main.dart @@ -3,9 +3,11 @@ import 'package:parse_server_sdk_flutter/parse_server_sdk.dart'; import 'application_constants.dart'; -void main() => runApp(MyApp()); +void main() => runApp(const MyApp()); class MyApp extends StatefulWidget { + const MyApp({Key? key}) : super(key: key); + @override _MyAppState createState() => _MyAppState(); } @@ -21,10 +23,11 @@ class _MyAppState extends State { initData().then((bool success) { setState(() { initFailed = !success; - if (success) + if (success) { _queryBuilder = QueryBuilder(ParseObject('Test')) ..orderByAscending('order') ..whereNotEqualTo('show', false); + } }); }).catchError((dynamic _) { setState(() { diff --git a/packages/flutter/lib/parse_server_sdk.dart b/packages/flutter/lib/parse_server_sdk.dart index 8844aa7f4..a13cc55c1 100644 --- a/packages/flutter/lib/parse_server_sdk.dart +++ b/packages/flutter/lib/parse_server_sdk.dart @@ -6,7 +6,6 @@ import 'dart:ui' as ui; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:parse_server_sdk/parse_server_sdk.dart' as sdk; import 'package:path/path.dart' as path; diff --git a/packages/flutter/lib/src/utils/parse_live_list.dart b/packages/flutter/lib/src/utils/parse_live_list.dart index 9cea74101..fa270a3b2 100644 --- a/packages/flutter/lib/src/utils/parse_live_list.dart +++ b/packages/flutter/lib/src/utils/parse_live_list.dart @@ -232,8 +232,7 @@ class ParseLiveListElementWidget } class _ParseLiveListElementWidgetState - extends State> - with SingleTickerProviderStateMixin { + extends State> { _ParseLiveListElementWidgetState(DataGetter? loadedDataGetter, DataGetter? preLoadedDataGetter, StreamGetter? stream) { _snapshot = sdk.ParseLiveListElementSnapshot( @@ -284,7 +283,6 @@ class _ParseLiveListElementWidgetState sizeFactor: widget.sizeFactor, child: AnimatedSize( duration: widget.duration, - vsync: this, child: widget.childBuilder(context, _snapshot), ), ); diff --git a/packages/flutter/test/parse_client_configuration_test.dart b/packages/flutter/test/parse_client_configuration_test.dart index f2de6b5cc..6d4f38b95 100644 --- a/packages/flutter/test/parse_client_configuration_test.dart +++ b/packages/flutter/test/parse_client_configuration_test.dart @@ -3,7 +3,7 @@ import 'package:parse_server_sdk_flutter/parse_server_sdk.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() { - SharedPreferences.setMockInitialValues(Map()); + SharedPreferences.setMockInitialValues({}); test('testBuilder', () async { await Parse().initialize('appId', 'serverUrl', From a93f08844806721b2c8b952942840dccf6f5b30b Mon Sep 17 00:00:00 2001 From: Maximilian Fischer Date: Sun, 1 May 2022 01:43:22 +0200 Subject: [PATCH 06/10] Fixed the simple analyzer infos --- .../lib/src/data/parse_subclass_handler.dart | 16 ++-- .../dart/lib/src/network/dio_adapter_io.dart | 3 +- .../dart/lib/src/network/parse_client.dart | 2 +- .../lib/src/network/parse_dio_client.dart | 9 ++- .../lib/src/network/parse_http_client.dart | 9 ++- .../lib/src/network/parse_live_query.dart | 8 +- .../dart/lib/src/network/parse_query.dart | 74 +++++++++---------- packages/dart/lib/src/objects/parse_base.dart | 8 +- .../dart/lib/src/objects/parse_config.dart | 2 +- .../dart/lib/src/objects/parse_error.dart | 2 +- packages/dart/lib/src/objects/parse_file.dart | 2 +- .../dart/lib/src/objects/parse_file_web.dart | 2 +- .../dart/lib/src/objects/parse_object.dart | 22 +++--- .../dart/lib/src/objects/parse_relation.dart | 2 +- packages/dart/lib/src/objects/parse_user.dart | 14 ++-- .../response/parse_exception_response.dart | 1 - .../response/parse_response_builder.dart | 12 +-- .../dart/lib/src/utils/parse_decoder.dart | 4 +- .../dart/lib/src/utils/parse_live_list.dart | 12 +-- .../diet_plan/provider_api_diet_plan.dart | 4 +- .../diet_plan/provider_db_diet_plan.dart | 12 +-- .../repositories/user/provider_db_user.dart | 2 +- packages/flutter/example/lib/main.dart | 8 +- .../example/lib/pages/decision_page.dart | 30 ++++---- .../flutter/example/lib/pages/home_page.dart | 4 +- .../flutter/example/lib/pages/login_page.dart | 38 ++++++---- .../repository_diet_plan_api_test.dart | 8 +- .../repository_diet_plan_db_test.dart | 10 +-- .../diet_plan/repository_diet_plan_test.dart | 6 +- .../flutter/example_livelist/lib/main.dart | 7 +- packages/flutter/lib/parse_server_sdk.dart | 1 - .../lib/src/utils/parse_live_list.dart | 4 +- .../test/parse_client_configuration_test.dart | 2 +- 33 files changed, 180 insertions(+), 160 deletions(-) diff --git a/packages/dart/lib/src/data/parse_subclass_handler.dart b/packages/dart/lib/src/data/parse_subclass_handler.dart index 2205abc7c..f7ed18cf9 100644 --- a/packages/dart/lib/src/data/parse_subclass_handler.dart +++ b/packages/dart/lib/src/data/parse_subclass_handler.dart @@ -12,30 +12,34 @@ class ParseSubClassHandler { {Map? registeredSubClassMap, ParseUserConstructor? parseUserConstructor, ParseFileConstructor? parseFileConstructor}) { - _subClassMap = - registeredSubClassMap ?? Map(); + _subClassMap = registeredSubClassMap ?? {}; _parseUserConstructor = parseUserConstructor; - if (parseFileConstructor != null) + if (parseFileConstructor != null) { _parseFileConstructor = parseFileConstructor; + } } late Map _subClassMap; ParseUserConstructor? _parseUserConstructor; - ParseFileConstructor _parseFileConstructor = ({String? name, String? url}) { + ParseFileConstructor _parseFileConstructor = defaultParseFileConstructor; + + static ParseFileBase defaultParseFileConstructor( + {String? name, String? url}) { if (parseIsWeb) { return ParseWebFile(null, name: name!, url: url); } else { return ParseFile(null, name: name, url: url); } - }; + } void registerSubClass( String className, ParseObjectConstructor objectConstructor) { if (className != keyClassUser && className != keyClassInstallation && className != keyClassSession && - className != keyFileClassname) + className != keyFileClassname) { _subClassMap[className] = objectConstructor; + } } void registerUserSubClass(ParseUserConstructor parseUserConstructor) { diff --git a/packages/dart/lib/src/network/dio_adapter_io.dart b/packages/dart/lib/src/network/dio_adapter_io.dart index e8e509560..e0dd6bc17 100644 --- a/packages/dart/lib/src/network/dio_adapter_io.dart +++ b/packages/dart/lib/src/network/dio_adapter_io.dart @@ -7,8 +7,9 @@ HttpClientAdapter createHttpClientAdapter(SecurityContext? securityContext) { final DefaultHttpClientAdapter defaultHttpClientAdapter = DefaultHttpClientAdapter(); - if (securityContext != null) + if (securityContext != null) { defaultHttpClientAdapter.onHttpClientCreate = (HttpClient client) => HttpClient(context: securityContext); + } return defaultHttpClientAdapter; } diff --git a/packages/dart/lib/src/network/parse_client.dart b/packages/dart/lib/src/network/parse_client.dart index d71683f73..bf8c30f04 100644 --- a/packages/dart/lib/src/network/parse_client.dart +++ b/packages/dart/lib/src/network/parse_client.dart @@ -62,7 +62,7 @@ abstract class ParseClient { // ParseNetworkOptions options, // }); - @deprecated + @Deprecated("Use ParseCoreData() instead.") ParseCoreData get data => ParseCoreData(); } diff --git a/packages/dart/lib/src/network/parse_dio_client.dart b/packages/dart/lib/src/network/parse_dio_client.dart index f76a3babb..a28483155 100644 --- a/packages/dart/lib/src/network/parse_dio_client.dart +++ b/packages/dart/lib/src/network/parse_dio_client.dart @@ -159,13 +159,16 @@ class _ParseDioClient with dio.DioMixin implements dio.Dio { options.headers![keyHeaderApplicationId] = parseCoreData.applicationId; if (_sendSessionId && parseCoreData.sessionId != null && - options.headers![keyHeaderSessionToken] == null) + options.headers![keyHeaderSessionToken] == null) { options.headers![keyHeaderSessionToken] = parseCoreData.sessionId; + } - if (parseCoreData.clientKey != null) + if (parseCoreData.clientKey != null) { options.headers![keyHeaderClientKey] = parseCoreData.clientKey; - if (parseCoreData.masterKey != null) + } + if (parseCoreData.masterKey != null) { options.headers![keyHeaderMasterKey] = parseCoreData.masterKey; + } /// If developer wants to add custom headers, extend this class and add headers needed. if (additionalHeaders != null && additionalHeaders!.isNotEmpty) { diff --git a/packages/dart/lib/src/network/parse_http_client.dart b/packages/dart/lib/src/network/parse_http_client.dart index 3992373d9..bc49c9581 100644 --- a/packages/dart/lib/src/network/parse_http_client.dart +++ b/packages/dart/lib/src/network/parse_http_client.dart @@ -133,13 +133,16 @@ class _ParseHTTPClient extends http.BaseClient { request.headers[keyHeaderApplicationId] = parseCoreData.applicationId; if (_sendSessionId && parseCoreData.sessionId != null && - request.headers[keyHeaderSessionToken] == null) + request.headers[keyHeaderSessionToken] == null) { request.headers[keyHeaderSessionToken] = parseCoreData.sessionId!; + } - if (parseCoreData.clientKey != null) + if (parseCoreData.clientKey != null) { request.headers[keyHeaderClientKey] = parseCoreData.clientKey!; - if (parseCoreData.masterKey != null) + } + if (parseCoreData.masterKey != null) { request.headers[keyHeaderMasterKey] = parseCoreData.masterKey!; + } /// If developer wants to add custom headers, extend this class and add headers needed. if (additionalHeaders != null && additionalHeaders!.isNotEmpty) { diff --git a/packages/dart/lib/src/network/parse_live_query.dart b/packages/dart/lib/src/network/parse_live_query.dart index 93dbba882..f30cfedf6 100644 --- a/packages/dart/lib/src/network/parse_live_query.dart +++ b/packages/dart/lib/src/network/parse_live_query.dart @@ -115,8 +115,9 @@ class LiveQueryReconnectingController { _currentTimer = null; _reconnect(); }); - if (debug) + if (debug) { print('$DEBUG_TAG: Retrytimer set to ${retryInterval[_retryState]}ms'); + } if (_retryState < retryInterval.length - 1) { _retryState++; } @@ -212,9 +213,10 @@ class LiveQueryClient { subscription._enabled = false; }); _connecting = false; - if (userInitialized) + if (userInitialized) { _clientEventStreamController.sink .add(LiveQueryClientEvent.USER_DISCONNECTED); + } } Future> subscribe( @@ -353,7 +355,7 @@ class LiveQueryClient { final String _where = query.buildQuery().replaceAll('where=', ''); //Convert where condition to Map - Map _whereMap = Map(); + Map _whereMap = {}; if (_where != '') { _whereMap = json.decode(_where); } diff --git a/packages/dart/lib/src/network/parse_query.dart b/packages/dart/lib/src/network/parse_query.dart index b2932ef06..9d5bde048 100644 --- a/packages/dart/lib/src/network/parse_query.dart +++ b/packages/dart/lib/src/network/parse_query.dart @@ -37,7 +37,7 @@ class QueryBuilder { T object; List> queries = >[]; - final Map limiters = Map(); + final Map limiters = {}; /// Adds a limit to amount of results return from Parse void setLimit(int limit) { @@ -103,10 +103,10 @@ class QueryBuilder { {bool caseSensitive = false}) { if (caseSensitive) { queries.add(MapEntry( - _SINGLE_QUERY, '\"$column\":{\"\$regex\": \"^$query\"}')); + _SINGLE_QUERY, '"$column":{"\$regex": "^$query"}')); } else { - queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$regex\": \"^$query\", \"\$options\": \"i\"}')); + queries.add(MapEntry( + _SINGLE_QUERY, '"$column":{"\$regex": "^$query", "\$options": "i"}')); } } @@ -115,10 +115,10 @@ class QueryBuilder { {bool caseSensitive = false}) { if (caseSensitive) { queries.add(MapEntry( - _SINGLE_QUERY, '\"$column\":{\"\$regex\": \"$query\$\"}')); + _SINGLE_QUERY, '"$column":{"\$regex": "$query\$"}')); } else { queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$regex\": \"$query\$\", \"\$options\": \"i\"}')); + '"$column":{"\$regex": "$query\$", "\$options": "i"}')); } } @@ -183,7 +183,7 @@ class QueryBuilder { /// Retrieves related objets where [String] column is a relation field to the class [String] className void whereRelatedTo(String column, String className, String objectId) { queries.add(MapEntry(_SINGLE_QUERY, - '\"\$relatedTo\":{\"object\":{\"__type\":\"Pointer\",\"className\":\"$className\",\"objectId\":\"$objectId\"},\"key\":\"$column\"}')); + '"\$relatedTo":{"object":{"__type":"Pointer","className":"$className","objectId":"$objectId"},"key":"$column"}')); } /// Returns an object where the [String] column contains select @@ -216,10 +216,10 @@ class QueryBuilder { {bool caseSensitive = false}) { if (caseSensitive) { queries.add(MapEntry( - _SINGLE_QUERY, '\"$column\":{\"\$regex\": \"$value\"}')); + _SINGLE_QUERY, '"$column":{"\$regex": "$value"}')); } else { - queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$regex\": \"$value\", \"\$options\": \"i\"}')); + queries.add(MapEntry( + _SINGLE_QUERY, '"$column":{"\$regex": "$value", "\$options": "i"}')); } } @@ -230,7 +230,7 @@ class QueryBuilder { bool orderByScore = true, bool diacriticSensitive = false}) { queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$text\":{\"\$search\":{\"\$term\": \"$query\", \"\$caseSensitive\": $caseSensitive , \"\$diacriticSensitive\": $diacriticSensitive }}}')); + '"$column":{"\$text":{"\$search":{"\$term": "$query", "\$caseSensitive": $caseSensitive , "\$diacriticSensitive": $diacriticSensitive }}}')); if (orderByScore) { orderByAscending('\$score'); keysToReturn(['\$score']); @@ -242,7 +242,7 @@ class QueryBuilder { final double latitude = point.latitude; final double longitude = point.longitude; queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$nearSphere\":{\"__type\":\"GeoPoint\",\"latitude\":$latitude,\"longitude\":$longitude}}')); + '"$column":{"\$nearSphere":{"__type":"GeoPoint","latitude":$latitude,"longitude":$longitude}}')); } /// Returns an object with key point values near the point given and within the maximum distance given. @@ -252,7 +252,7 @@ class QueryBuilder { final double longitude = point.longitude; queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$nearSphere\":{\"__type\":\"GeoPoint\",\"latitude\":$latitude,\"longitude\":$longitude},\"\$maxDistanceInMiles\":$maxDistance}')); + '"$column":{"\$nearSphere":{"__type":"GeoPoint","latitude":$latitude,"longitude":$longitude},"\$maxDistanceInMiles":$maxDistance}')); } /// Returns an object with key point values near the point given and within the maximum distance given. @@ -262,7 +262,7 @@ class QueryBuilder { final double longitude = point.longitude; queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$nearSphere\":{\"__type\":\"GeoPoint\",\"latitude\":$latitude,\"longitude\":$longitude},\"\$maxDistanceInKilometers\":$maxDistance}')); + '"$column":{"\$nearSphere":{"__type":"GeoPoint","latitude":$latitude,"longitude":$longitude},"\$maxDistanceInKilometers":$maxDistance}')); } /// Returns an object with key point values near the point given and within the maximum distance given. @@ -272,7 +272,7 @@ class QueryBuilder { final double longitude = point.longitude; queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$nearSphere\":{\"__type\":\"GeoPoint\",\"latitude\":$latitude,\"longitude\":$longitude},\"\$maxDistanceInRadians\":$maxDistance}')); + '"$column":{"\$nearSphere":{"__type":"GeoPoint","latitude":$latitude,"longitude":$longitude},"\$maxDistanceInRadians":$maxDistance}')); } /// Returns an object with key point values contained within a given rectangular geographic bounding box. @@ -285,20 +285,21 @@ class QueryBuilder { final double longitudeN = northeast.longitude; queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$within\":{\"\$box\": [{\"__type\": \"GeoPoint\",\"latitude\":$latitudeS,\"longitude\":$longitudeS},{\"__type\": \"GeoPoint\",\"latitude\":$latitudeN,\"longitude\":$longitudeN}]}}')); + '"$column":{"\$within":{"\$box": [{"__type": "GeoPoint","latitude":$latitudeS,"longitude":$longitudeS},{"__type": "GeoPoint","latitude":$latitudeN,"longitude":$longitudeN}]}}')); } /// Return an object with key coordinates be contained within and on the bounds of a given polygon. /// Supports closed and open (last point is connected to first) paths /// Polygon must have at least 3 points void whereWithinPolygon(String column, List points) { - if (points.length < 3) + if (points.length < 3) { throw ArgumentError('Polygon must have at least 3 points'); + } Map dictionary = {}; dictionary['\$polygon'] = points.map((e) => e.toJson()).toList(); - queries.add(MapEntry(_SINGLE_QUERY, - '\"$column\":{\"\$geoWithin\":${jsonEncode(dictionary)}}')); + queries.add(MapEntry( + _SINGLE_QUERY, '"$column":{"\$geoWithin":${jsonEncode(dictionary)}}')); } /// Add a constraint to the query that requires a particular key's value match another QueryBuilder @@ -308,7 +309,7 @@ class QueryBuilder { query._buildQueryRelational(query.object.parseClassName); queries.add(MapEntry( - _SINGLE_QUERY, '\"$column\":{\"\$inQuery\":$inQuery}')); + _SINGLE_QUERY, '"$column":{"\$inQuery":$inQuery}')); } ///Add a constraint to the query that requires a particular key's value does not match another QueryBuilder @@ -318,7 +319,7 @@ class QueryBuilder { query._buildQueryRelational(query.object.parseClassName); queries.add(MapEntry( - _SINGLE_QUERY, '\"$column\":{\"\$notInQuery\":$inQuery}')); + _SINGLE_QUERY, '"$column":{"\$notInQuery":$inQuery}')); } /// Add a constraint to the query that requires a particular key's value matches a value for a key in the results of another ParseQuery. @@ -338,7 +339,7 @@ class QueryBuilder { query._buildQueryRelationalKey(query.object.parseClassName, keyInQuery); queries.add(MapEntry( - _SINGLE_QUERY, '\"$column\":{\"\$select\":$inQuery}')); + _SINGLE_QUERY, '"$column":{"\$select":$inQuery}')); } /// Add a constraint to the query that requires a particular key's value does not match any value for a key in the results of another ParseQuery @@ -358,24 +359,24 @@ class QueryBuilder { query._buildQueryRelationalKey(query.object.parseClassName, keyInQuery); queries.add(MapEntry( - _SINGLE_QUERY, '\"$column\":{\"\$dontSelect\":$inQuery}')); + _SINGLE_QUERY, '"$column":{"\$dontSelect":$inQuery}')); } /// Finishes the query and calls the server /// /// Make sure to call this after defining your queries - Future query( + Future query( {ProgressCallback? progressCallback}) async { - return object.query( + return object.query( buildQuery(), progressCallback: progressCallback, ); } - Future distinct( + Future distinct( String className) async { final String queryString = 'distinct=$className'; - return object.distinct(queryString); + return object.distinct(queryString); } ///Counts the number of objects that match this query @@ -392,13 +393,13 @@ class QueryBuilder { /// Builds the query relational for Parse String _buildQueryRelational(String className) { queries = _checkForMultipleColumnInstances(queries); - return '{\"where\":{${buildQueries(queries)}},\"className\":\"$className\"${getLimitersRelational(limiters)}}'; + return '{"where":{${buildQueries(queries)}},"className":"$className"${getLimitersRelational(limiters)}}'; } /// Builds the query relational with Key for Parse String _buildQueryRelationalKey(String className, String keyInQuery) { queries = _checkForMultipleColumnInstances(queries); - return '{\"query\":{\"className\":\"$className\",\"where\":{${buildQueries(queries)}}},\"key\":\"$keyInQuery\"}'; + return '{"query":{"className":"$className","where":{${buildQueries(queries)}}},"key":"$keyInQuery"}'; } /// Builds the query for Parse @@ -446,15 +447,14 @@ class QueryBuilder { if (queryOperator == _NO_OPERATOR_NEEDED) { return MapEntry( - _NO_OPERATOR_NEEDED, '\"$key\": ${jsonEncode(value)}'); + _NO_OPERATOR_NEEDED, '"$key": ${jsonEncode(value)}'); } else { - String queryString = '\"$key\":'; - final Map queryOperatorAndValueMap = - Map(); + String queryString = '"$key":'; + final Map queryOperatorAndValueMap = {}; queryOperatorAndValueMap[queryOperator] = parseEncode(value); final String formattedQueryOperatorAndValue = jsonEncode(queryOperatorAndValueMap); - queryString += '$formattedQueryOperatorAndValue'; + queryString += formattedQueryOperatorAndValue; return MapEntry(key, queryString); } } @@ -488,7 +488,7 @@ class QueryBuilder { .toList(); // Build first part of query - String queryStart = '\"${query.key}\":'; + String queryStart = '"${query.key}":'; String queryEnd = ''; // Compact all the queries in the correct format @@ -526,9 +526,9 @@ class QueryBuilder { String result = ''; map.forEach((String key, dynamic value) { if (result.isNotEmpty) { - result = result + ',\"$key":$value'; + result = result + ',"$key":$value'; } else { - result = '\"$key\":$value'; + result = '"$key":$value'; } }); return result; diff --git a/packages/dart/lib/src/objects/parse_base.dart b/packages/dart/lib/src/objects/parse_base.dart index 6521729d1..1edc5908c 100644 --- a/packages/dart/lib/src/objects/parse_base.dart +++ b/packages/dart/lib/src/objects/parse_base.dart @@ -3,11 +3,11 @@ part of flutter_parse_sdk; abstract class ParseBase { String parseClassName = 'ParseBase'; final bool _dirty = false; // reserved property - final Map _unsavedChanges = Map(); - final Map _savingChanges = Map(); + final Map _unsavedChanges = {}; + final Map _savingChanges = {}; /// Stores all the values of a class - Map _objectData = Map(); + Map _objectData = {}; /// Returns [String] objectId String? get objectId => get(keyVarObjectId); @@ -27,7 +27,7 @@ abstract class ParseBase { } if (considerChildren) { - return _areChildrenDirty(Set()); + return _areChildrenDirty({}); } return false; } diff --git a/packages/dart/lib/src/objects/parse_config.dart b/packages/dart/lib/src/objects/parse_config.dart index 1e0d85640..8df935d63 100644 --- a/packages/dart/lib/src/objects/parse_config.dart +++ b/packages/dart/lib/src/objects/parse_config.dart @@ -30,7 +30,7 @@ class ParseConfig extends ParseObject { try { final String uri = '${ParseCoreData().serverUrl}/config'; final String body = - '{\"params\":{\"$key\": ${json.encode(parseEncode(value))}}}'; + '{"params":{"$key": ${json.encode(parseEncode(value))}}}'; final ParseNetworkResponse result = await _client.put(uri, data: body); return handleResponse( this, result, ParseApiRQ.addConfig, _debug, parseClassName); diff --git a/packages/dart/lib/src/objects/parse_error.dart b/packages/dart/lib/src/objects/parse_error.dart index d450ba737..a13b32c5d 100644 --- a/packages/dart/lib/src/objects/parse_error.dart +++ b/packages/dart/lib/src/objects/parse_error.dart @@ -13,7 +13,7 @@ class ParseError { } } - Map _exceptions = { + static const Map _exceptions = { -1: 'UnknownError', // SDK errors / Errors diff --git a/packages/dart/lib/src/objects/parse_file.dart b/packages/dart/lib/src/objects/parse_file.dart index 35ed5c8fd..fe223d6fa 100644 --- a/packages/dart/lib/src/objects/parse_file.dart +++ b/packages/dart/lib/src/objects/parse_file.dart @@ -73,7 +73,7 @@ class ParseFile extends ParseFileBase { mime(file!.path) ?? 'application/octet-stream', }; try { - final String uri = ParseCoreData().serverUrl + '$_path'; + final String uri = ParseCoreData().serverUrl + _path; final ParseNetworkResponse response = await _client.postBytes( uri, options: ParseNetworkOptions(headers: headers), diff --git a/packages/dart/lib/src/objects/parse_file_web.dart b/packages/dart/lib/src/objects/parse_file_web.dart index 3a6a57398..2b1f050e1 100644 --- a/packages/dart/lib/src/objects/parse_file_web.dart +++ b/packages/dart/lib/src/objects/parse_file_web.dart @@ -53,7 +53,7 @@ class ParseWebFile extends ParseFileBase { mime(url ?? name) ?? 'application/octet-stream', }; try { - final String uri = ParseCoreData().serverUrl + '$_path'; + final String uri = ParseCoreData().serverUrl + _path; final ParseNetworkResponse response = await _client.postBytes( uri, options: ParseNetworkOptions(headers: headers), diff --git a/packages/dart/lib/src/objects/parse_object.dart b/packages/dart/lib/src/objects/parse_object.dart index 12b4f9985..3a2ee5728 100644 --- a/packages/dart/lib/src/objects/parse_object.dart +++ b/packages/dart/lib/src/objects/parse_object.dart @@ -49,7 +49,7 @@ class ParseObject extends ParseBase implements ParseCloneable { /// Gets all objects from this table - Limited response at the moment Future getAll() async { try { - final Uri url = getSanitisedUri(_client, '$_path'); + final Uri url = getSanitisedUri(_client, _path); final ParseNetworkResponse result = await _client.get(url.toString()); return handleResponse( this, result, ParseApiRQ.getAll, _debug, parseClassName); @@ -61,7 +61,7 @@ class ParseObject extends ParseBase implements ParseCloneable { /// Creates a new object and saves it online Future create({bool allowCustomObjectId = false}) async { try { - final Uri url = getSanitisedUri(_client, '$_path'); + final Uri url = getSanitisedUri(_client, _path); final String body = json.encode(toJson( forApiRQ: true, allowCustomObjectId: allowCustomObjectId, @@ -118,10 +118,10 @@ class ParseObject extends ParseBase implements ParseCloneable { } Future _saveChildren(dynamic object) async { - final Set uniqueObjects = Set(); - final Set uniqueFiles = Set(); - if (!_collectionDirtyChildren(object, uniqueObjects, uniqueFiles, - Set(), Set())) { + final Set uniqueObjects = {}; + final Set uniqueFiles = {}; + if (!_collectionDirtyChildren( + object, uniqueObjects, uniqueFiles, {}, {})) { final ParseResponse response = ParseResponse(); return response; } @@ -279,7 +279,7 @@ class ParseObject extends ParseBase implements ParseCloneable { /* Check for cycles of new objects. Any such cycle means it will be impossible to save this collection of objects, so throw an exception. */ if (object.objectId != null) { - seenNew = Set(); + seenNew = {}; } else { if (seenNew.contains(object)) { // TODO(yulingtianxia): throw an error? @@ -385,7 +385,7 @@ class ParseObject extends ParseBase implements ParseCloneable { try { if (objectId != null) { final Uri url = getSanitisedUri(_client, '$_path/$objectId'); - final String body = '{\"$key\":{\"__op\":\"Delete\"}}'; + final String body = '{"$key":{"__op":"Delete"}}'; final ParseNetworkResponse result = await _client.put(url.toString(), data: body); final ParseResponse response = handleResponse( @@ -411,7 +411,7 @@ class ParseObject extends ParseBase implements ParseCloneable { Future query(String query, {ProgressCallback? progressCallback}) async { try { - final Uri url = getSanitisedUri(_client, '$_path', query: query); + final Uri url = getSanitisedUri(_client, _path, query: query); final ParseNetworkResponse result = await _client.get( url.toString(), onReceiveProgress: progressCallback, @@ -425,7 +425,7 @@ class ParseObject extends ParseBase implements ParseCloneable { Future distinct(String query) async { try { - final Uri url = getSanitisedUri(_client, '$_aggregatepath', query: query); + final Uri url = getSanitisedUri(_client, _aggregatepath, query: query); final ParseNetworkResponse result = await _client.get(url.toString()); return handleResponse( this, result, ParseApiRQ.query, _debug, parseClassName); @@ -456,7 +456,7 @@ class ParseObject extends ParseBase implements ParseCloneable { throw 'can not fetch without a objectId'; } - final ParseResponse response = await this.getObject(this.objectId!); + final ParseResponse response = await getObject(objectId!); if (response.success && response.results != null) { return response.results!.first; diff --git a/packages/dart/lib/src/objects/parse_relation.dart b/packages/dart/lib/src/objects/parse_relation.dart index 2f3721f8f..7c117e5d4 100644 --- a/packages/dart/lib/src/objects/parse_relation.dart +++ b/packages/dart/lib/src/objects/parse_relation.dart @@ -26,7 +26,7 @@ class ParseRelation { //The key of the relation in the parent object. String _key = ''; //For offline caching, we keep track of every object we've known to be in the relation. - Set? _knownObjects = Set(); + Set? _knownObjects = {}; QueryBuilder getQuery() { return QueryBuilder(ParseObject(_targetClass!)) diff --git a/packages/dart/lib/src/objects/parse_user.dart b/packages/dart/lib/src/objects/parse_user.dart index dc386d9e6..63a24e9ef 100644 --- a/packages/dart/lib/src/objects/parse_user.dart +++ b/packages/dart/lib/src/objects/parse_user.dart @@ -130,7 +130,7 @@ class ParseUser extends ParseObject implements ParseCloneable { } try { - final Uri url = getSanitisedUri(_client, '$keyEndPointUserName'); + final Uri url = getSanitisedUri(_client, keyEndPointUserName); final ParseNetworkResponse response = await _client.get( url.toString(), options: ParseNetworkOptions(headers: headers), @@ -185,7 +185,7 @@ class ParseUser extends ParseObject implements ParseCloneable { } } - final Uri url = getSanitisedUri(_client, '$path'); + final Uri url = getSanitisedUri(_client, path); final String body = json.encode(toJson(forApiRQ: true)); _saveChanges(); final String? installationId = await _getInstallationId(); @@ -219,7 +219,7 @@ class ParseUser extends ParseObject implements ParseCloneable { keyVarPassword: password! }; final String? installationId = await _getInstallationId(); - final Uri url = getSanitisedUri(_client, '$keyEndPointLogin'); + final Uri url = getSanitisedUri(_client, keyEndPointLogin); _saveChanges(); final ParseNetworkResponse response = await _client.post( url.toString(), @@ -245,7 +245,7 @@ class ParseUser extends ParseObject implements ParseCloneable { {bool doNotSendInstallationID = false}) async { forgetLocalSession(); try { - final Uri url = getSanitisedUri(_client, '$keyEndPointUsers'); + final Uri url = getSanitisedUri(_client, keyEndPointUsers); const Uuid uuid = Uuid(); final String? installationId = await _getInstallationId(); @@ -290,7 +290,7 @@ class ParseUser extends ParseObject implements ParseCloneable { Future _loginWith(String provider, Object authData, {bool doNotSendInstallationID = false}) async { try { - final Uri url = getSanitisedUri(_client, '$keyEndPointUsers'); + final Uri url = getSanitisedUri(_client, keyEndPointUsers); final String? installationId = await _getInstallationId(); final Map body = toJson(forApiRQ: true); body['authData'] = {provider: authData}; @@ -324,7 +324,7 @@ class ParseUser extends ParseObject implements ParseCloneable { } try { - final Uri url = getSanitisedUri(_client, '$keyEndPointLogout'); + final Uri url = getSanitisedUri(_client, keyEndPointLogout); final ParseNetworkResponse response = await _client.post( url.toString(), options: ParseNetworkOptions( @@ -440,7 +440,7 @@ class ParseUser extends ParseObject implements ParseCloneable { securityContext: ParseCoreData().securityContext); try { - final Uri url = getSanitisedUri(_client, '$path'); + final Uri url = getSanitisedUri(_client, path); final ParseNetworkResponse response = await _client.get(url.toString()); final ParseResponse parseResponse = handleResponse( emptyUser, response, ParseApiRQ.getAll, _debug, keyClassUser); diff --git a/packages/dart/lib/src/objects/response/parse_exception_response.dart b/packages/dart/lib/src/objects/response/parse_exception_response.dart index f2e6faf19..aea23d599 100644 --- a/packages/dart/lib/src/objects/response/parse_exception_response.dart +++ b/packages/dart/lib/src/objects/response/parse_exception_response.dart @@ -24,5 +24,4 @@ ParseResponse buildParseResponseWithException(Exception exception) { return ParseResponse( error: ParseError(message: exception.toString(), exception: exception)); - ; } diff --git a/packages/dart/lib/src/objects/response/parse_response_builder.dart b/packages/dart/lib/src/objects/response/parse_response_builder.dart index dec3e91b9..d36d8dd98 100644 --- a/packages/dart/lib/src/objects/response/parse_response_builder.dart +++ b/packages/dart/lib/src/objects/response/parse_response_builder.dart @@ -79,11 +79,11 @@ class _ParseResponseBuilder { } } } - } else if (result is Map) { - final Map map = result as Map; + } else if (result is Map) { + final Map map = result; if (object is Parse) { response.result = map; - } else if (map != null && map.length == 1 && map.containsKey('results')) { + } else if (map.length == 1 && map.containsKey('results')) { final List results = map['results']; if (results[0] is String) { response.results = results; @@ -95,7 +95,7 @@ class _ParseResponseBuilder { response.result = items; response.count = items.length; } - } else if (map != null && map.length == 2 && map.containsKey('count')) { + } else if (map.length == 2 && map.containsKey('count')) { final List results = [map['count']]; response.results = results; response.result = results; @@ -127,7 +127,7 @@ class _ParseResponseBuilder { return object.clone(map); } else if (object is ParseObject) { // Merge unsaved changes and response. - final Map unsaved = Map(); + final Map unsaved = {}; unsaved.addAll(object._unsavedChanges); unsaved.forEach((String k, dynamic v) { if (map[k] != null && map[k] != v) { @@ -145,6 +145,6 @@ class _ParseResponseBuilder { } bool isHealthCheck(ParseNetworkResponse apiResponse) { - return ['{\"status\":\"ok\"}', 'OK'].contains(apiResponse.data); + return ['{"status":"ok"}', 'OK'].contains(apiResponse.data); } } diff --git a/packages/dart/lib/src/utils/parse_decoder.dart b/packages/dart/lib/src/utils/parse_decoder.dart index b3f14c1a6..331f1173a 100644 --- a/packages/dart/lib/src/utils/parse_decoder.dart +++ b/packages/dart/lib/src/utils/parse_decoder.dart @@ -9,7 +9,7 @@ List _convertJSONArrayToList(List array) { } Map _convertJSONObjectToMap(Map object) { - final Map map = Map(); + final Map map = {}; object.forEach((String key, dynamic value) { map.putIfAbsent(key, () => parseDecode(value)); }); @@ -38,7 +38,7 @@ dynamic parseDecode(dynamic value) { return value; } - if (!(value is Map)) { + if (value is! Map) { return value; } diff --git a/packages/dart/lib/src/utils/parse_live_list.dart b/packages/dart/lib/src/utils/parse_live_list.dart index fb6a74cd5..5547d62e5 100644 --- a/packages/dart/lib/src/utils/parse_live_list.dart +++ b/packages/dart/lib/src/utils/parse_live_list.dart @@ -129,11 +129,12 @@ class ParseLiveList { Future _runQuery() async { final QueryBuilder query = QueryBuilder.copy(_query); - if (_debug) + if (_debug) { print('ParseLiveList: lazyLoading is ${_lazyLoading ? 'on' : 'off'}'); + } if (_lazyLoading) { final List keys = _preloadedColumns.toList(); - if (_lazyLoading && query.limiters.containsKey('order')) + if (_lazyLoading && query.limiters.containsKey('order')) { keys.addAll( query.limiters['order'].toString().split(',').map((String string) { if (string.startsWith('-')) { @@ -142,6 +143,7 @@ class ParseLiveList { return string; }), ); + } query.keysToReturn(keys); } return await query.query(); @@ -556,7 +558,7 @@ class ParseLiveListElement { {bool loaded = false, Map? updatedSubItems}) : _loaded = loaded { _updatedSubItems = - _toSubscriptionMap(updatedSubItems ?? Map()); + _toSubscriptionMap(updatedSubItems ?? {}); if (_updatedSubItems.isNotEmpty) { _liveQuery = LiveQuery(); _subscribe(); @@ -575,7 +577,7 @@ class ParseLiveListElement { T get object => _object.clone(_object.toJson(full: true)); Map _toSubscriptionMap(Map map) { - final Map result = Map(); + final Map result = {}; for (String key in map.keys) { result.putIfAbsent(PathKey(key), () => _toSubscriptionMap(map[key])); } @@ -583,7 +585,7 @@ class ParseLiveListElement { } Map _toKeyMap(Map map) { - final Map result = Map(); + final Map result = {}; for (PathKey key in map.keys) { result.putIfAbsent(key.key, () => _toKeyMap(map[key])); } diff --git a/packages/flutter/example/lib/data/repositories/diet_plan/provider_api_diet_plan.dart b/packages/flutter/example/lib/data/repositories/diet_plan/provider_api_diet_plan.dart index 41583c797..e5aed5100 100644 --- a/packages/flutter/example/lib/data/repositories/diet_plan/provider_api_diet_plan.dart +++ b/packages/flutter/example/lib/data/repositories/diet_plan/provider_api_diet_plan.dart @@ -13,7 +13,7 @@ class DietPlanProviderApi implements DietPlanProviderContract { @override Future addAll(List items) async { - final List responses = List(); + final List responses = []; for (final DietPlan item in items) { final ApiResponse response = await add(item); @@ -57,7 +57,7 @@ class DietPlanProviderApi implements DietPlanProviderContract { @override Future updateAll(List items) async { - final List responses = List(); + final List responses = []; for (final DietPlan item in items) { final ApiResponse response = await update(item); diff --git a/packages/flutter/example/lib/data/repositories/diet_plan/provider_db_diet_plan.dart b/packages/flutter/example/lib/data/repositories/diet_plan/provider_db_diet_plan.dart index 4528ead5f..97a0e412b 100644 --- a/packages/flutter/example/lib/data/repositories/diet_plan/provider_db_diet_plan.dart +++ b/packages/flutter/example/lib/data/repositories/diet_plan/provider_db_diet_plan.dart @@ -26,7 +26,7 @@ class DietPlanProviderDB implements DietPlanProviderContract { @override Future addAll(List items) async { - final List itemsInDb = List(); + final List itemsInDb = []; for (final DietPlan item in items) { final ApiResponse response = await add(item); @@ -45,9 +45,9 @@ class DietPlanProviderDB implements DietPlanProviderContract { @override Future getAll() async { - final List foodItems = List(); + final List foodItems = []; - final List sortOrders = List(); + final List sortOrders = []; sortOrders.add(SortOrder(keyName)); final Finder finder = Finder(sortOrders: sortOrders); final List>> records = @@ -82,7 +82,7 @@ class DietPlanProviderDB implements DietPlanProviderContract { @override Future getNewerThan(DateTime date) async { - final List foodItems = List(); + final List foodItems = []; final Finder finder = Finder( filter: @@ -113,7 +113,7 @@ class DietPlanProviderDB implements DietPlanProviderContract { @override Future updateAll(List items) async { - final List updatedItems = List(); + final List updatedItems = []; for (final DietPlan item in items) { final ApiResponse response = await update(item); @@ -145,7 +145,7 @@ class DietPlanProviderDB implements DietPlanProviderContract { } Map convertItemToStorageMap(DietPlan item) { - final Map values = Map(); + final Map values = {}; // ignore: invalid_use_of_protected_member values['value'] = json.jsonEncode(item.toJson(full: true)); values[keyVarObjectId] = item.objectId; diff --git a/packages/flutter/example/lib/data/repositories/user/provider_db_user.dart b/packages/flutter/example/lib/data/repositories/user/provider_db_user.dart index be2a615bb..c40e3b368 100644 --- a/packages/flutter/example/lib/data/repositories/user/provider_db_user.dart +++ b/packages/flutter/example/lib/data/repositories/user/provider_db_user.dart @@ -82,7 +82,7 @@ class UserProviderDB implements UserProviderContract { void logout(User user) {} Map convertItemToStorageMap(User item) { - final Map values = Map(); + final Map values = {}; // ignore: invalid_use_of_protected_member values['value'] = json.jsonEncode(item.toJson(full: true)); values[keyVarObjectId] = item.objectId; diff --git a/packages/flutter/example/lib/main.dart b/packages/flutter/example/lib/main.dart index 003b9d850..cabbc552e 100644 --- a/packages/flutter/example/lib/main.dart +++ b/packages/flutter/example/lib/main.dart @@ -1,3 +1,5 @@ +// ignore_for_file: avoid_print + import 'dart:convert'; import 'dart:io'; @@ -16,7 +18,7 @@ import 'package:parse_server_sdk_flutter/parse_server_sdk.dart'; void main() { _setTargetPlatformForDesktop(); - runApp(MyApp()); + runApp(const MyApp()); } void _setTargetPlatformForDesktop() { @@ -33,6 +35,8 @@ void _setTargetPlatformForDesktop() { } class MyApp extends StatefulWidget { + const MyApp({Key key}) : super(key: key); + @override _MyAppState createState() => _MyAppState(); } @@ -56,7 +60,7 @@ class _MyAppState extends State { appBar: AppBar( title: const Text('Plugin example app'), ), - body: Center( + body: const Center( //child: Text(text), child: DecisionPage(), //child: HomePage(), diff --git a/packages/flutter/example/lib/pages/decision_page.dart b/packages/flutter/example/lib/pages/decision_page.dart index 33788cfd6..da97929b9 100644 --- a/packages/flutter/example/lib/pages/decision_page.dart +++ b/packages/flutter/example/lib/pages/decision_page.dart @@ -7,6 +7,8 @@ import 'home_page.dart'; import 'login_page.dart'; class DecisionPage extends StatefulWidget { + const DecisionPage({Key key}) : super(key: key); + @override _DecisionPageState createState() => _DecisionPageState(); } @@ -26,20 +28,18 @@ class _DecisionPageState extends State { Widget build(BuildContext context) { return Scaffold( body: Center( - child: Container( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - _showLogo(), - const SizedBox( - height: 20, - ), - Center( - child: Text(_parseServerState), - ), - ], - ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + _showLogo(), + const SizedBox( + height: 20, + ), + Center( + child: Text(_parseServerState), + ), + ], ), ), ); @@ -69,7 +69,7 @@ class _DecisionPageState extends State { if (user != null) { _redirectToPage(context, HomePage(DietPlanProviderApi())); } else { - _redirectToPage(context, LoginPage()); + _redirectToPage(context, const LoginPage()); } } else { setState(() { diff --git a/packages/flutter/example/lib/pages/home_page.dart b/packages/flutter/example/lib/pages/home_page.dart index 4515e9f7f..31298dec3 100644 --- a/packages/flutter/example/lib/pages/home_page.dart +++ b/packages/flutter/example/lib/pages/home_page.dart @@ -8,7 +8,7 @@ import 'package:flutter_plugin_example/data/repositories/diet_plan/contract_prov import 'package:parse_server_sdk/parse_server_sdk.dart'; class HomePage extends StatefulWidget { - const HomePage(this._dietPlanProvider); + const HomePage(this._dietPlanProvider, {Key key}) : super(key: key); final DietPlanProviderContract _dietPlanProvider; @@ -40,7 +40,7 @@ class _HomePageState extends State { automaticallyImplyLeading: false, title: const Text('Parse Server demo'), actions: [ - FlatButton( + TextButton( child: const Text('Logout', style: TextStyle(fontSize: 17.0, color: Colors.white)), onPressed: () async { diff --git a/packages/flutter/example/lib/pages/login_page.dart b/packages/flutter/example/lib/pages/login_page.dart index 54d3fc84e..c91ab0286 100644 --- a/packages/flutter/example/lib/pages/login_page.dart +++ b/packages/flutter/example/lib/pages/login_page.dart @@ -1,10 +1,14 @@ +// ignore_for_file: avoid_print + import 'package:flutter/material.dart'; import 'package:flutter_plugin_example/data/model/user.dart'; import 'package:parse_server_sdk/parse_server_sdk.dart'; -enum FormMode { LOGIN, SIGNUP } +enum FormMode { login, signUp } class LoginPage extends StatefulWidget { + const LoginPage({Key key}) : super(key: key); + @override _LoginPageState createState() => _LoginPageState(); } @@ -17,7 +21,7 @@ class _LoginPageState extends State { String _errorMessage; // Initial form is login form - FormMode _formMode = FormMode.LOGIN; + FormMode _formMode = FormMode.login; bool _isLoading; // Check if form is valid before perform login or signup @@ -41,7 +45,7 @@ class _LoginPageState extends State { ParseResponse response; try { - if (_formMode == FormMode.LOGIN) { + if (_formMode == FormMode.login) { response = await user.login(); print('Signed in'); } else { @@ -52,7 +56,7 @@ class _LoginPageState extends State { _isLoading = false; }); if (response.success) { - if (_formMode == FormMode.LOGIN) { + if (_formMode == FormMode.login) { Navigator.pop(context, true); } } else { @@ -82,7 +86,7 @@ class _LoginPageState extends State { _formKey.currentState.reset(); _errorMessage = ''; setState(() { - _formMode = FormMode.SIGNUP; + _formMode = FormMode.signUp; }); } @@ -90,7 +94,7 @@ class _LoginPageState extends State { _formKey.currentState.reset(); _errorMessage = ''; setState(() { - _formMode = FormMode.LOGIN; + _formMode = FormMode.login; }); } @@ -116,7 +120,7 @@ class _LoginPageState extends State { if (_isLoading) { return const Center(child: CircularProgressIndicator()); } - return Container( + return const SizedBox( height: 0.0, width: 0.0, ); @@ -213,13 +217,13 @@ class _LoginPageState extends State { } Widget _showSecondaryButton() { - return FlatButton( - child: _formMode == FormMode.LOGIN + return TextButton( + child: _formMode == FormMode.login ? const Text('Create an account', style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.w300)) : const Text('Have an account? Sign in', style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.w300)), - onPressed: _formMode == FormMode.LOGIN + onPressed: _formMode == FormMode.login ? _changeFormToSignUp : _changeFormToLogin, ); @@ -230,12 +234,14 @@ class _LoginPageState extends State { padding: const EdgeInsets.fromLTRB(0.0, 45.0, 0.0, 0.0), child: SizedBox( height: 40.0, - child: RaisedButton( - elevation: 5.0, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(30.0)), - color: Colors.blue, - child: _formMode == FormMode.LOGIN + child: ElevatedButton( + style: ElevatedButton.styleFrom( + primary: Colors.blue, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(30.0)), + elevation: 5.0, + ), + child: _formMode == FormMode.login ? const Text('Login', style: TextStyle(fontSize: 20.0, color: Colors.white)) : const Text('Create account', diff --git a/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_api_test.dart b/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_api_test.dart index a0f95f909..dcd1a9d68 100644 --- a/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_api_test.dart +++ b/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_api_test.dart @@ -10,7 +10,7 @@ import '../repository_mock_utils.dart'; // ignore_for_file: invalid_use_of_protected_member void main() { DietPlanProviderContract repository; - SharedPreferences.setMockInitialValues(Map()); + SharedPreferences.setMockInitialValues({}); Future getRepository() async { repository ??= DietPlanProviderApi(); @@ -49,7 +49,7 @@ void main() { test('addAll DietPlan from API', () async { // Given - final List actual = List(); + final List actual = []; final DietPlan item1 = getDummyDietPlan(); item1['objectId'] = null; item1.protein = 5; @@ -117,7 +117,7 @@ void main() { }); test('getAll DietPlan from API', () async { - final List actual = List(); + final List actual = []; final DietPlan item1 = getDummyDietPlan(); item1['objectId'] = null; @@ -162,7 +162,7 @@ void main() { test('updateAll DietPlan from API', () async { // Given - final List actual = List(); + final List actual = []; final DietPlan item1 = getDummyDietPlan(); item1['objectId'] = null; diff --git a/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_db_test.dart b/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_db_test.dart index 89c99187b..3c5cc9523 100644 --- a/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_db_test.dart +++ b/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_db_test.dart @@ -11,7 +11,7 @@ import '../repository_mock_utils.dart'; void main() { DietPlanProviderContract repository; - SharedPreferences.setMockInitialValues(Map()); + SharedPreferences.setMockInitialValues({}); StoreRef> _getStore(Database database) { final StoreRef> store = @@ -61,7 +61,7 @@ void main() { test('addAll DietPlan from DB', () async { // Given const String objectIdPrefix = '12345abc'; - final List actual = List(); + final List actual = []; final DietPlan item1 = getDummyDietPlan(); item1.objectId = '${objectIdPrefix}0'; @@ -104,9 +104,7 @@ void main() { const String objectIdPrefix = '12345abc'; final DietPlan item1 = getDummyDietPlan()..objectId = '${objectIdPrefix}0'; final DietPlan item2 = getDummyDietPlan()..objectId = '${objectIdPrefix}1'; - final List actual = List() - ..add(item1) - ..add(item2); + final List actual = [item1, item2]; // When final ApiResponse response = await repository.addAll(actual); @@ -170,7 +168,7 @@ void main() { // Given const String objectIdPrefix = '12345abc'; - final List actual = List(); + final List actual = []; final DietPlan item1 = getDummyDietPlan(); item1.objectId = '${objectIdPrefix}0'; actual.add(item1); diff --git a/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_test.dart b/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_test.dart index 540d32016..4d959c1db 100644 --- a/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_test.dart +++ b/packages/flutter/example/test/data/repository/diet_plan/repository_diet_plan_test.dart @@ -10,7 +10,7 @@ import '../repository_mock_utils.dart'; void main() { DietPlanRepository repository; - SharedPreferences.setMockInitialValues(Map()); + SharedPreferences.setMockInitialValues({}); DietPlanProviderContract apiRepository; DietPlanProviderContract dbRepository; @@ -21,9 +21,7 @@ void main() { const String objectIdPrefix = '12345abc'; final DietPlan item1 = getDummyDietPlan()..objectId = '${objectIdPrefix}0'; final DietPlan item2 = getDummyDietPlan()..objectId = '${objectIdPrefix}1'; - final List mockList = List() - ..add(item1) - ..add(item2); + final List mockList = [item1, item2]; when(repositoryApi.add(any)).thenAnswer((_) async => Future.value( diff --git a/packages/flutter/example_livelist/lib/main.dart b/packages/flutter/example_livelist/lib/main.dart index f7c709189..c9881962e 100644 --- a/packages/flutter/example_livelist/lib/main.dart +++ b/packages/flutter/example_livelist/lib/main.dart @@ -3,9 +3,11 @@ import 'package:parse_server_sdk_flutter/parse_server_sdk.dart'; import 'application_constants.dart'; -void main() => runApp(MyApp()); +void main() => runApp(const MyApp()); class MyApp extends StatefulWidget { + const MyApp({Key? key}) : super(key: key); + @override _MyAppState createState() => _MyAppState(); } @@ -21,10 +23,11 @@ class _MyAppState extends State { initData().then((bool success) { setState(() { initFailed = !success; - if (success) + if (success) { _queryBuilder = QueryBuilder(ParseObject('Test')) ..orderByAscending('order') ..whereNotEqualTo('show', false); + } }); }).catchError((dynamic _) { setState(() { diff --git a/packages/flutter/lib/parse_server_sdk.dart b/packages/flutter/lib/parse_server_sdk.dart index 8844aa7f4..a13cc55c1 100644 --- a/packages/flutter/lib/parse_server_sdk.dart +++ b/packages/flutter/lib/parse_server_sdk.dart @@ -6,7 +6,6 @@ import 'dart:ui' as ui; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:parse_server_sdk/parse_server_sdk.dart' as sdk; import 'package:path/path.dart' as path; diff --git a/packages/flutter/lib/src/utils/parse_live_list.dart b/packages/flutter/lib/src/utils/parse_live_list.dart index 9cea74101..fa270a3b2 100644 --- a/packages/flutter/lib/src/utils/parse_live_list.dart +++ b/packages/flutter/lib/src/utils/parse_live_list.dart @@ -232,8 +232,7 @@ class ParseLiveListElementWidget } class _ParseLiveListElementWidgetState - extends State> - with SingleTickerProviderStateMixin { + extends State> { _ParseLiveListElementWidgetState(DataGetter? loadedDataGetter, DataGetter? preLoadedDataGetter, StreamGetter? stream) { _snapshot = sdk.ParseLiveListElementSnapshot( @@ -284,7 +283,6 @@ class _ParseLiveListElementWidgetState sizeFactor: widget.sizeFactor, child: AnimatedSize( duration: widget.duration, - vsync: this, child: widget.childBuilder(context, _snapshot), ), ); diff --git a/packages/flutter/test/parse_client_configuration_test.dart b/packages/flutter/test/parse_client_configuration_test.dart index f2de6b5cc..6d4f38b95 100644 --- a/packages/flutter/test/parse_client_configuration_test.dart +++ b/packages/flutter/test/parse_client_configuration_test.dart @@ -3,7 +3,7 @@ import 'package:parse_server_sdk_flutter/parse_server_sdk.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() { - SharedPreferences.setMockInitialValues(Map()); + SharedPreferences.setMockInitialValues({}); test('testBuilder', () async { await Parse().initialize('appId', 'serverUrl', From cead996781bfad04395a0ef415e30d17d361f499 Mon Sep 17 00:00:00 2001 From: Maximilian Fischer Date: Fri, 20 May 2022 16:15:01 +0200 Subject: [PATCH 07/10] Avoid a breaking change Continue using vsync in _ParseLiveListElementWidgetState to avoid a breaking change. --- packages/flutter/lib/src/utils/parse_live_list.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/utils/parse_live_list.dart b/packages/flutter/lib/src/utils/parse_live_list.dart index fa270a3b2..7c52b4678 100644 --- a/packages/flutter/lib/src/utils/parse_live_list.dart +++ b/packages/flutter/lib/src/utils/parse_live_list.dart @@ -232,7 +232,8 @@ class ParseLiveListElementWidget } class _ParseLiveListElementWidgetState - extends State> { + extends State> + with SingleTickerProviderStateMixin { _ParseLiveListElementWidgetState(DataGetter? loadedDataGetter, DataGetter? preLoadedDataGetter, StreamGetter? stream) { _snapshot = sdk.ParseLiveListElementSnapshot( @@ -284,6 +285,8 @@ class _ParseLiveListElementWidgetState child: AnimatedSize( duration: widget.duration, child: widget.childBuilder(context, _snapshot), + // ignore: deprecated_member_use + vsync: this, ), ); return result; From 31d745d06e634abcdb5afb02e26f4d1dd9395f67 Mon Sep 17 00:00:00 2001 From: Maximilian Fischer Date: Fri, 20 May 2022 16:26:27 +0200 Subject: [PATCH 08/10] Fix CI --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a285db9cf..f56045a45 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -121,7 +121,7 @@ jobs: working-directory: packages/dart run: | dart pub global activate coverage - dart pub global run coverage:format_coverage -i coverage/test -o coverage/lcov.info --lcov --packages=.packages --report-on=lib + dart pub global run coverage:format_coverage -i coverage/test -o coverage/lcov.info --lcov --packages=.dart_tool/package_config.json --report-on=lib - name: Upload code coverage uses: codecov/codecov-action@v2 # Needs to be adapted to collect the coverage at all platforms if platform specific code is added. From eb7a2d7937eb05ca2bf35645accb6962f390b801 Mon Sep 17 00:00:00 2001 From: Maximilian Fischer Date: Mon, 30 May 2022 20:38:38 +0200 Subject: [PATCH 09/10] add changelog --- packages/dart/CHANGELOG.md | 4 ++++ packages/flutter/CHANGELOG.md | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/packages/dart/CHANGELOG.md b/packages/dart/CHANGELOG.md index 29796722d..54f8f6fcd 100644 --- a/packages/dart/CHANGELOG.md +++ b/packages/dart/CHANGELOG.md @@ -5,6 +5,10 @@ * General improvements * Updated dependencies +### Refactoring + +* fix analyzer code style warnings ([#733](https://github.com/parse-community/Parse-SDK-Flutter/issues/733)) + # [3.0.0](https://github.com/parse-community/Parse-SDK-Flutter/compare/2.1.0...V3.0.0) (2021-04-14) ### Bug Fixes diff --git a/packages/flutter/CHANGELOG.md b/packages/flutter/CHANGELOG.md index 25ba814f6..c21c14e6c 100644 --- a/packages/flutter/CHANGELOG.md +++ b/packages/flutter/CHANGELOG.md @@ -4,6 +4,10 @@ * update example app to use Android embedding v2 ([#722](https://github.com/parse-community/Parse-SDK-Flutter/issues/722)) ([e092189](https://github.com/parse-community/Parse-SDK-Flutter/commit/e092189cb666c25b3e2c9dbbf95316e9cfa88e72)) +### Refactoring + +* fix analyzer code style warnings ([#733](https://github.com/parse-community/Parse-SDK-Flutter/issues/733)) + # [3.1.0](https://github.com/parse-community/Parse-SDK-Flutter/compare/V3.0.0...V3.1.0) (2021-06-28) ### Bug Fixes From aa7c8dfcfe988f7735392f84e1a3b8ab37a689d3 Mon Sep 17 00:00:00 2001 From: Maximilian Fischer Date: Mon, 30 May 2022 21:17:29 +0200 Subject: [PATCH 10/10] changelog --- packages/dart/CHANGELOG.md | 10 ++++++---- packages/flutter/CHANGELOG.md | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/dart/CHANGELOG.md b/packages/dart/CHANGELOG.md index 54f8f6fcd..992a0722c 100644 --- a/packages/dart/CHANGELOG.md +++ b/packages/dart/CHANGELOG.md @@ -1,3 +1,9 @@ +## [3.1.1](https://github.com/parse-community/Parse-SDK-Flutter/compare/V3.1.0...dart-3.1.1) + +### Refactor + +* fix analyzer code style warnings ([#733](https://github.com/parse-community/Parse-SDK-Flutter/issues/733)) + # [3.1.0](https://github.com/parse-community/Parse-SDK-Flutter/compare/V3.0.0...V3.1.0) (2021-06-28) ### Bug Fixes @@ -5,10 +11,6 @@ * General improvements * Updated dependencies -### Refactoring - -* fix analyzer code style warnings ([#733](https://github.com/parse-community/Parse-SDK-Flutter/issues/733)) - # [3.0.0](https://github.com/parse-community/Parse-SDK-Flutter/compare/2.1.0...V3.0.0) (2021-04-14) ### Bug Fixes diff --git a/packages/flutter/CHANGELOG.md b/packages/flutter/CHANGELOG.md index c21c14e6c..6e2491075 100644 --- a/packages/flutter/CHANGELOG.md +++ b/packages/flutter/CHANGELOG.md @@ -1,13 +1,15 @@ +## [3.1.2](https://github.com/parse-community/Parse-SDK-Flutter/compare/flutter-3.1.1...flutter-3.1.2) + +### Refactoring + +* fix analyzer code style warnings ([#733](https://github.com/parse-community/Parse-SDK-Flutter/issues/733)) + ## [3.1.1](https://github.com/parse-community/Parse-SDK-Flutter/compare/V3.1.0...flutter-3.1.1) (2022-05-29) ### Bug Fixes * update example app to use Android embedding v2 ([#722](https://github.com/parse-community/Parse-SDK-Flutter/issues/722)) ([e092189](https://github.com/parse-community/Parse-SDK-Flutter/commit/e092189cb666c25b3e2c9dbbf95316e9cfa88e72)) -### Refactoring - -* fix analyzer code style warnings ([#733](https://github.com/parse-community/Parse-SDK-Flutter/issues/733)) - # [3.1.0](https://github.com/parse-community/Parse-SDK-Flutter/compare/V3.0.0...V3.1.0) (2021-06-28) ### Bug Fixes