sendNews function
Future<void>
sendNews( - dynamic context,
- dynamic ref
)
Implementation
Future<void> sendNews(BuildContext context, WidgetRef ref) async {
// Hide Keyboard
SystemChannels.textInput.invokeMethod('TextInput.hide');
final newsSlideList = ref.read(newsStateProvider).newsSlideList;
final lang = L10n.of(context);
final spaceId = ref.read(newsStateProvider).newsPostSpaceId ??
await selectSpaceDrawer(
context: context,
canCheck: 'CanPostNews',
);
if (spaceId == null) {
EasyLoading.showToast(lang.pleaseFirstSelectASpace);
return;
}
// Show loading message
EasyLoading.show(status: lang.slidePosting);
final space = await ref.read(spaceProvider(spaceId).future);
NewsEntryDraft draft = space.newsDraft();
int slideIdx = 0;
for (final slidePost in newsSlideList) {
// for users
slideIdx += 1;
// If slide type is text
try {
final slide = await switch (slidePost.type) {
NewsSlideType.text => _makeTextSlide(ref, slidePost, lang),
NewsSlideType.image => _makeImageSlide(ref, slidePost, lang),
NewsSlideType.video => _makeVideoSlide(ref, slidePost, lang),
};
await draft.addSlide(slide);
} catch (err, s) {
_log.severe(
'Failed to process ${slidePost.type} at $slideIdx ',
err,
s,
);
EasyLoading.showError(
lang.errorProcessingSlide(slideIdx, err),
duration: const Duration(seconds: 3),
);
return;
}
}
try {
final eventId = await draft.send();
// we want to stay informed about this via push notifications
await autosubscribe(ref: ref, objectId: eventId.toString(), lang: lang);
} catch (e, s) {
_log.severe('Failed to send news', e, s);
EasyLoading.showError(
lang.creatingNewsFailed(e),
duration: const Duration(seconds: 3),
);
return;
}
// close loading
EasyLoading.dismiss();
// FIXME due to #718. well lets at least try forcing a refresh upon route.
ref.invalidate(newsStateProvider);
// Navigate back to update screen.
if (!context.mounted) return;
Navigator.pop(context);
context.pushReplacementNamed(Routes.main.name); // go to the home/main updates
}