ente/lib/ui/share_folder_widget.dart

126 lines
3.4 KiB
Dart
Raw Normal View History

2020-05-17 12:39:38 +00:00
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
2020-06-06 14:16:19 +00:00
import 'package:fluttertoast/fluttertoast.dart';
2020-05-17 14:35:31 +00:00
import 'package:photos/folder_service.dart';
2020-05-22 18:22:55 +00:00
import 'package:photos/models/folder.dart';
2020-05-17 12:39:38 +00:00
import 'package:photos/ui/loading_widget.dart';
2020-05-17 14:35:31 +00:00
class ShareFolderWidget extends StatefulWidget {
2020-05-17 12:39:38 +00:00
final String title;
final String path;
2020-05-17 14:35:31 +00:00
const ShareFolderWidget(
2020-05-17 12:39:38 +00:00
this.title,
this.path, {
Key key,
}) : super(key: key);
@override
2020-05-17 14:35:31 +00:00
_ShareFolderWidgetState createState() => _ShareFolderWidgetState();
2020-05-17 12:39:38 +00:00
}
2020-05-17 14:35:31 +00:00
class _ShareFolderWidgetState extends State<ShareFolderWidget> {
2020-05-22 18:22:55 +00:00
Folder _folder;
2020-05-17 20:39:21 +00:00
2020-05-17 12:39:38 +00:00
@override
Widget build(BuildContext context) {
return FutureBuilder<Map<String, bool>>(
2020-05-22 18:22:55 +00:00
future:
FolderSharingService.instance.getFolder(widget.path).then((folder) {
_folder = folder;
return FolderSharingService.instance.getSharingStatus(folder);
}),
2020-05-17 12:39:38 +00:00
builder: (context, snapshot) {
if (snapshot.hasData) {
return _getSharingDialog(snapshot.data);
} else if (snapshot.hasError) {
return Text(snapshot.error.toString());
} else {
return loadWidget;
}
},
);
}
Widget _getSharingDialog(Map<String, bool> sharingStatus) {
return AlertDialog(
title: Text('Share "' + widget.title + '" with'),
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
SharingCheckboxWidget(sharingStatus),
],
),
),
actions: <Widget>[
FlatButton(
child: Text("Share"),
2020-05-17 20:39:21 +00:00
onPressed: () async {
var sharedWith = Set<String>();
2020-05-22 18:22:55 +00:00
for (var user in sharingStatus.keys) {
if (sharingStatus[user]) {
2020-05-17 20:39:21 +00:00
sharedWith.add(user);
}
}
2020-05-22 18:22:55 +00:00
_folder.sharedWith.clear();
_folder.sharedWith.addAll(sharedWith);
await FolderSharingService.instance.updateFolder(_folder);
2020-06-06 14:16:19 +00:00
Fluttertoast.showToast(
msg: "Sharing configuration updated successfully.",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
timeInSecForIosWeb: 1,
backgroundColor: Colors.grey[600],
textColor: Colors.white,
fontSize: 16.0);
2020-05-17 12:39:38 +00:00
Navigator.of(context).pop();
},
),
],
);
}
}
class SharingCheckboxWidget extends StatefulWidget {
final Map<String, bool> sharingStatus;
const SharingCheckboxWidget(
this.sharingStatus, {
Key key,
}) : super(key: key);
@override
_SharingCheckboxWidgetState createState() => _SharingCheckboxWidgetState();
}
class _SharingCheckboxWidgetState extends State<SharingCheckboxWidget> {
Map<String, bool> _sharingStatus;
@override
void initState() {
_sharingStatus = widget.sharingStatus;
super.initState();
}
@override
Widget build(BuildContext context) {
final checkboxes = List<Widget>();
for (final user in _sharingStatus.keys) {
checkboxes.add(Row(
children: <Widget>[
Checkbox(
materialTapTargetSize: MaterialTapTargetSize.padded,
value: _sharingStatus[user],
onChanged: (value) {
setState(() {
_sharingStatus[user] = value;
});
}),
Text(user),
],
));
}
return Column(children: checkboxes);
}
}