Sync Timer
A Flutter package for server time synchronization and version management. This package provides functionality to calculate time differences with a server and generate synchronized version strings.
Features
- Server Time Synchronization: Calculate and store time differences between client and server
- Version Generation: Generate synchronized version strings in
yyyyMMddHHmmssSSSformat - Unix Timestamp: Get current UTC time as Unix timestamp in milliseconds (similar to .NET's
DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()) - Dependency Injection: Built-in dependency injection support with GetIt
- Persistent Storage: Uses SharedPreferences for storing time differences
Installation
Add this to your package's pubspec.yaml file:
dependencies:
sync_timer: ^1.1.0
Usage
Setup
First, initialize the sync timer module:
import 'package:sync_timer/core/container/sync_timer_module.dart';
void main() {
setUpSyncTimerModule();
runApp(MyApp());
}
Basic Usage
import 'package:get_it/get_it.dart';
import 'package:sync_timer/domain/usecases/sync_timer_usecases.dart';
// Get the use cases instance
final syncTimerUsecases = GetIt.instance<SyncTimerUsecases>();
// Calculate server time difference
await syncTimerUsecases.calculateServerTimeDiff(20250828123045123);
// Get synchronized version string
final version = await syncTimerUsecases.getVersion();
print(version); // Output: 20250828123045123
// Get Unix timestamp in milliseconds
final unixTimeMs = await syncTimerUsecases.getUtcNowUnixTimeMilliseconds();
print(unixTimeMs); // Output: 1724851825123
Server Time Format
The server time should be provided as a 17-digit integer in the format: yyyyMMddHHmmssSSS
Example: 20250828123045123 represents:
- Year: 2025
- Month: 08
- Day: 28
- Hour: 12
- Minute: 30
- Second: 45
- Millisecond: 123
API Reference
SyncTimerUsecases
calculateServerTimeDiff(int serverTime)
Calculates the time difference between client and server time.
Parameters:
serverTime: 17-digit integer representing server time inyyyyMMddHHmmssSSSformat
Returns: Future<Duration> - The time difference
getVersion()
Gets a synchronized version string based on current time and server time difference.
Returns: Future<String> - Version string in yyyyMMddHHmmssSSS format
getUtcNowUnixTimeMilliseconds()
Gets the current UTC time as Unix timestamp in milliseconds, synchronized with server time.
Returns: Future<int> - Unix timestamp in milliseconds
Dependencies
shared_preferences: ^2.5.1- For persistent storageintl: ^0.20.2- For date formattingget_it: ^8.0.3- For dependency injection
Example
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'package:sync_timer/core/container/sync_timer_module.dart';
import 'package:sync_timer/domain/usecases/sync_timer_usecases.dart';
void main() {
setUpSyncTimerModule();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SyncTimerExample(),
);
}
}
class SyncTimerExample extends StatefulWidget {
@override
_SyncTimerExampleState createState() => _SyncTimerExampleState();
}
class _SyncTimerExampleState extends State<SyncTimerExample> {
String version = '';
int unixTimeMs = 0;
final syncTimerUsecases = GetIt.instance<SyncTimerUsecases>();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Sync Timer Example')),
body: Column(
children: [
ElevatedButton(
onPressed: () async {
await syncTimerUsecases.calculateServerTimeDiff(20250828123045123);
final newVersion = await syncTimerUsecases.getVersion();
final newUnixTime = await syncTimerUsecases.getUtcNowUnixTimeMilliseconds();
setState(() {
version = newVersion;
unixTimeMs = newUnixTime;
});
},
child: Text('Sync with Server'),
),
Text('Version: $version'),
Text('Unix Time (ms): $unixTimeMs'),
],
),
);
}
}
License
This project is licensed under the MIT License - see the LICENSE file for details.