diff --git a/lib/route.dart b/lib/route.dart index e1ad9df1..5841ec4f 100644 --- a/lib/route.dart +++ b/lib/route.dart @@ -42,7 +42,6 @@ import 'package:island/screens/stickers/pack_detail.dart'; import 'package:island/screens/discovery/feeds/feed_marketplace.dart'; import 'package:island/screens/discovery/feeds/feed_detail.dart'; import 'package:island/screens/creators/poll/poll_list.dart'; -import 'package:island/screens/creators/publishers_form.dart'; import 'package:island/screens/creators/webfeed/webfeed_list.dart'; import 'package:island/screens/poll/poll_editor.dart'; import 'package:island/screens/posts/compose.dart'; @@ -507,19 +506,6 @@ final routerProvider = Provider((ref) { return StickersScreen(pubName: name); }, ), - GoRoute( - name: 'creatorNew', - path: 'new', - builder: (context, state) => const NewPublisherScreen(), - ), - GoRoute( - name: 'creatorEdit', - path: ':name/edit', - builder: (context, state) { - final name = state.pathParameters['name']!; - return EditPublisherScreen(name: name); - }, - ), ], ), diff --git a/lib/screens/creators/hub.dart b/lib/screens/creators/hub.dart index 2c7f02b0..9bfea88d 100644 --- a/lib/screens/creators/hub.dart +++ b/lib/screens/creators/hub.dart @@ -261,7 +261,11 @@ class _PublisherUnselectedWidget extends HookConsumerWidget { subtitle: Text('createPublisherHint').tr(), trailing: const Icon(Symbols.chevron_right), onTap: () { - context.pushNamed('creatorNew').then((value) { + showModalBottomSheet( + context: context, + isScrollControlled: true, + builder: (context) => const NewPublisherScreen(), + ).then((value) { if (value != null) { ref.invalidate(publishersManagedProvider); } @@ -285,19 +289,18 @@ class CreatorHubScreen extends HookConsumerWidget { ); void updatePublisher() { - context - .pushNamed( - 'creatorEdit', - pathParameters: {'name': currentPublisher.value!.name}, - ) - .then((value) async { - if (value == null) return; - final data = await ref.refresh(publishersManagedProvider.future); - currentPublisher.value = - data - .where((e) => e.id == currentPublisher.value!.id) - .firstOrNull; - }); + showModalBottomSheet( + context: context, + isScrollControlled: true, + builder: + (context) => + EditPublisherScreen(name: currentPublisher.value!.name), + ).then((value) async { + if (value == null) return; + final data = await ref.refresh(publishersManagedProvider.future); + currentPublisher.value = + data.where((e) => e.id == currentPublisher.value!.id).firstOrNull; + }); } void deletePublisher() { diff --git a/lib/screens/creators/publishers_form.dart b/lib/screens/creators/publishers_form.dart index 9a420975..b3a30930 100644 --- a/lib/screens/creators/publishers_form.dart +++ b/lib/screens/creators/publishers_form.dart @@ -16,8 +16,8 @@ import 'package:island/screens/realm/realms.dart'; import 'package:island/services/file.dart'; import 'package:island/services/file_uploader.dart'; import 'package:island/widgets/alert.dart'; -import 'package:island/widgets/app_scaffold.dart'; import 'package:island/widgets/content/cloud_files.dart'; +import 'package:island/widgets/content/sheet.dart'; import 'package:material_symbols_icons/symbols.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:styled_widget/styled_widget.dart'; @@ -177,13 +177,11 @@ class EditPublisherScreen extends HookConsumerWidget { } } - return AppScaffold( - isNoBackground: false, - appBar: AppBar( - title: Text(name == null ? 'createPublisher' : 'editPublisher').tr(), - leading: const PageBackButton(), - ), - body: SingleChildScrollView( + final titleText = (name == null ? 'createPublisher' : 'editPublisher').tr(); + + return SheetScaffold( + titleText: titleText, + child: SingleChildScrollView( padding: EdgeInsets.only(bottom: 16), child: Column( children: [ diff --git a/lib/services/file_uploader.dart b/lib/services/file_uploader.dart index 5770cbf3..34fbe771 100644 --- a/lib/services/file_uploader.dart +++ b/lib/services/file_uploader.dart @@ -128,7 +128,13 @@ class FileUploader { /// Completes the upload and returns the CloudFile object. Future completeUpload(String taskId) async { - final response = await _client.post('/drive/files/upload/complete/$taskId'); + final response = await _client.post( + '/drive/files/upload/complete/$taskId', + options: Options( + sendTimeout: Duration(minutes: 1), + receiveTimeout: Duration(minutes: 1), + ), + ); return SnCloudFile.fromJson(response.data); } diff --git a/lib/widgets/post/compose_card.dart b/lib/widgets/post/compose_card.dart index face3388..7ad27b42 100644 --- a/lib/widgets/post/compose_card.dart +++ b/lib/widgets/post/compose_card.dart @@ -4,7 +4,6 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:gap/gap.dart'; -import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:island/models/file.dart'; import 'package:island/models/post.dart'; @@ -330,7 +329,13 @@ class PostComposeCard extends HookConsumerWidget { if (isContained) { Navigator.of(context).pop(); } - context.pushNamed('creatorNew').then((value) { + showModalBottomSheet( + context: context, + isScrollControlled: true, + useRootNavigator: true, + builder: + (context) => const NewPublisherScreen(), + ).then((value) { if (value != null) { composeState.currentPublisher.value = value as SnPublisher; @@ -368,9 +373,14 @@ class PostComposeCard extends HookConsumerWidget { if (isContained) { Navigator.of(context).pop(); } - context.pushNamed('creatorNew').then(( - value, - ) { + showModalBottomSheet( + context: context, + isScrollControlled: true, + useRootNavigator: true, + builder: + (context) => + const NewPublisherScreen(), + ).then((value) { if (value != null) { composeState.currentPublisher.value = value as SnPublisher; diff --git a/lib/widgets/post/compose_shared.dart b/lib/widgets/post/compose_shared.dart index 719eccea..5c824e38 100644 --- a/lib/widgets/post/compose_shared.dart +++ b/lib/widgets/post/compose_shared.dart @@ -123,7 +123,7 @@ class ComposeLogic { slugController: TextEditingController(text: originalPost?.slug), visibility: ValueNotifier(originalPost?.visibility ?? 0), submitting: ValueNotifier(false), - attachmentProgress: ValueNotifier>({}), + attachmentProgress: ValueNotifier>({}), currentPublisher: ValueNotifier(originalPost?.publisher), tags: ValueNotifier>(tags), categories: ValueNotifier>(categories), @@ -149,7 +149,7 @@ class ComposeLogic { slugController: TextEditingController(text: draft.slug), visibility: ValueNotifier(draft.visibility), submitting: ValueNotifier(false), - attachmentProgress: ValueNotifier>({}), + attachmentProgress: ValueNotifier>({}), currentPublisher: ValueNotifier(null), tags: ValueNotifier>(tags), categories: ValueNotifier>(draft.categories), @@ -500,7 +500,7 @@ class ComposeLogic { try { state.attachmentProgress.value = { ...state.attachmentProgress.value, - index: 0, + index: 0.0, }; SnCloudFile? cloudFile; diff --git a/lib/widgets/post/publishers_modal.dart b/lib/widgets/post/publishers_modal.dart index fc68c189..2560d9d9 100644 --- a/lib/widgets/post/publishers_modal.dart +++ b/lib/widgets/post/publishers_modal.dart @@ -3,7 +3,6 @@ import 'dart:math' as math; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; -import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:island/screens/creators/publishers_form.dart'; import 'package:island/widgets/content/cloud_files.dart'; @@ -43,9 +42,13 @@ class PublisherModal extends HookConsumerWidget { const Gap(12), ElevatedButton( onPressed: () { - context.pushNamed('creatorNew').then(( - value, - ) { + showModalBottomSheet( + context: context, + isScrollControlled: true, + builder: + (context) => + const NewPublisherScreen(), + ).then((value) { if (value != null) { ref.invalidate( publishersManagedProvider,