Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

馃悰 All data is loaded at once when using StreamBuilder inside the itemBuilder #215

Closed
1 task done
quibenefacit opened this issue Dec 16, 2023 · 1 comment
Closed
1 task done
Labels
resolution: duplicate This issue or pull request already exists

Comments

@quibenefacit
Copy link

quibenefacit commented Dec 16, 2023

Is there an existing issue for this?

  • I have searched the existing issues and found no duplicates.

What plugin is this bug for?

Firebase UI Database

What platform(s) does this bug affect?

Android, iOS

List of dependencies used.

flutter pub deps -s list
 Dart SDK 3.2.3
Flutter SDK 3.16.4

dependencies:

  • firebase_auth 4.15.3
    • firebase_auth_platform_interface ^7.0.9
    • firebase_auth_web ^5.8.12
    • firebase_core ^2.24.2
    • firebase_core_platform_interface ^5.0.0
    • flutter any
    • meta ^1.8.0
  • firebase_core 2.24.2
    • firebase_core_platform_interface ^5.0.0
    • firebase_core_web ^2.10.0
    • flutter any
    • meta ^1.8.0
  • firebase_database 10.3.8
    • firebase_core ^2.24.2
    • firebase_core_platform_interface ^5.0.0
    • firebase_database_platform_interface ^0.2.5+16
    • firebase_database_web ^0.2.3+16
    • flutter any
  • flutter 0.0.0
    • characters 1.3.0
    • collection 1.18.0
    • material_color_utilities 0.5.0
    • meta 1.10.0
    • vector_math 2.1.4
    • web 0.3.0
    • sky_engine any
  • flutter_localizations 0.0.0
    • flutter any
    • intl 0.18.1
    • characters 1.3.0
    • clock 1.1.1
    • collection 1.18.0
    • material_color_utilities 0.5.0
    • meta 1.10.0
    • path 1.8.3
    • vector_math 2.1.4
    • web 0.3.0
  • contacts_service 0.6.3
    • flutter any
    • collection ^1.15.0
    • quiver ^3.0.0
  • permission_handler 11.1.0
    • flutter any
    • meta ^1.7.0
    • permission_handler_android ^12.0.1
    • permission_handler_apple ^9.2.0
    • permission_handler_html ^0.1.0+1
    • permission_handler_windows ^0.2.0
    • permission_handler_platform_interface ^4.0.2
  • multi_select_flutter 4.1.3
    • flutter any
    • collection ^1.15.0
  • currency_text_input_formatter 2.1.11
    • flutter any
    • intl ^0.18.0
  • url_launcher 6.2.2
    • flutter any
    • url_launcher_android ^6.2.0
    • url_launcher_ios ^6.2.0
    • url_launcher_linux ^3.1.0
    • url_launcher_macos ^3.1.0
    • url_launcher_platform_interface ^2.2.0
    • url_launcher_web ^2.2.0
    • url_launcher_windows ^3.1.0
  • package_info_plus 5.0.1
    • ffi ^2.0.1
    • flutter any
    • flutter_web_plugins any
    • http >=0.13.5 <2.0.0
    • meta ^1.8.0
    • path ^1.8.2
    • package_info_plus_platform_interface ^2.0.1
    • web >=0.3.0 <0.5.0
    • win32 >=4.0.0 <6.0.0
  • firebase_storage 11.5.6
    • firebase_core ^2.24.2
    • firebase_core_platform_interface ^5.0.0
    • firebase_storage_platform_interface ^5.1.3
    • firebase_storage_web ^3.6.17
    • flutter any
  • image_picker 1.0.5
    • flutter any
    • image_picker_android ^0.8.7
    • image_picker_for_web >=2.2.0 <4.0.0
    • image_picker_ios ^0.8.8
    • image_picker_linux ^0.2.1
    • image_picker_macos ^0.2.1
    • image_picker_platform_interface ^2.8.0
    • image_picker_windows ^0.2.1
  • mask_text_input_formatter 2.7.0
    • flutter any
  • provider 6.1.1
    • collection ^1.15.0
    • flutter any
    • nested ^1.0.0
  • intl 0.18.1
    • clock ^1.1.0
    • meta ^1.0.2
    • path ^1.8.0
  • restart_app 1.2.1
    • flutter any
    • plugin_platform_interface ^2.1.4
    • flutter_web_plugins any
  • firebase_messaging 14.7.9
    • firebase_core ^2.24.2
    • firebase_core_platform_interface ^5.0.0
    • firebase_messaging_platform_interface ^4.5.18
    • firebase_messaging_web ^3.5.18
    • flutter any
    • meta ^1.8.0
  • flutter_app_badger 1.5.0
    • flutter any
  • camera 0.10.5+7
    • camera_android ^0.10.7
    • camera_avfoundation ^0.9.13
    • camera_platform_interface ^2.5.0
    • camera_web ^0.3.1
    • flutter any
    • flutter_plugin_android_lifecycle ^2.0.2
  • video_compress 3.1.2
    • flutter any
  • cached_video_player 2.0.4
    • meta ^1.7.0
    • video_player_platform_interface ^5.1.2
    • video_player_web ^2.0.10
    • flutter any
    • flutter_test any
  • visibility_detector 0.4.0+2
    • flutter any
  • profanity_filter 2.0.0
  • firebase_ui_database 1.3.13
    • collection ^1.18.0
    • firebase_database ^10.3.6
    • firebase_ui_localizations ^1.9.0
    • flutter any

