<!-- Thanks for contributing! Provide a description of your changes below and a general summary in the title Please look at the following checklist to ensure that your PR can be accepted quickly: --> ## Description This is a PR that makes the auth build runnable on the Desktop platform. Below is a screenshot for the same:  Some things to note: - LocalAuth will be bypassed on unsupported platforms (desktop) - Switched to sodium and sodium-libs from flutter_sodium. - QR code library is incompatible with desktop, So I removed access to those pages. - Bumped some dependencies and done some lint fixes - Also add save key option as send file may not help on desktop (related #380) https://github.com/ente-io/auth/assets/41370460/3f3471e8-45f6-4146-88ac-b763d4f38b32 - Update Recovery Key Card UI  So this is a step towards more updated code and better multiplatform support. ## Type of Change <!--- Put an `x` in all the boxes that apply: --> - [ ] 🖼️ New icon - [x] ✨ New feature (non-breaking change which adds functionality) - [ ] 🛠️ Bug fix (non-breaking change which fixes an issue) - [ ] ❌ Breaking change (fix or feature that would cause existing functionality to change) - [x] 🧹 Code refactor - [ ] ✅ Build configuration change - [ ] 📝 Documentation - [ ] 🗑️ Chore --------- Co-authored-by: Neeraj Gupta <254676+ua741@users.noreply.github.com>
56 lines
1.3 KiB
Dart
56 lines
1.3 KiB
Dart
import 'package:ente_auth/ui/linear_progress_widget.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/scheduler.dart';
|
|
|
|
class CodeTimerProgress extends StatefulWidget {
|
|
final int period;
|
|
|
|
CodeTimerProgress({
|
|
super.key,
|
|
required this.period,
|
|
});
|
|
|
|
@override
|
|
State createState() => _CodeTimerProgressState();
|
|
}
|
|
|
|
class _CodeTimerProgressState extends State<CodeTimerProgress>
|
|
with SingleTickerProviderStateMixin {
|
|
late final Ticker _ticker;
|
|
double _progress = 0.0;
|
|
late final int _microSecondsInPeriod;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_microSecondsInPeriod = widget.period * 1000000;
|
|
_ticker = createTicker((elapsed) {
|
|
_updateTimeRemaining();
|
|
});
|
|
_ticker.start();
|
|
_updateTimeRemaining();
|
|
}
|
|
|
|
void _updateTimeRemaining() {
|
|
int timeRemaining = (_microSecondsInPeriod) -
|
|
(DateTime.now().microsecondsSinceEpoch % _microSecondsInPeriod);
|
|
setState(() {
|
|
_progress = (timeRemaining / _microSecondsInPeriod);
|
|
});
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
_ticker.dispose();
|
|
super.dispose();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return LinearProgressWidget(
|
|
color: _progress > 0.4 ? Colors.green : Colors.orange,
|
|
fractionOfStorage: _progress,
|
|
);
|
|
}
|
|
}
|