From b654ef1fae1cabd126ec0d9e420136f782752a65 Mon Sep 17 00:00:00 2001 From: Cynthia J <2354618+cynthiajoan@users.noreply.github.com> Date: Mon, 19 Oct 2026 18:00:26 +0000 Subject: [PATCH 1/2] fix(database): generate 0-based childKeys for List values in MethodChannelDataSnapshot --- .../method_channel_data_snapshot.dart | 2 +- .../test/method_channel_test.dart | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/firebase_database/firebase_database_platform_interface/lib/src/method_channel/method_channel_data_snapshot.dart b/packages/firebase_database/firebase_database_platform_interface/lib/src/method_channel/method_channel_data_snapshot.dart index e89f6b48a1e0..bd1d51a2bc44 100644 --- a/packages/firebase_database/firebase_database_platform_interface/lib/src/method_channel/method_channel_data_snapshot.dart +++ b/packages/firebase_database/firebase_database_platform_interface/lib/src/method_channel/method_channel_data_snapshot.dart @@ -104,7 +104,7 @@ List _childKeysFromValue(Object? value) { } else if (value is List) { childChildKeys = List.generate( value.length, - (int index) => '${index - 1}', + (int index) => '$index', ); } return childChildKeys; diff --git a/packages/firebase_database/firebase_database_platform_interface/test/method_channel_test.dart b/packages/firebase_database/firebase_database_platform_interface/test/method_channel_test.dart index f21a7ba0bb07..64d30f7f7d43 100755 --- a/packages/firebase_database/firebase_database_platform_interface/test/method_channel_test.dart +++ b/packages/firebase_database/firebase_database_platform_interface/test/method_channel_test.dart @@ -6,6 +6,7 @@ import 'dart:async'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_database_platform_interface/firebase_database_platform_interface.dart'; +import 'package:firebase_database_platform_interface/src/method_channel/method_channel_data_snapshot.dart'; import 'package:firebase_database_platform_interface/src/method_channel/method_channel_database.dart'; import 'package:firebase_database_platform_interface/src/method_channel/method_channel_database_reference.dart'; import 'package:firebase_database_platform_interface/src/pigeon/messages.pigeon.dart' @@ -563,6 +564,33 @@ void main() { ); }); }); + + group('MethodChannelDataSnapshot', () { + test( + 'child() on a List-valued child generates 0-based childKeys and iterates children without RangeError (RTDB-4)', + () { + final snapshot = MethodChannelDataSnapshot( + database.ref('root'), + { + 'key': 'root', + 'value': { + 'items': ['first', 'second', 'third'], + }, + 'priority': null, + 'childKeys': ['items'], + }, + ); + + final itemsSnapshot = snapshot.child('items'); + final children = itemsSnapshot.children.toList(); + + expect(children.map((c) => c.key).toList(), ['0', '1', '2']); + expect( + children.map((c) => c.value).toList(), + ['first', 'second', 'third'], + ); + }); + }); }); } From d61349f6ee1a623c368a122d321e070c821602ce Mon Sep 17 00:00:00 2001 From: Cynthia J <2354618+cynthiajoan@users.noreply.github.com> Date: Tue, 20 Oct 2026 23:46:41 +0000 Subject: [PATCH 2/2] test(database): add nested list children e2e test in data_snapshot_e2e.dart --- .../integration_test/data_snapshot_e2e.dart | 15 +++++++++++++++ .../test/method_channel_test.dart | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/firebase_database/firebase_database/example/integration_test/data_snapshot_e2e.dart b/packages/firebase_database/firebase_database/example/integration_test/data_snapshot_e2e.dart index 8828ba723198..7ae2d810f093 100644 --- a/packages/firebase_database/firebase_database/example/integration_test/data_snapshot_e2e.dart +++ b/packages/firebase_database/firebase_database/example/integration_test/data_snapshot_e2e.dart @@ -177,5 +177,20 @@ void setupDataSnapshotTests() { expect(children[1].value, 2); expect(children[2].value, 3); }); + + test('children returns the children for a nested list snapshot', () async { + final ref = getRef('nested-list-children'); + await ref.set({ + 'items': ['first', 'second', 'third'], + }); + final s = await ref.get(); + + final children = s.child('items').children.toList(); + expect(children.map((c) => c.key).toList(), ['0', '1', '2']); + expect( + children.map((c) => c.value).toList(), + ['first', 'second', 'third'], + ); + }); }); } diff --git a/packages/firebase_database/firebase_database_platform_interface/test/method_channel_test.dart b/packages/firebase_database/firebase_database_platform_interface/test/method_channel_test.dart index 64d30f7f7d43..869266da8c1a 100755 --- a/packages/firebase_database/firebase_database_platform_interface/test/method_channel_test.dart +++ b/packages/firebase_database/firebase_database_platform_interface/test/method_channel_test.dart @@ -567,7 +567,7 @@ void main() { group('MethodChannelDataSnapshot', () { test( - 'child() on a List-valued child generates 0-based childKeys and iterates children without RangeError (RTDB-4)', + 'child() on a List-valued child generates 0-based childKeys and iterates children without RangeError', () { final snapshot = MethodChannelDataSnapshot( database.ref('root'),