dev dependencies:

  • flutter_test 0.0.0
    • flutter any
    • test_api 0.6.1
    • matcher 0.12.16
    • path 1.8.3
    • fake_async 1.3.1
    • clock 1.1.1
    • stack_trace 1.11.1
    • vector_math 2.1.4
    • async 2.11.0
    • boolean_selector 2.1.1
    • characters 1.3.0
    • collection 1.18.0
    • material_color_utilities 0.5.0
    • meta 1.10.0
    • source_span 1.10.0
    • stream_channel 2.1.2
    • string_scanner 1.2.0
    • term_glyph 1.2.1
    • web 0.3.0
  • flutter_lints 3.0.1
    • lints ^3.0.0

transitive dependencies:

  • _flutterfire_internals 1.3.16
    • collection ^1.0.0
    • firebase_core ^2.24.2
    • firebase_core_platform_interface ^5.0.0
    • flutter any
    • meta ^1.8.0
  • async 2.11.0
    • collection ^1.15.0
    • meta ^1.1.7
  • boolean_selector 2.1.1
    • source_span ^1.8.0
    • string_scanner ^1.1.0
  • camera_android 0.10.8+15
    • camera_platform_interface ^2.5.0
    • flutter any
    • flutter_plugin_android_lifecycle ^2.0.2
    • stream_transform ^2.0.0
  • camera_avfoundation 0.9.13+8
    • camera_platform_interface ^2.4.0
    • flutter any
    • stream_transform ^2.0.0
  • camera_platform_interface 2.7.0
    • cross_file ^0.3.1
    • flutter any
    • plugin_platform_interface ^2.1.0
    • stream_transform ^2.0.0
  • camera_web 0.3.2+3
    • camera_platform_interface ^2.3.1
    • flutter any
    • flutter_web_plugins any
    • stream_transform ^2.0.0
  • characters 1.3.0
  • clock 1.1.1
  • collection 1.18.0
  • cross_file 0.3.3+8
    • meta ^1.3.0
    • web >=0.3.0 <0.5.0
  • fake_async 1.3.1
    • clock ^1.1.0
    • collection ^1.15.0
  • ffi 2.1.0
  • file_selector_linux 0.9.2+1
    • cross_file ^0.3.1
    • file_selector_platform_interface ^2.6.0
    • flutter any
  • file_selector_macos 0.9.3+3
    • cross_file ^0.3.1
    • file_selector_platform_interface ^2.6.0
    • flutter any
  • file_selector_platform_interface 2.6.1
    • cross_file ^0.3.0
    • flutter any
    • http >=0.13.0 <2.0.0
    • plugin_platform_interface ^2.1.0
  • file_selector_windows 0.9.3+1
    • cross_file ^0.3.1
    • file_selector_platform_interface ^2.6.0
    • flutter any
  • firebase_auth_platform_interface 7.0.9
    • _flutterfire_internals ^1.3.16
    • collection ^1.16.0
    • firebase_core ^2.24.2
    • flutter any
    • meta ^1.8.0
    • plugin_platform_interface ^2.1.3
  • firebase_auth_web 5.8.12
    • firebase_auth_platform_interface ^7.0.9
    • firebase_core ^2.24.2
    • firebase_core_web ^2.10.0
    • flutter any
    • flutter_web_plugins any
    • http_parser ^4.0.0
    • js ^0.6.3
    • meta ^1.8.0
  • firebase_core_platform_interface 5.0.0
    • collection ^1.0.0
    • flutter any
    • flutter_test any
    • meta ^1.8.0
    • plugin_platform_interface ^2.1.3
  • firebase_core_web 2.10.0
    • firebase_core_platform_interface ^5.0.0
    • flutter any
    • flutter_web_plugins any
    • js ^0.6.3
    • meta ^1.8.0
  • firebase_database_platform_interface 0.2.5+16
    • _flutterfire_internals ^1.3.16
    • collection ^1.14.3
    • firebase_core ^2.24.2
    • flutter any
    • meta ^1.8.0
    • plugin_platform_interface ^2.1.3
  • firebase_database_web 0.2.3+16
    • firebase_core ^2.24.2
    • firebase_core_web ^2.10.0
    • firebase_database_platform_interface ^0.2.5+16
    • flutter any
    • flutter_web_plugins any
    • js ^0.6.3
  • firebase_messaging_platform_interface 4.5.18
    • _flutterfire_internals ^1.3.16
    • firebase_core ^2.24.2
    • flutter any
    • meta ^1.8.0
    • plugin_platform_interface ^2.1.3
  • firebase_messaging_web 3.5.18
    • _flutterfire_internals ^1.3.16
    • firebase_core ^2.24.2
    • firebase_core_web ^2.10.0
    • firebase_messaging_platform_interface ^4.5.18
    • flutter any
    • flutter_web_plugins any
    • js ^0.6.3
    • meta ^1.8.0
  • firebase_storage_platform_interface 5.1.3
    • _flutterfire_internals ^1.3.16
    • collection ^1.15.0
    • firebase_core ^2.24.2
    • flutter any
    • meta ^1.8.0
    • plugin_platform_interface ^2.1.3
  • firebase_storage_web 3.6.17
    • _flutterfire_internals ^1.3.16
    • async ^2.5.0
    • firebase_core ^2.24.2
    • firebase_core_web ^2.10.0
    • firebase_storage_platform_interface ^5.1.3
    • flutter any
    • flutter_web_plugins any
    • http >=0.13.0 <2.0.0
    • js ^0.6.3
    • meta ^1.8.0
  • firebase_ui_localizations 1.9.0
    • flutter any
    • flutter_localizations any
    • path ^1.8.3
  • flutter_plugin_android_lifecycle 2.0.17
    • flutter any
  • flutter_web_plugins 0.0.0
    • flutter any
    • characters 1.3.0
    • collection 1.18.0
    • material_color_utilities 0.5.0
    • meta 1.10.0
    • vector_math 2.1.4
    • web 0.3.0
  • http 1.1.2
    • async ^2.5.0
    • http_parser ^4.0.0
    • meta ^1.3.0
    • web >=0.3.0 <0.5.0
  • http_parser 4.0.2
    • collection ^1.15.0
    • source_span ^1.8.0
    • string_scanner ^1.1.0
    • typed_data ^1.3.0
  • image_picker_android 0.8.9+1
    • flutter any
    • flutter_plugin_android_lifecycle ^2.0.1
    • image_picker_platform_interface ^2.8.0
  • image_picker_for_web 3.0.1
    • flutter any
    • flutter_web_plugins any
    • image_picker_platform_interface ^2.9.0
    • mime ^1.0.4
  • image_picker_ios 0.8.9
    • flutter any
    • image_picker_platform_interface ^2.8.0
  • image_picker_linux 0.2.1+1
    • file_selector_linux ^0.9.1+3
    • file_selector_platform_interface ^2.2.0
    • flutter any
    • image_picker_platform_interface ^2.8.0
  • image_picker_macos 0.2.1+1
    • file_selector_macos ^0.9.1+1
    • file_selector_platform_interface ^2.3.0
    • flutter any
    • image_picker_platform_interface ^2.8.0
  • image_picker_platform_interface 2.9.1
    • cross_file ^0.3.1+1
    • flutter any
    • http >=0.13.0 <2.0.0
    • plugin_platform_interface ^2.1.0
  • image_picker_windows 0.2.1+1
    • file_selector_platform_interface ^2.2.0
    • file_selector_windows ^0.9.0
    • flutter any
    • image_picker_platform_interface ^2.8.0
  • js 0.6.7
    • meta ^1.7.0
  • lints 3.0.0
  • matcher 0.12.16
    • async ^2.10.0
    • meta ^1.8.0
    • stack_trace ^1.10.0
    • term_glyph ^1.2.0
    • test_api >=0.5.0 <0.7.0
  • material_color_utilities 0.5.0
    • collection ^1.15.0
  • meta 1.10.0
  • mime 1.0.4
  • nested 1.0.0
    • flutter any
  • package_info_plus_platform_interface 2.0.1
    • flutter any
    • meta ^1.3.0
    • plugin_platform_interface ^2.0.0
  • path 1.8.3
  • permission_handler_android 12.0.1
    • flutter any
    • permission_handler_platform_interface ^4.0.0
  • permission_handler_apple 9.2.0
    • flutter any
    • permission_handler_platform_interface ^4.0.0
  • permission_handler_html 0.1.0+2
    • flutter any
    • flutter_web_plugins any
    • permission_handler_platform_interface ^4.0.2
  • permission_handler_platform_interface 4.0.2
    • flutter any
    • meta ^1.3.0
    • plugin_platform_interface ^2.0.0
  • permission_handler_windows 0.2.0
    • flutter any
    • permission_handler_platform_interface ^4.0.0
  • plugin_platform_interface 2.1.7
    • meta ^1.3.0
  • quiver 3.2.1
    • matcher ^0.12.10
  • sky_engine 0.0.99
  • source_span 1.10.0
    • collection ^1.15.0
    • path ^1.8.0
    • term_glyph ^1.2.0
  • stack_trace 1.11.1
    • path ^1.8.0
  • stream_channel 2.1.2
    • async ^2.5.0
  • stream_transform 2.1.0
  • string_scanner 1.2.0
    • source_span ^1.8.0
  • term_glyph 1.2.1
  • test_api 0.6.1
    • async ^2.5.0
    • boolean_selector ^2.1.0
    • collection ^1.15.0
    • meta ^1.3.0
    • source_span ^1.8.0
    • stack_trace ^1.10.0
    • stream_channel ^2.1.0
    • string_scanner ^1.1.0
    • term_glyph ^1.2.0
  • typed_data 1.3.2
    • collection ^1.15.0
  • url_launcher_android 6.2.0
    • flutter any
    • url_launcher_platform_interface ^2.2.0
  • url_launcher_ios 6.2.1
    • flutter any
    • url_launcher_platform_interface ^2.2.0
  • url_launcher_linux 3.1.1
    • flutter any
    • url_launcher_platform_interface ^2.2.0
  • url_launcher_macos 3.1.0
    • flutter any
    • url_launcher_platform_interface ^2.2.0
  • url_launcher_platform_interface 2.2.0
    • flutter any
    • plugin_platform_interface ^2.1.0
  • url_launcher_web 2.2.2
    • flutter any
    • flutter_web_plugins any
    • url_launcher_platform_interface ^2.2.0
    • web >=0.3.0 <0.5.0
  • url_launcher_windows 3.1.1
    • flutter any
    • url_launcher_platform_interface ^2.2.0
  • vector_math 2.1.4
  • video_player_platform_interface 5.1.4
    • flutter any
    • plugin_platform_interface ^2.1.0
  • video_player_web 2.0.15
    • flutter any
    • flutter_web_plugins any
    • video_player_platform_interface >=4.2.0 <7.0.0
  • web 0.3.0
  • win32 5.1.1
    • ffi ^2.1.0

