11import 'package:firebase_database/firebase_database.dart' ;
2- import 'package:flutter/foundation.dart' ;
32import 'package:mockito/mockito.dart' ;
43
54import 'mock_data_snapshot.dart' ;
@@ -8,8 +7,8 @@ import 'mock_firebase_database.dart';
87class MockDatabaseReference extends Mock implements DatabaseReference {
98 var _nodePath = '/' ;
109 // ignore: prefer_final_fields
11- static var _persitedData = < String , dynamic > {};
12- var _volatileData = < String , dynamic > {};
10+ static Map < String , dynamic > ? _persitedData = < String , dynamic > {};
11+ Map < String , dynamic > ? _volatileData = < String , dynamic > {};
1312 MockDatabaseReference ();
1413 MockDatabaseReference ._(nodePath, [this ._volatileData]) {
1514 _nodePath += nodePath;
@@ -20,7 +19,7 @@ class MockDatabaseReference extends Mock implements DatabaseReference {
2019 yield MockEvent ._(data.value);
2120 }
2221
23- Map <String , dynamic > get _data {
22+ Map <String , dynamic >? get _data {
2423 if (MockFirebaseDatabase .persistData) {
2524 return _persitedData;
2625 }
@@ -48,50 +47,49 @@ class MockDatabaseReference extends Mock implements DatabaseReference {
4847 }
4948
5049 @override
51- // ignore: missing_return
52- Future <void > set (dynamic value, {dynamic priority}) {
50+ Future <void > set (dynamic value, {dynamic priority}) async {
5351 if (_nodePath == '/' ) {
5452 _data = value;
55- return null ;
56- }
57- var nodePathWithoutSlashesAtEndAndStart =
58- _nodePath.substring (1 , _nodePath.length - 1 );
59- var nodesList = nodePathWithoutSlashesAtEndAndStart.split ('/' );
60- var tempData = < String , dynamic > {};
61- Map <String , dynamic > lastNodeInCurrentData;
62- var nodeIndexReference = _Int (0 );
63- if (_data[nodesList.first] == null ) {
64- lastNodeInCurrentData = _data;
65- } else {
66- lastNodeInCurrentData = _getNextNodeData (
67- data: _data, nodesList: nodesList, nodeIndex: nodeIndexReference);
68- }
69- var nodeIndex = nodeIndexReference.value;
70- var noNewNodeToAdd = nodesList.length <= nodeIndex;
71- if (noNewNodeToAdd) {
72- lastNodeInCurrentData[nodesList.last] = value;
73- return null ;
74- }
75- var firstNodeInNewData = nodesList[nodeIndex++ ];
76- if (nodeIndex < nodesList.length) {
77- tempData = _buildNewNodesTree (
78- nodeIndex: nodeIndex,
79- nodesList: nodesList,
80- data: tempData,
81- value: value,
82- );
83- lastNodeInCurrentData.addAll ({firstNodeInNewData: tempData});
8453 } else {
85- if (value is Map ) value = value;
86- lastNodeInCurrentData.addAll ({firstNodeInNewData: value});
54+ var nodePathWithoutSlashesAtEndAndStart =
55+ _nodePath.substring (1 , _nodePath.length - 1 );
56+ var nodesList = nodePathWithoutSlashesAtEndAndStart.split ('/' );
57+ Map <String , dynamic >? tempData = < String , dynamic > {};
58+ Map <String , dynamic >? lastNodeInCurrentData;
59+ var nodeIndexReference = _Int (0 );
60+ if (_data! [nodesList.first] == null ) {
61+ lastNodeInCurrentData = _data;
62+ } else {
63+ lastNodeInCurrentData = _getNextNodeData (
64+ data: _data, nodesList: nodesList, nodeIndex: nodeIndexReference);
65+ }
66+ var nodeIndex = nodeIndexReference.value;
67+ var noNewNodeToAdd = nodesList.length <= nodeIndex;
68+ if (noNewNodeToAdd) {
69+ lastNodeInCurrentData! [nodesList.last] = value;
70+ } else {
71+ var firstNodeInNewData = nodesList[nodeIndex++ ];
72+ if (nodeIndex < nodesList.length) {
73+ tempData = _buildNewNodesTree (
74+ nodeIndex: nodeIndex,
75+ nodesList: nodesList,
76+ data: tempData,
77+ value: value,
78+ );
79+ lastNodeInCurrentData! .addAll ({firstNodeInNewData: tempData});
80+ } else {
81+ if (value is Map ) value = value;
82+ lastNodeInCurrentData! .addAll ({firstNodeInNewData: value});
83+ }
84+ }
8785 }
8886 }
8987
90- Map <String , dynamic > _buildNewNodesTree ({
91- @ required dynamic data,
92- @ required List <String > nodesList,
93- @ required int nodeIndex,
94- @ required value,
88+ Map <String , dynamic >? _buildNewNodesTree ({
89+ required dynamic data,
90+ required List <String > nodesList,
91+ required int nodeIndex,
92+ required value,
9593 }) {
9694 var nextNodeIndex = nodeIndex + 1 ;
9795 if (nodeIndex + 1 < nodesList.length) {
@@ -107,9 +105,9 @@ class MockDatabaseReference extends Mock implements DatabaseReference {
107105 }
108106
109107 _getNextNodeData ({
110- @ required dynamic data,
111- @ required List <String > nodesList,
112- @ required _Int nodeIndex,
108+ required dynamic data,
109+ required List <String > nodesList,
110+ required _Int nodeIndex,
113111 }) {
114112 if (nodesList.length <= nodeIndex.value ||
115113 ! (data[nodesList[nodeIndex.value]] is Map )) {
@@ -132,7 +130,7 @@ class MockDatabaseReference extends Mock implements DatabaseReference {
132130 if (nodeList.length > 1 ) {
133131 for (var i = 0 ; i < nodeList.length; i++ ) {
134132 nodePath = nodeList[i];
135- var nonExistentNodeFound = tempData[nodePath] == null ;
133+ var nonExistentNodeFound = tempData! [nodePath] == null ;
136134 if (nonExistentNodeFound || (i + 1 ) == nodeList.length) {
137135 break ;
138136 }
@@ -141,7 +139,7 @@ class MockDatabaseReference extends Mock implements DatabaseReference {
141139 }
142140 }
143141 }
144- return Future .value (MockDataSnapshot (tempData[nodePath]));
142+ return Future .value (MockDataSnapshot (tempData! [nodePath]));
145143 }
146144}
147145
0 commit comments