118 - Implement shared album feature ()

* New features 
  - Share album. Users can now create albums to share with existing people on the network.
  - Owner can delete the album.
  - Owner can invite the additional users to the album.
  - Shared users and the owner can add additional assets to the album.
* In the asset viewer, the user can swipe up to see detailed information and swip down to dismiss.
* Several UI enhancements.
This commit is contained in:
Alex 2022-04-23 21:08:45 -05:00 committed by GitHub
parent a3b84b3ca7
commit 4309104925
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
87 changed files with 3717 additions and 199 deletions
mobile/lib/routing

View file

@ -57,6 +57,42 @@ class _$AppRouter extends RootStackRouter {
routeData: routeData,
child: SearchResultPage(key: args.key, searchTerm: args.searchTerm));
},
CreateSharedAlbumRoute.name: (routeData) {
return MaterialPageX<dynamic>(
routeData: routeData, child: const CreateSharedAlbumPage());
},
AssetSelectionRoute.name: (routeData) {
return CustomPage<AssetSelectionPageResult?>(
routeData: routeData,
child: const AssetSelectionPage(),
transitionsBuilder: TransitionsBuilders.slideBottom,
opaque: true,
barrierDismissible: false);
},
SelectUserForSharingRoute.name: (routeData) {
return CustomPage<List<String>>(
routeData: routeData,
child: const SelectUserForSharingPage(),
transitionsBuilder: TransitionsBuilders.slideBottom,
opaque: true,
barrierDismissible: false);
},
AlbumViewerRoute.name: (routeData) {
final args = routeData.argsAs<AlbumViewerRouteArgs>();
return MaterialPageX<dynamic>(
routeData: routeData,
child: AlbumViewerPage(key: args.key, albumId: args.albumId));
},
SelectAdditionalUserForSharingRoute.name: (routeData) {
final args = routeData.argsAs<SelectAdditionalUserForSharingRouteArgs>();
return CustomPage<List<String>?>(
routeData: routeData,
child: SelectAdditionalUserForSharingPage(
key: args.key, albumInfo: args.albumInfo),
transitionsBuilder: TransitionsBuilders.slideBottom,
opaque: true,
barrierDismissible: false);
},
HomeRoute.name: (routeData) {
return MaterialPageX<dynamic>(
routeData: routeData, child: const HomePage());
@ -66,6 +102,10 @@ class _$AppRouter extends RootStackRouter {
orElse: () => const SearchRouteArgs());
return MaterialPageX<dynamic>(
routeData: routeData, child: SearchPage(key: args.key));
},
SharingRoute.name: (routeData) {
return MaterialPageX<dynamic>(
routeData: routeData, child: const SharingPage());
}
};
@ -85,6 +125,10 @@ class _$AppRouter extends RootStackRouter {
RouteConfig(SearchRoute.name,
path: 'search-page',
parent: TabControllerRoute.name,
guards: [authGuard]),
RouteConfig(SharingRoute.name,
path: 'sharing-page',
parent: TabControllerRoute.name,
guards: [authGuard])
]),
RouteConfig(ImageViewerRoute.name,
@ -94,7 +138,18 @@ class _$AppRouter extends RootStackRouter {
RouteConfig(BackupControllerRoute.name,
path: '/backup-controller-page', guards: [authGuard]),
RouteConfig(SearchResultRoute.name,
path: '/search-result-page', guards: [authGuard])
path: '/search-result-page', guards: [authGuard]),
RouteConfig(CreateSharedAlbumRoute.name,
path: '/create-shared-album-page', guards: [authGuard]),
RouteConfig(AssetSelectionRoute.name,
path: '/asset-selection-page', guards: [authGuard]),
RouteConfig(SelectUserForSharingRoute.name,
path: '/select-user-for-sharing-page', guards: [authGuard]),
RouteConfig(AlbumViewerRoute.name,
path: '/album-viewer-page', guards: [authGuard]),
RouteConfig(SelectAdditionalUserForSharingRoute.name,
path: '/select-additional-user-for-sharing-page',
guards: [authGuard])
];
}
@ -223,6 +278,86 @@ class SearchResultRouteArgs {
}
}
/// generated route for
/// [CreateSharedAlbumPage]
class CreateSharedAlbumRoute extends PageRouteInfo<void> {
const CreateSharedAlbumRoute()
: super(CreateSharedAlbumRoute.name, path: '/create-shared-album-page');
static const String name = 'CreateSharedAlbumRoute';
}
/// generated route for
/// [AssetSelectionPage]
class AssetSelectionRoute extends PageRouteInfo<void> {
const AssetSelectionRoute()
: super(AssetSelectionRoute.name, path: '/asset-selection-page');
static const String name = 'AssetSelectionRoute';
}
/// generated route for
/// [SelectUserForSharingPage]
class SelectUserForSharingRoute extends PageRouteInfo<void> {
const SelectUserForSharingRoute()
: super(SelectUserForSharingRoute.name,
path: '/select-user-for-sharing-page');
static const String name = 'SelectUserForSharingRoute';
}
/// generated route for
/// [AlbumViewerPage]
class AlbumViewerRoute extends PageRouteInfo<AlbumViewerRouteArgs> {
AlbumViewerRoute({Key? key, required String albumId})
: super(AlbumViewerRoute.name,
path: '/album-viewer-page',
args: AlbumViewerRouteArgs(key: key, albumId: albumId));
static const String name = 'AlbumViewerRoute';
}
class AlbumViewerRouteArgs {
const AlbumViewerRouteArgs({this.key, required this.albumId});
final Key? key;
final String albumId;
@override
String toString() {
return 'AlbumViewerRouteArgs{key: $key, albumId: $albumId}';
}
}
/// generated route for
/// [SelectAdditionalUserForSharingPage]
class SelectAdditionalUserForSharingRoute
extends PageRouteInfo<SelectAdditionalUserForSharingRouteArgs> {
SelectAdditionalUserForSharingRoute(
{Key? key, required SharedAlbum albumInfo})
: super(SelectAdditionalUserForSharingRoute.name,
path: '/select-additional-user-for-sharing-page',
args: SelectAdditionalUserForSharingRouteArgs(
key: key, albumInfo: albumInfo));
static const String name = 'SelectAdditionalUserForSharingRoute';
}
class SelectAdditionalUserForSharingRouteArgs {
const SelectAdditionalUserForSharingRouteArgs(
{this.key, required this.albumInfo});
final Key? key;
final SharedAlbum albumInfo;
@override
String toString() {
return 'SelectAdditionalUserForSharingRouteArgs{key: $key, albumInfo: $albumInfo}';
}
}
/// generated route for
/// [HomePage]
class HomeRoute extends PageRouteInfo<void> {
@ -251,3 +386,11 @@ class SearchRouteArgs {
return 'SearchRouteArgs{key: $key}';
}
}
/// generated route for
/// [SharingPage]
class SharingRoute extends PageRouteInfo<void> {
const SharingRoute() : super(SharingRoute.name, path: 'sharing-page');
static const String name = 'SharingRoute';
}