Steps to reproduce

I have 4 items in the ENTRIES table. I am trying to download them pageSize at a time (ie, before the user scrolls).
As I set pageSize=2, only 2 should be loaded.
Instead, all 4 are loaded, as verified by printing the value of index when the widget in itemBuilder finishes loading.
My theory is that this undesired behavior happens because I am calling a secondary StreamBuilder inside the itemBuilder. I need to call it in order to look up the item-associated data at another database location.
In general, the query parameter doesn't seem to be doing a listen(), only a once() or get(). How to accommodate the case when a listen() is needed?

Here's the code:

@override
  Widget build(BuildContext context) {
    List<String> listTest = [];
    return FirebaseDatabaseListView(
        pageSize: 2,
        reverse: true, // also broken if set to false or omitted
        shrinkWrap: true,
        query: FirebaseDatabase.instance.ref('ENTRIES').orderByKey(),
        itemBuilder: (context, snapshot) {
          final item = snapshot.value as Map<dynamic, dynamic>;
          final testShow = item[KEY_ID];
          WidgetsBinding.instance.addPostFrameCallback((_) {
            // Code to be executed after the child widget has been built
            if (!listTest.contains(testShow)) {
              listTest.add(testShow);
              print('***** LOADED $testShow');
            }
          });
          return StreamBuilder(
              stream: FirebaseDatabase.instance
                  .ref('ENTRIES/${item[KEY_ASSOC]}')
                  .onValue,
              builder: (context, itemSnapshot) {
                if (ConnectionState.waiting == itemSnapshot.connectionState) {
                  return const SizedBox.shrink();
                } else if (itemSnapshot.hasError) {
                  return const ListTile(
                    title: Text('Error loading data'),
                  );
                } else {
                  return ListTile(
                    title: Text('${item[KEY_ASSOC]}'),
                    subtitle: const SizedBox(
                      height: 800,
                    ),
                  );
                }
              });
        });
  }

