diff --git a/packages/dart/CHANGELOG.md b/packages/dart/CHANGELOG.md index 43108dc67..324fd5f08 100644 --- a/packages/dart/CHANGELOG.md +++ b/packages/dart/CHANGELOG.md @@ -1,3 +1,9 @@ +## [3.1.10](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.9...dart-3.1.10) (2023-01-16) + +### Bug Fixes + +* Time zone data not set in `ParseInstallation` ([#96](https://github.com/parse-community/Parse-SDK-Flutter/issues/96)) + ## [3.1.9](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.8...dart-3.1.9) (2022-12-25) ### Bug Fixes diff --git a/packages/dart/lib/parse_server_sdk.dart b/packages/dart/lib/parse_server_sdk.dart index 30ac047a8..ccd2d6fea 100644 --- a/packages/dart/lib/parse_server_sdk.dart +++ b/packages/dart/lib/parse_server_sdk.dart @@ -12,6 +12,8 @@ import 'package:path/path.dart' as path; import 'package:sembast/sembast.dart'; import 'package:sembast/sembast_io.dart'; import 'package:sembast_web/sembast_web.dart'; +import 'package:timezone/data/latest.dart' as tz; +import 'package:timezone/timezone.dart' as tz; import 'package:uuid/uuid.dart'; import 'package:web_socket_channel/web_socket_channel.dart'; import 'package:xxtea/xxtea.dart'; diff --git a/packages/dart/lib/src/base/parse_constants.dart b/packages/dart/lib/src/base/parse_constants.dart index b0d26db62..016d2c150 100644 --- a/packages/dart/lib/src/base/parse_constants.dart +++ b/packages/dart/lib/src/base/parse_constants.dart @@ -1,7 +1,7 @@ part of flutter_parse_sdk; // Library -const String keySdkVersion = '3.1.9'; +const String keySdkVersion = '3.1.10'; const String keyLibraryName = 'Flutter Parse SDK'; // End Points diff --git a/packages/dart/lib/src/objects/parse_installation.dart b/packages/dart/lib/src/objects/parse_installation.dart index b5e73b6e7..12c891849 100644 --- a/packages/dart/lib/src/objects/parse_installation.dart +++ b/packages/dart/lib/src/objects/parse_installation.dart @@ -85,6 +85,7 @@ class ParseInstallation extends ParseObject { set(keyLocaleIdentifier, ParseCoreData().locale); //Timezone + set(keyTimeZone, _getNameLocalTimeZone()); //App info set(keyAppName, ParseCoreData().appName); @@ -93,6 +94,24 @@ class ParseInstallation extends ParseObject { set(keyParseVersion, keySdkVersion); } + String _getNameLocalTimeZone() { + tz.initializeTimeZones(); + var locations = tz.timeZoneDatabase.locations; + + int milliseconds = DateTime.now().timeZoneOffset.inMilliseconds; + String name = ""; + + locations.forEach((key, value) { + for (var element in value.zones) { + if (element.offset == milliseconds) { + name = value.name; + break; + } + } + }); + return name; + } + @override Future create({bool allowCustomObjectId = false}) async { final bool isCurrent = await ParseInstallation.isCurrent(this); diff --git a/packages/dart/pubspec.yaml b/packages/dart/pubspec.yaml index 66fc313b2..0fc53fbdc 100644 --- a/packages/dart/pubspec.yaml +++ b/packages/dart/pubspec.yaml @@ -1,6 +1,6 @@ name: parse_server_sdk description: Dart plugin for Parse Server, (https://parseplatform.org), (https://back4app.com) -version: 3.1.9 +version: 3.1.10 homepage: https://github.com/parse-community/Parse-SDK-Flutter environment: @@ -22,6 +22,7 @@ dependencies: meta: ^1.7.0 path: ^1.8.1 mime_type: ^1.0.0 + timezone: ^0.9.0 dev_dependencies: lints: ^1.0.1 diff --git a/packages/dart/test/parse_installation_test.dart b/packages/dart/test/parse_installation_test.dart new file mode 100644 index 000000000..a4b637b24 --- /dev/null +++ b/packages/dart/test/parse_installation_test.dart @@ -0,0 +1,30 @@ +import 'package:parse_server_sdk/parse_server_sdk.dart'; +import 'package:test/test.dart'; + +void main() { + test('should return true for exist TimeZone.', () async { + // arrange + await Parse().initialize( + 'appId', + 'https://example.com', + debug: true, + // to prevent automatic detection + fileDirectory: 'someDirectory', + // to prevent automatic detection + appName: 'appName', + // to prevent automatic detection + appPackageName: 'somePackageName', + // to prevent automatic detection + appVersion: 'someAppVersion', + ); + + // act + final ParseInstallation installation = + await ParseInstallation.currentInstallation(); + + dynamic actualHasTimeZoneResult = installation.containsKey(keyTimeZone); + + // assert + expect(actualHasTimeZoneResult, true); + }); +}