[mob][photos] Show 'This is me' button in SaveOrEditPersonScreen only if the current user isn't assigned a face

This commit is contained in:
ashilkn
2025-01-21 12:05:23 +05:30
parent ab8525ca3d
commit 0ab9fbec49
2 changed files with 91 additions and 35 deletions

View File

@@ -18,7 +18,7 @@ import "package:photos/ui/components/text_input_widget.dart";
import 'package:photos/ui/sharing/user_avator_widget.dart';
class LinkEmailScreen extends StatefulWidget {
final String personID;
final String? personID;
final bool isFromSaveEditPerson;
const LinkEmailScreen(
this.personID, {
@@ -205,7 +205,7 @@ class _LinkEmailScreen extends State<LinkEmailScreen> {
final result =
await personContactLinkingActions.linkEmailToPerson(
newEmail,
widget.personID,
widget.personID!,
context,
);
if (!result) {

View File

@@ -4,6 +4,7 @@ import "dart:developer";
import "package:flutter/foundation.dart";
import "package:flutter/material.dart";
import "package:logging/logging.dart";
import "package:photos/core/configuration.dart";
import "package:photos/core/event_bus.dart";
import "package:photos/ente_theme_data.dart";
import "package:photos/events/people_changed_event.dart";
@@ -669,6 +670,7 @@ class _EmailSection extends StatefulWidget {
class _EmailSectionState extends State<_EmailSection> {
String? _email;
final _logger = Logger("_EmailSectionState");
@override
void initState() {
@@ -699,40 +701,80 @@ class _EmailSectionState extends State<_EmailSection> {
),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Expanded(
child: ButtonWidget(
buttonType: ButtonType.secondary,
labelText: "This is me!",
),
),
const SizedBox(width: 8),
Expanded(
child: ButtonWidget(
buttonType: ButtonType.primary,
labelText: "Link email",
shouldSurfaceExecutionStates: false,
onTap: () async {
final newEmail = await routeToPage(
context,
LinkEmailScreen(
widget.personID,
isFromSaveEditPerson: true,
child: FutureBuilder<bool>(
future: _isMeAssigned(),
builder: (context, snapshot) {
if (snapshot.hasData) {
final isMeAssigned = snapshot.data!;
if (isMeAssigned) {
return ButtonWidget(
buttonType: ButtonType.primary,
labelText: "Link email",
shouldSurfaceExecutionStates: false,
onTap: () async {
final newEmail = await routeToPage(
context,
LinkEmailScreen(
widget.personID,
isFromSaveEditPerson: true,
),
);
if (newEmail != null) {
final saveOrEditPersonState =
context.findAncestorStateOfType<
_SaveOrEditPersonState>()!;
saveOrEditPersonState.setState(() {
saveOrEditPersonState._email = newEmail as String;
});
}
},
);
} else {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Expanded(
child: ButtonWidget(
buttonType: ButtonType.secondary,
labelText: "This is me!",
),
),
);
if (newEmail != null) {
final saveOrEditPersonState = context
.findAncestorStateOfType<_SaveOrEditPersonState>()!;
saveOrEditPersonState.setState(() {
saveOrEditPersonState._email = newEmail as String;
});
}
},
),
),
],
const SizedBox(width: 8),
Expanded(
child: ButtonWidget(
buttonType: ButtonType.primary,
labelText: "Link email",
shouldSurfaceExecutionStates: false,
onTap: () async {
final newEmail = await routeToPage(
context,
LinkEmailScreen(
widget.personID,
isFromSaveEditPerson: true,
),
);
if (newEmail != null) {
final saveOrEditPersonState =
context.findAncestorStateOfType<
_SaveOrEditPersonState>()!;
saveOrEditPersonState.setState(() {
saveOrEditPersonState._email =
newEmail as String;
});
}
},
),
),
],
);
}
} else if (snapshot.hasError) {
_logger.severe("Error getting isMeAssigned", snapshot.error);
return const RepaintBoundary(child: EnteLoadingWidget());
} else {
return const RepaintBoundary(child: EnteLoadingWidget());
}
},
),
),
),
@@ -808,4 +850,18 @@ class _EmailSectionState extends State<_EmailSection> {
});
}
}
Future<bool> _isMeAssigned() async {
final personEntities = await PersonService.instance.getPersons();
final currentUserEmail = Configuration.instance.getEmail();
bool isAssigned = false;
for (final personEntity in personEntities) {
if (personEntity.data.email == currentUserEmail) {
isAssigned = true;
break;
}
}
return isAssigned;
}
}