diff --git a/packages/flutter/lib/parse_server_sdk_flutter.dart b/packages/flutter/lib/parse_server_sdk_flutter.dart index 4a8dd7c12..6a85d1b40 100644 --- a/packages/flutter/lib/parse_server_sdk_flutter.dart +++ b/packages/flutter/lib/parse_server_sdk_flutter.dart @@ -47,6 +47,16 @@ class Parse extends sdk.Parse /// ``` /// [appName], [appVersion] and [appPackageName] are automatically set on Android and IOS, if they are not defined. You should provide a value on web. /// [fileDirectory] is not used on web + /// + /// [restRetryIntervals] - Retry intervals in milliseconds for read operations. + /// Applies to: GET, DELETE, and getBytes methods. + /// Default: [0, 250, 500, 1000, 2000] (5 retry attempts with exponential backoff). + /// Set to [] to disable retries for read operations. + /// + /// [restRetryIntervalsForWrites] - Retry intervals in milliseconds for write operations. + /// Applies to: POST, PUT, and postBytes methods. + /// Default: [] (no retries to prevent duplicate data creation). + /// Configure only if you have idempotency guarantees in place. @override Future initialize( String appId, @@ -66,6 +76,8 @@ class Parse extends sdk.Parse Map? registeredSubClassMap, sdk.ParseUserConstructor? parseUserConstructor, sdk.ParseFileConstructor? parseFileConstructor, + List? restRetryIntervals, + List? restRetryIntervalsForWrites, List? liveListRetryIntervals, sdk.ParseConnectivityProvider? connectivityProvider, String? fileDirectory, @@ -102,6 +114,8 @@ class Parse extends sdk.Parse registeredSubClassMap: registeredSubClassMap, parseUserConstructor: parseUserConstructor, parseFileConstructor: parseFileConstructor, + restRetryIntervals: restRetryIntervals, + restRetryIntervalsForWrites: restRetryIntervalsForWrites, liveListRetryIntervals: liveListRetryIntervals, connectivityProvider: connectivityProvider ?? this, fileDirectory: diff --git a/packages/flutter/pubspec.yaml b/packages/flutter/pubspec.yaml index 27a53cf9b..981a825f9 100644 --- a/packages/flutter/pubspec.yaml +++ b/packages/flutter/pubspec.yaml @@ -25,7 +25,7 @@ dependencies: flutter: sdk: flutter - parse_server_sdk: ">=9.4.2 <10.0.0" + parse_server_sdk: ">=9.5.0 <10.0.0" # Uncomment for local testing #parse_server_sdk: # path: ../dart diff --git a/packages/flutter/test/parse_client_configuration_test.dart b/packages/flutter/test/parse_client_configuration_test.dart index 60a384508..048b3ae77 100644 --- a/packages/flutter/test/parse_client_configuration_test.dart +++ b/packages/flutter/test/parse_client_configuration_test.dart @@ -3,6 +3,7 @@ import 'package:parse_server_sdk_flutter/parse_server_sdk_flutter.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() { + TestWidgetsFlutterBinding.ensureInitialized(); SharedPreferences.setMockInitialValues({}); test('testBuilder', () async { @@ -19,6 +20,8 @@ void main() { sessionId: 'sessionId', fileDirectory: 'someDirectory', debug: true, + restRetryIntervals: [100, 200, 300], + restRetryIntervalsForWrites: [500, 1000], ); // assert @@ -33,5 +36,36 @@ void main() { expect(ParseCoreData().sessionId, 'sessionId'); expect(ParseCoreData().debug, true); expect(ParseCoreData().fileDirectory, 'someDirectory'); + expect(ParseCoreData().restRetryIntervals, [100, 200, 300]); + expect(ParseCoreData().restRetryIntervalsForWrites, [500, 1000]); + }); + + test('testDefaultValues', () async { + // arrange - initialize with minimal parameters to test defaults + await Parse().initialize( + 'appId', + 'serverUrl', + appName: 'appName', + appPackageName: 'somePackageName', + appVersion: 'someAppVersion', + fileDirectory: 'someDirectory', + ); + + // assert - verify default values are used + expect(ParseCoreData().applicationId, 'appId'); + expect(ParseCoreData().serverUrl, 'serverUrl'); + expect(ParseCoreData().appName, 'appName'); + expect(ParseCoreData().appPackageName, 'somePackageName'); + expect(ParseCoreData().appVersion, 'someAppVersion'); + expect(ParseCoreData().debug, false); // default + expect(ParseCoreData().autoSendSessionId, true); // default + expect(ParseCoreData().clientKey, null); // not provided + expect(ParseCoreData().masterKey, null); // not provided + expect(ParseCoreData().sessionId, null); // not provided + expect(ParseCoreData().liveQueryURL, null); // not provided + // Note: default retry values mirror parse_server_sdk defaults and may need + // updating if those change in future versions + expect(ParseCoreData().restRetryIntervals, [0, 250, 500, 1000, 2000]); + expect(ParseCoreData().restRetryIntervalsForWrites, []); }); }