Expected Behavior

I have 4 items in the ENTRIES table. I am trying to download them pageSize at a time (ie, before the user scrolls).
As I list pageSize=2, only 2 should be loaded.

Actual Behavior

Instead, all 4 are loaded, as verified by printing the value of index when the widget in itemBuilder finishes loading.

Additional Information

For testing I've made the items artificially tall (almost as high as the screen) just to make sure that scrolling would be required to load items 3 and 4.

@quibenefacit quibenefacit changed the title 馃悰 All data is loaded at once; aged data load doesn't work. 馃悰 All data is loaded at once; Paged data load doesn't work. Dec 16, 2023
@quibenefacit quibenefacit changed the title 馃悰 All data is loaded at once; Paged data load doesn't work. 馃悰 All data is loaded at once when using StreamBuilder inside the itemBuilder Dec 17, 2023
@danagbemava-nc
Copy link
Contributor

Closing this as a duplicate of #111.

Kindly subscribe to the original issue for updates.

Thank you

@danagbemava-nc danagbemava-nc closed this as not planned Won't fix, can't repro, duplicate, stale Dec 18, 2023
@danagbemava-nc danagbemava-nc added resolution: duplicate This issue or pull request already exists and removed in triage labels Dec 18, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
resolution: duplicate This issue or pull request already exists
Projects
None yet
Development

No branches or pull requests

2 participants