Merge branch 'db_and_services' into mirage_logging_null_safety
This commit is contained in:
commit
aa80a6cc4d
|
@ -1,5 +1,3 @@
|
||||||
// @dart=2.9
|
|
||||||
|
|
||||||
import 'package:firebase_core/firebase_core.dart';
|
import 'package:firebase_core/firebase_core.dart';
|
||||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
|
@ -21,7 +19,7 @@ class PushService {
|
||||||
static final PushService instance = PushService._privateConstructor();
|
static final PushService instance = PushService._privateConstructor();
|
||||||
static final _logger = Logger("PushService");
|
static final _logger = Logger("PushService");
|
||||||
|
|
||||||
SharedPreferences _prefs;
|
late SharedPreferences _prefs;
|
||||||
|
|
||||||
PushService._privateConstructor();
|
PushService._privateConstructor();
|
||||||
|
|
||||||
|
@ -46,14 +44,15 @@ class PushService {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _configurePushToken() async {
|
Future<void> _configurePushToken() async {
|
||||||
final fcmToken = await FirebaseMessaging.instance.getToken();
|
final String? fcmToken = await FirebaseMessaging.instance.getToken();
|
||||||
final shouldForceRefreshServerToken =
|
final shouldForceRefreshServerToken =
|
||||||
DateTime.now().microsecondsSinceEpoch -
|
DateTime.now().microsecondsSinceEpoch -
|
||||||
(_prefs.getInt(kLastFCMTokenUpdationTime) ?? 0) >
|
(_prefs.getInt(kLastFCMTokenUpdationTime) ?? 0) >
|
||||||
kFCMTokenUpdationIntervalInMicroSeconds;
|
kFCMTokenUpdationIntervalInMicroSeconds;
|
||||||
if (_prefs.getString(kFCMPushToken) != fcmToken ||
|
if (fcmToken != null &&
|
||||||
shouldForceRefreshServerToken) {
|
(_prefs.getString(kFCMPushToken) != fcmToken ||
|
||||||
final apnsToken = await FirebaseMessaging.instance.getAPNSToken();
|
shouldForceRefreshServerToken)) {
|
||||||
|
final String? apnsToken = await FirebaseMessaging.instance.getAPNSToken();
|
||||||
try {
|
try {
|
||||||
_logger.info("Updating token on server");
|
_logger.info("Updating token on server");
|
||||||
await _setPushTokenOnServer(fcmToken, apnsToken);
|
await _setPushTokenOnServer(fcmToken, apnsToken);
|
||||||
|
@ -71,7 +70,10 @@ class PushService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _setPushTokenOnServer(String fcmToken, String apnsToken) async {
|
Future<void> _setPushTokenOnServer(
|
||||||
|
String fcmToken,
|
||||||
|
String? apnsToken,
|
||||||
|
) async {
|
||||||
await Network.instance.enteDio.post(
|
await Network.instance.enteDio.post(
|
||||||
"/push/token",
|
"/push/token",
|
||||||
data: {
|
data: {
|
||||||
|
|
|
@ -65,6 +65,7 @@ class _RecoveryKeyPageState extends State<RecoveryKeyPage> {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: widget.showProgressBar
|
appBar: widget.showProgressBar
|
||||||
? AppBar(
|
? AppBar(
|
||||||
|
automaticallyImplyLeading: false,
|
||||||
elevation: 0,
|
elevation: 0,
|
||||||
title: Hero(
|
title: Hero(
|
||||||
tag: "recovery_key",
|
tag: "recovery_key",
|
||||||
|
@ -97,6 +98,7 @@ class _RecoveryKeyPageState extends State<RecoveryKeyPage> {
|
||||||
child: IntrinsicHeight(
|
child: IntrinsicHeight(
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisSize: MainAxisSize.max,
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
widget.showAppBar
|
widget.showAppBar
|
||||||
? const SizedBox.shrink()
|
? const SizedBox.shrink()
|
||||||
|
|
|
@ -14,37 +14,13 @@ enum ActionSheetType {
|
||||||
iconOnly,
|
iconOnly,
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<ButtonAction?> showCommonActionSheet({
|
///Returns null if dismissed
|
||||||
required BuildContext context,
|
|
||||||
required List<ButtonWidget> buttons,
|
|
||||||
required ActionSheetType actionSheetType,
|
|
||||||
bool isCheckIconGreen = false,
|
|
||||||
String? title,
|
|
||||||
String? body,
|
|
||||||
}) {
|
|
||||||
return showMaterialModalBottomSheet(
|
|
||||||
backgroundColor: Colors.transparent,
|
|
||||||
barrierColor: backdropFaintDark,
|
|
||||||
useRootNavigator: true,
|
|
||||||
context: context,
|
|
||||||
builder: (_) {
|
|
||||||
return ActionSheetWidget(
|
|
||||||
title: title,
|
|
||||||
body: body,
|
|
||||||
actionButtons: buttons,
|
|
||||||
actionSheetType: actionSheetType,
|
|
||||||
isCheckIconGreen: isCheckIconGreen,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
isDismissible: false,
|
|
||||||
enableDrag: false,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<ButtonAction?> showActionSheet({
|
Future<ButtonAction?> showActionSheet({
|
||||||
required BuildContext context,
|
required BuildContext context,
|
||||||
required List<ButtonWidget> buttons,
|
required List<ButtonWidget> buttons,
|
||||||
required ActionSheetType actionSheetType,
|
required ActionSheetType actionSheetType,
|
||||||
|
bool enableDrag = true,
|
||||||
|
bool isDismissible = true,
|
||||||
bool isCheckIconGreen = false,
|
bool isCheckIconGreen = false,
|
||||||
String? title,
|
String? title,
|
||||||
String? body,
|
String? body,
|
||||||
|
@ -54,6 +30,8 @@ Future<ButtonAction?> showActionSheet({
|
||||||
barrierColor: backdropFaintDark,
|
barrierColor: backdropFaintDark,
|
||||||
useRootNavigator: true,
|
useRootNavigator: true,
|
||||||
context: context,
|
context: context,
|
||||||
|
isDismissible: isDismissible,
|
||||||
|
enableDrag: enableDrag,
|
||||||
builder: (_) {
|
builder: (_) {
|
||||||
return ActionSheetWidget(
|
return ActionSheetWidget(
|
||||||
title: title,
|
title: title,
|
||||||
|
@ -63,8 +41,6 @@ Future<ButtonAction?> showActionSheet({
|
||||||
isCheckIconGreen: isCheckIconGreen,
|
isCheckIconGreen: isCheckIconGreen,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
isDismissible: false,
|
|
||||||
enableDrag: false,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,14 +9,17 @@ import 'package:photos/ui/components/button_widget.dart';
|
||||||
import 'package:photos/ui/components/models/button_type.dart';
|
import 'package:photos/ui/components/models/button_type.dart';
|
||||||
import 'package:photos/utils/separators_util.dart';
|
import 'package:photos/utils/separators_util.dart';
|
||||||
|
|
||||||
|
///Will return null if dismissed by tapping outside
|
||||||
Future<ButtonAction?> showGenericErrorDialog({
|
Future<ButtonAction?> showGenericErrorDialog({
|
||||||
required BuildContext context,
|
required BuildContext context,
|
||||||
|
bool isDismissible = true,
|
||||||
}) async {
|
}) async {
|
||||||
return showDialogWidget(
|
return showDialogWidget(
|
||||||
context: context,
|
context: context,
|
||||||
title: "Error",
|
title: "Error",
|
||||||
icon: Icons.error_outline_outlined,
|
icon: Icons.error_outline_outlined,
|
||||||
body: "It looks like something went wrong. Please try again.",
|
body: "It looks like something went wrong. Please try again.",
|
||||||
|
isDismissible: isDismissible,
|
||||||
buttons: const [
|
buttons: const [
|
||||||
ButtonWidget(
|
ButtonWidget(
|
||||||
buttonType: ButtonType.secondary,
|
buttonType: ButtonType.secondary,
|
||||||
|
@ -27,6 +30,7 @@ Future<ButtonAction?> showGenericErrorDialog({
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///Will return null if dismissed by tapping outside
|
||||||
Future<ButtonAction?> showNewChoiceDialog({
|
Future<ButtonAction?> showNewChoiceDialog({
|
||||||
required BuildContext context,
|
required BuildContext context,
|
||||||
required String title,
|
required String title,
|
||||||
|
@ -41,6 +45,7 @@ Future<ButtonAction?> showNewChoiceDialog({
|
||||||
FutureVoidCallback? secondButtonOnTap,
|
FutureVoidCallback? secondButtonOnTap,
|
||||||
bool isCritical = false,
|
bool isCritical = false,
|
||||||
IconData? icon,
|
IconData? icon,
|
||||||
|
bool isDismissible = true,
|
||||||
}) async {
|
}) async {
|
||||||
final buttons = [
|
final buttons = [
|
||||||
ButtonWidget(
|
ButtonWidget(
|
||||||
|
@ -64,18 +69,21 @@ Future<ButtonAction?> showNewChoiceDialog({
|
||||||
body: body,
|
body: body,
|
||||||
buttons: buttons,
|
buttons: buttons,
|
||||||
icon: icon,
|
icon: icon,
|
||||||
|
isDismissible: isDismissible,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///Will return null if dismissed by tapping outside
|
||||||
Future<ButtonAction?> showDialogWidget({
|
Future<ButtonAction?> showDialogWidget({
|
||||||
required BuildContext context,
|
required BuildContext context,
|
||||||
required String title,
|
required String title,
|
||||||
String? body,
|
String? body,
|
||||||
required List<ButtonWidget> buttons,
|
required List<ButtonWidget> buttons,
|
||||||
IconData? icon,
|
IconData? icon,
|
||||||
|
bool isDismissible = true,
|
||||||
}) {
|
}) {
|
||||||
return showDialog(
|
return showDialog(
|
||||||
barrierDismissible: false,
|
barrierDismissible: isDismissible,
|
||||||
barrierColor: backdropFaintDark,
|
barrierColor: backdropFaintDark,
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
|
|
Loading…
Reference in a new issue