firebase / flutterfire

šŸ”„ A collection of Firebase plugins for Flutter apps.
https://firebase.google.com/docs/flutter/setup
BSD 3-Clause "New" or "Revised" License
8.58k stars 3.94k forks source link

šŸ› [firebase_database] Incorrect results on .get when a .listen is active on a parent path #11983

Closed mrares closed 8 months ago

mrares commented 8 months ago

Bug report

When a listener is attached to a path, any calls to get() data on a child path actually return the content of the listened to parent path instead (of the more "specific" child path).

This behaviour happens on iOS, in an iPhone 15 Pro Max Simulator running iOS 17.0, on a Mac Mini M1 running macOS 14.1.

! This report is related, and possibly a duplicate of #10145

Steps to reproduce

Create a structure in RDB of the form:

{"parent": {
    "child1": {
        "child2": {
            "data": "somedata"
        }
    }
}}

Then:

// Set up a listener (this should be done eg in a TextButton)
ref.child("parent").onValue.listen((event) {
    log("OnValue Event: ${event.snapshot.value}");
 }

// LATER, trigger a get from a child path, eg. in another TextButton
ref.child("parent/child1/child2").get().then((value) {
    log("Got value: ${value.value}");
});

Note: this behaviour isn't encountered if the calls are made in a single function, sequentially, but happens all the time if they are called "asynchronously" from user interaction.

Extra: If you call store the subscription in a variable like a StreamSubscription<DatabaseEvent>? sub; and then you call sub.cancel() (from yet another TextButton) the expected behaviour returns to normal.

Expected behaviour

the get() call should return:

{"data": "somedata"}

Instead it returns the data of the parent path that the listener is attached to:

{
    "child1": {
        "child2": {
            "data": "somedata"
        }
    }
}

If the subscription is cancelled then the get() calls return the correct data, until the subscription is re-created, then the bug returns.

Flutter doctor

Run flutter doctor and paste the output below:

Click To Expand ``` Doctor summary (to see all details, run flutter doctor -v): [āœ“] Flutter (Channel stable, 3.16.2, on macOS 14.1 23B74 darwin-arm64, locale en-GB) [āœ“] Android toolchain - develop for Android devices (Android SDK version 34.0.0) [āœ“] Xcode - develop for iOS and macOS (Xcode 15.0.1) [āœ“] Chrome - develop for the web [āœ“] Android Studio (version 2022.3) [āœ“] VS Code (version 1.84.2) [āœ“] Connected device (3 available) [āœ“] Network resources ā€¢ No issues found! ```

Flutter dependencies

Run flutter pub deps -- --style=compact and paste the output below:

Click To Expand ``` Dart SDK 3.2.2 Flutter SDK 3.16.2 re_lab 1.0.0+1 dependencies: - auto_route 7.8.4 [flutter path collection meta] - badges 3.1.2 [flutter] - chopper 7.0.9 [equatable http logging meta] - crypto 3.0.3 [typed_data] - cupertino_icons 1.0.6 - firebase_analytics 10.7.2 [firebase_analytics_platform_interface firebase_analytics_web firebase_core firebase_core_platform_interface flutter] - firebase_auth 4.15.0 [firebase_auth_platform_interface firebase_auth_web firebase_core firebase_core_platform_interface flutter meta] - firebase_core 2.24.0 [firebase_core_platform_interface firebase_core_web flutter meta] - firebase_crashlytics 3.4.6 [firebase_core firebase_core_platform_interface firebase_crashlytics_platform_interface flutter stack_trace] - firebase_database 10.3.6 [firebase_core firebase_core_platform_interface firebase_database_platform_interface firebase_database_web flutter] - firebase_messaging 14.7.6 [firebase_core firebase_core_platform_interface firebase_messaging_platform_interface firebase_messaging_web flutter meta] - firebase_remote_config 4.3.6 [firebase_core firebase_core_platform_interface firebase_remote_config_platform_interface firebase_remote_config_web flutter] - flutter 0.0.0 [characters collection material_color_utilities meta vector_math web sky_engine] - flutter_markdown 0.6.18+2 [flutter markdown meta path] - flutter_riverpod 2.4.9 [collection flutter meta riverpod state_notifier] - flutter_signin_button 2.0.0 [flutter font_awesome_flutter] - get_it 7.6.4 [async collection] - google_fonts 6.1.0 [flutter http path_provider crypto] - google_sign_in 6.1.6 [flutter google_sign_in_android google_sign_in_ios google_sign_in_platform_interface google_sign_in_web] - http 1.1.2 [async http_parser meta web] - json_annotation 4.8.1 [meta] - localstorage 4.0.1+4 [flutter path_provider] - markdown 7.1.1 [args meta] - sign_in_with_apple 5.0.0 [flutter meta sign_in_with_apple_platform_interface sign_in_with_apple_web] - template_expressions 3.1.5 [convert crypto encrypt fake_async intl json_class json_path logging meta petitparser pointycastle quiver rxdart yaon] - uuid 4.2.1 [crypto sprintf meta] - video_player 2.8.1 [flutter html video_player_android video_player_avfoundation video_player_platform_interface video_player_web] dev dependencies: - auto_route_generator 7.3.2 [build source_gen analyzer path build_runner code_builder dart_style xml args glob auto_route] - build_runner 2.4.7 [analyzer args async build build_config build_daemon build_resolvers build_runner_core code_builder collection crypto dart_style frontend_server_client glob graphs http_multi_server io js logging meta mime package_config path pool pub_semver pubspec_parse shelf shelf_web_socket stack_trace stream_transform timing watcher web_socket_channel yaml] - chopper_generator 7.0.6 [analyzer build built_collection chopper code_builder dart_style logging meta source_gen] - flutter_lints 3.0.1 [lints] - flutter_test 0.0.0 [flutter test_api matcher path fake_async clock stack_trace vector_math async boolean_selector characters collection material_color_utilities meta source_span stream_channel string_scanner term_glyph web] - json_serializable 6.7.1 [analyzer async build build_config collection json_annotation meta path pub_semver pubspec_parse source_gen source_helper] - riverpod_generator 2.3.9 [analyzer build build_config collection crypto meta path riverpod_analyzer_utils riverpod_annotation source_gen] - swagger_dart_code_generator 2.13.2 [build path markdown recase json_annotation universal_io collection dart_style code_builder http yaml] transitive dependencies: - _fe_analyzer_shared 64.0.0 [meta] - _flutterfire_internals 1.3.14 [collection firebase_core firebase_core_platform_interface flutter meta] - analyzer 6.2.0 [_fe_analyzer_shared collection convert crypto glob meta package_config path pub_semver source_span watcher yaml] - analyzer_plugin 0.11.3 [analyzer collection dart_style pub_semver yaml] - args 2.4.2 - asn1lib 1.5.0 - async 2.11.0 [collection meta] - boolean_selector 2.1.1 [source_span string_scanner] - build 2.4.1 [analyzer async convert crypto glob logging meta package_config path] - build_config 1.1.1 [checked_yaml json_annotation path pubspec_parse yaml] - build_daemon 4.0.1 [built_collection built_value crypto http_multi_server logging path pool shelf shelf_web_socket stream_transform watcher web_socket_channel] - build_resolvers 2.4.1 [analyzer async build collection convert crypto graphs logging package_config path pool pub_semver stream_transform yaml] - build_runner_core 7.2.11 [async build build_config build_resolvers collection convert crypto glob graphs json_annotation logging meta package_config path pool timing watcher yaml] - built_collection 5.1.1 - built_value 8.8.0 [built_collection collection fixnum meta] - characters 1.3.0 - checked_yaml 2.0.3 [json_annotation source_span yaml] - ci 0.1.0 - cli_util 0.4.0 [meta path] - clock 1.1.1 - code_builder 4.8.0 [built_collection built_value collection matcher meta] - collection 1.18.0 - convert 3.1.1 [typed_data] - csslib 1.0.0 [source_span] - custom_lint 0.5.7 [analyzer analyzer_plugin args async ci cli_util collection freezed_annotation json_annotation meta package_config path pub_semver pubspec_parse rxdart uuid yaml] - custom_lint_core 0.5.7 [analyzer analyzer_plugin collection custom_lint matcher meta path pubspec_parse source_span yaml] - dart_style 2.3.4 [analyzer args collection path pub_semver source_span] - encrypt 5.0.3 [args asn1lib clock collection crypto pointycastle] - equatable 2.0.5 [collection meta] - fake_async 1.3.1 [clock collection] - ffi 2.1.0 - file 7.0.0 [meta path] - firebase_analytics_platform_interface 3.8.2 [_flutterfire_internals firebase_core flutter meta plugin_platform_interface] - firebase_analytics_web 0.5.5+9 [_flutterfire_internals firebase_analytics_platform_interface firebase_core firebase_core_web flutter flutter_web_plugins js] - firebase_auth_platform_interface 7.0.6 [_flutterfire_internals collection firebase_core flutter meta plugin_platform_interface] - firebase_auth_web 5.8.9 [firebase_auth_platform_interface firebase_core firebase_core_web flutter flutter_web_plugins http_parser js meta] - firebase_core_platform_interface 5.0.0 [collection flutter flutter_test meta plugin_platform_interface] - firebase_core_web 2.9.0 [firebase_core_platform_interface flutter flutter_web_plugins js meta] - firebase_crashlytics_platform_interface 3.6.14 [_flutterfire_internals collection firebase_core flutter meta plugin_platform_interface] - firebase_database_platform_interface 0.2.5+14 [_flutterfire_internals collection firebase_core flutter meta plugin_platform_interface] - firebase_database_web 0.2.3+14 [firebase_core firebase_core_web firebase_database_platform_interface flutter flutter_web_plugins js] - firebase_messaging_platform_interface 4.5.15 [_flutterfire_internals firebase_core flutter meta plugin_platform_interface] - firebase_messaging_web 3.5.15 [_flutterfire_internals firebase_core firebase_core_web firebase_messaging_platform_interface flutter flutter_web_plugins js meta] - firebase_remote_config_platform_interface 1.4.14 [_flutterfire_internals firebase_core flutter meta plugin_platform_interface] - firebase_remote_config_web 1.4.14 [firebase_core firebase_core_web firebase_remote_config_platform_interface flutter flutter_web_plugins js] - fixnum 1.1.0 - flutter_web_plugins 0.0.0 [flutter characters collection material_color_utilities meta vector_math web] - font_awesome_flutter 9.2.0 [flutter] - freezed_annotation 2.4.1 [collection json_annotation meta] - frontend_server_client 3.2.0 [async path] - glob 2.1.2 [async collection file path string_scanner] - google_identity_services_web 0.2.2 [js meta] - google_sign_in_android 6.1.20 [flutter google_sign_in_platform_interface] - google_sign_in_ios 5.6.3 [flutter google_sign_in_platform_interface] - google_sign_in_platform_interface 2.4.2 [flutter plugin_platform_interface quiver] - google_sign_in_web 0.12.2+1 [flutter flutter_web_plugins google_identity_services_web google_sign_in_platform_interface http js] - graphs 2.3.1 [collection] - html 0.15.4 [csslib source_span] - http_multi_server 3.2.1 [async] - http_parser 4.0.2 [collection source_span string_scanner typed_data] - intl 0.18.1 [clock meta path] - io 1.0.4 [meta path string_scanner] - iregexp 0.1.2 [petitparser] - js 0.6.7 [meta] - json_class 3.0.0+8 [intl logging meta] - json_path 0.6.6 [rfc_6901 petitparser maybe_just_nothing iregexp] - lints 3.0.0 - logging 1.2.0 - matcher 0.12.16 [async meta stack_trace term_glyph test_api] - material_color_utilities 0.5.0 [collection] - maybe_just_nothing 0.5.3 - meta 1.10.0 - mime 1.0.4 - package_config 2.1.0 [path] - path 1.8.3 - path_provider 2.1.1 [flutter path_provider_android path_provider_foundation path_provider_linux path_provider_platform_interface path_provider_windows] - path_provider_android 2.2.1 [flutter path_provider_platform_interface] - path_provider_foundation 2.3.1 [flutter path_provider_platform_interface] - path_provider_linux 2.2.1 [ffi flutter path path_provider_platform_interface xdg_directories] - path_provider_platform_interface 2.1.1 [flutter platform plugin_platform_interface] - path_provider_windows 2.2.1 [ffi flutter path path_provider_platform_interface win32] - petitparser 6.0.2 [meta] - platform 3.1.3 - plugin_platform_interface 2.1.7 [meta] - pointycastle 3.7.3 [collection convert js] - pool 1.5.1 [async stack_trace] - pub_semver 2.1.4 [collection meta] - pubspec_parse 1.2.3 [checked_yaml collection json_annotation pub_semver yaml] - quiver 3.2.1 [matcher] - recase 4.1.0 - rfc_6901 0.2.0 - riverpod 2.4.9 [meta stack_trace state_notifier] - riverpod_analyzer_utils 0.5.0 [analyzer collection crypto custom_lint_core freezed_annotation meta path source_span] - riverpod_annotation 2.3.3 [meta riverpod] - rxdart 0.27.7 - shelf 1.4.1 [async collection http_parser path stack_trace stream_channel] - shelf_web_socket 1.0.4 [shelf stream_channel web_socket_channel] - sign_in_with_apple_platform_interface 1.0.0 [flutter plugin_platform_interface meta] - sign_in_with_apple_web 1.0.1 [flutter flutter_web_plugins sign_in_with_apple_platform_interface js] - sky_engine 0.0.99 - source_gen 1.4.0 [analyzer async build dart_style glob path source_span yaml] - source_helper 1.3.4 [analyzer collection source_gen] - source_span 1.10.0 [collection path term_glyph] - sprintf 7.0.0 - stack_trace 1.11.1 [path] - state_notifier 1.0.0 [meta] - stream_channel 2.1.2 [async] - stream_transform 2.1.0 - string_scanner 1.2.0 [source_span] - term_glyph 1.2.1 - test_api 0.6.1 [async boolean_selector collection meta source_span stack_trace stream_channel string_scanner term_glyph] - timing 1.0.1 [json_annotation] - typed_data 1.3.2 [collection] - universal_io 2.2.2 [collection meta typed_data] - vector_math 2.1.4 - video_player_android 2.4.10 [flutter video_player_platform_interface] - video_player_avfoundation 2.5.2 [flutter video_player_platform_interface] - video_player_platform_interface 6.2.1 [flutter plugin_platform_interface] - video_player_web 2.1.2 [flutter flutter_web_plugins video_player_platform_interface] - watcher 1.1.0 [async path] - web 0.3.0 - web_socket_channel 2.4.0 [async crypto stream_channel] - win32 5.1.1 [ffi] - xdg_directories 1.0.3 [meta path] - xml 6.5.0 [collection meta petitparser] - yaml 3.1.2 [collection source_span string_scanner] - yaon 1.1.4 [logging yaml] ```

danagbemava-nc commented 8 months ago

Hi @mrares, this is indeed a duplicate of https://github.com/firebase/flutterfire/issues/10145.

Kindly subscribe to the original issue for updates.

Closing from here.

Thank you

mrares commented 8 months ago

@danagbemava-nc I agree and that's why I mentioned it, but #10145 hasn't been getting any attention or update in a year and I can't expect any more traction there, so I wanted to raise awareness that this issue persists and give a bit more context hoping that it can be replicated and ultimately fixed