Add UI skeleton for add participant page
This commit is contained in:
parent
3546b5ef33
commit
a63222bb3a
190
lib/ui/sharing/add_partipant_page.dart
Normal file
190
lib/ui/sharing/add_partipant_page.dart
Normal file
|
@ -0,0 +1,190 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:photos/core/configuration.dart';
|
||||
import 'package:photos/models/collection.dart';
|
||||
import 'package:photos/services/collections_service.dart';
|
||||
import 'package:photos/services/update_service.dart';
|
||||
import 'package:photos/theme/ente_theme.dart';
|
||||
import 'package:photos/ui/common/gradient_button.dart';
|
||||
import 'package:photos/ui/components/captioned_text_widget.dart';
|
||||
import 'package:photos/ui/components/divider_widget.dart';
|
||||
import 'package:photos/ui/components/menu_item_widget.dart';
|
||||
import 'package:photos/ui/components/menu_section_description_widget.dart';
|
||||
import 'package:photos/ui/components/menu_section_title.dart';
|
||||
import 'package:photos/ui/sharing/user_avator_widget.dart';
|
||||
import 'package:photos/utils/toast_util.dart';
|
||||
|
||||
class AddParticipantPage extends StatefulWidget {
|
||||
const AddParticipantPage({super.key});
|
||||
|
||||
@override
|
||||
State<StatefulWidget> createState() => _AddParticipantPage();
|
||||
}
|
||||
|
||||
class _AddParticipantPage extends State<AddParticipantPage> {
|
||||
late bool selectAsViewer;
|
||||
String selectedEmail = '';
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
selectAsViewer = true;
|
||||
super.initState();
|
||||
}
|
||||
|
||||
Widget build(BuildContext context) {
|
||||
final enteColorScheme = getEnteColorScheme(context);
|
||||
final enteTextTheme = getEnteTextTheme(context);
|
||||
final int ownerID = Configuration.instance.getUserID()!;
|
||||
final List<String> emails = [];
|
||||
for (final c in CollectionsService.instance.getActiveCollections()) {
|
||||
if (c.owner?.id == ownerID) {
|
||||
c.sharees?.forEach((e) => emails.add(e!.email));
|
||||
} else {
|
||||
emails.add(c.owner!.email);
|
||||
}
|
||||
}
|
||||
final List<String> finalList = emails.toSet().toList();
|
||||
finalList.sort();
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text("Add people"),
|
||||
),
|
||||
body: Container(
|
||||
color: enteColorScheme.backgroundElevated,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
const SizedBox(height: 12),
|
||||
Text(
|
||||
"Add a new email",
|
||||
style: enteTextTheme.body,
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
const MenuSectionTitle(title: "or pick an existing one"),
|
||||
Expanded(
|
||||
child: ListView.builder(
|
||||
itemBuilder: (context, index) {
|
||||
final currentEmail = finalList[index];
|
||||
return Column(
|
||||
children: [
|
||||
MenuItemWidget(
|
||||
captionedTextWidget: CaptionedTextWidget(
|
||||
title: finalList[index],
|
||||
),
|
||||
leadingIconSize: 24.0,
|
||||
leadingIconWidget: UserAvatarWidget(
|
||||
User(
|
||||
id: currentEmail.hashCode,
|
||||
email: currentEmail,
|
||||
),
|
||||
type: AvatarType.mini,
|
||||
),
|
||||
menuItemColor: getEnteColorScheme(context).fillFaint,
|
||||
pressedColor: getEnteColorScheme(context).fillFaint,
|
||||
trailingIcon: (selectedEmail == finalList[index])
|
||||
? Icons.check
|
||||
: null,
|
||||
onTap: () async {
|
||||
if(selectedEmail == finalList[index]) {
|
||||
selectedEmail = '';
|
||||
} else {
|
||||
selectedEmail = finalList[index];
|
||||
}
|
||||
|
||||
setState(() => {});
|
||||
// showShortToast(context, "yet to implement");
|
||||
},
|
||||
isTopBorderRadiusRemoved: index > 0,
|
||||
isBottomBorderRadiusRemoved:
|
||||
index < (finalList.length - 1),
|
||||
),
|
||||
(index == (finalList.length - 1))
|
||||
? const SizedBox.shrink()
|
||||
: DividerWidget(
|
||||
dividerType: DividerType.menu,
|
||||
bgColor:
|
||||
getEnteColorScheme(context).blurStrokeFaint,
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
itemCount: finalList.length,
|
||||
|
||||
// physics: const ClampingScrollPhysics(),
|
||||
),
|
||||
),
|
||||
const DividerWidget(
|
||||
dividerType: DividerType.solid,
|
||||
),
|
||||
SafeArea(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(top: 8, bottom: 8),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
const MenuSectionTitle(title: "Add as"),
|
||||
MenuItemWidget(
|
||||
captionedTextWidget: const CaptionedTextWidget(
|
||||
title: "Collaborator",
|
||||
),
|
||||
leadingIcon: Icons.edit,
|
||||
menuItemColor: getEnteColorScheme(context).fillFaint,
|
||||
pressedColor: getEnteColorScheme(context).fillFaint,
|
||||
trailingIcon: !selectAsViewer ? Icons.check : null,
|
||||
onTap: () async {
|
||||
showShortToast(context, "coming soon!");
|
||||
setState(() => {selectAsViewer = false});
|
||||
},
|
||||
isBottomBorderRadiusRemoved: true,
|
||||
),
|
||||
DividerWidget(
|
||||
dividerType: DividerType.menu,
|
||||
bgColor: getEnteColorScheme(context).blurStrokeFaint,
|
||||
),
|
||||
MenuItemWidget(
|
||||
captionedTextWidget: const CaptionedTextWidget(
|
||||
title: " Viewer",
|
||||
),
|
||||
leadingIcon: Icons.photo,
|
||||
menuItemColor: getEnteColorScheme(context).fillFaint,
|
||||
pressedColor: getEnteColorScheme(context).fillFaint,
|
||||
trailingIcon: selectAsViewer ? Icons.check : null,
|
||||
onTap: () async {
|
||||
setState(() => {selectAsViewer = true});
|
||||
// showShortToast(context, "yet to implement");
|
||||
},
|
||||
isTopBorderRadiusRemoved: true,
|
||||
),
|
||||
const MenuSectionDescriptionWidget(
|
||||
content:
|
||||
"Collaborators can add photos and videos to the shared album.",
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
SizedBox(
|
||||
width: double.infinity,
|
||||
child: GradientButton(
|
||||
onTap: selectedEmail == ''
|
||||
? null
|
||||
: () async {
|
||||
await UpdateService.instance.hideChangeLog();
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
text: selectAsViewer
|
||||
? "Add viewer"
|
||||
: "Add collaborator",
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue