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 client = ref.read(alwaysClientProvider);
final spaceId = ref.read(newsStateProvider).newsPostSpaceId;
final newsSlideList = ref.read(newsStateProvider).newsSlideList;
final lang = L10n.of(context);
if (spaceId == null) {
EasyLoading.showToast(L10n.of(context).pleaseFirstSelectASpace);
return;
}
// Show loading message
EasyLoading.show(status: L10n.of(context).slidePosting);
try {
final space = await ref.read(spaceProvider(spaceId).future);
NewsEntryDraft draft = space.newsDraft();
for (final slidePost in newsSlideList) {
final sdk = await ref.read(sdkProvider.future);
// If slide type is text
if (slidePost.type == NewsSlideType.text) {
if (slidePost.text == null || slidePost.text!.trim().isEmpty) {
if (!context.mounted) {
EasyLoading.dismiss();
return;
}
EasyLoading.showError(
L10n.of(context).yourTextSlidesMustContainsSomeText,
duration: const Duration(seconds: 3),
);
return;
}
final textDraft = slidePost.html != null
? client.textHtmlDraft(slidePost.html!, slidePost.text!)
: client.textMarkdownDraft(slidePost.text!);
final textSlideDraft = textDraft.intoNewsSlideDraft();
textSlideDraft.color(
sdk.api.newColorizeBuilder(null, slidePost.backgroundColor?.value),
);
if (slidePost.newsReferencesModel != null) {
final objRef = getSlideReference(sdk, slidePost.newsReferencesModel!);
textSlideDraft.addReference(objRef);
}
await draft.addSlide(textSlideDraft);
}
// If slide type is image
else if (slidePost.type == NewsSlideType.image &&
slidePost.mediaFile != null) {
final file = slidePost.mediaFile!;
String? mimeType = file.mimeType ?? lookupMimeType(file.path);
if (mimeType == null) throw lang.failedToDetectMimeType;
if (!mimeType.startsWith('image/')) {
if (!context.mounted) {
EasyLoading.dismiss();
return;
}
EasyLoading.showError(
L10n.of(context).postingOfTypeNotYetSupported(mimeType),
duration: const Duration(seconds: 3),
);
return;
}
Uint8List bytes = await file.readAsBytes();
final decodedImage = await decodeImageFromList(bytes);
final imageDraft = client
.imageDraft(file.path, mimeType)
.size(bytes.length)
.width(decodedImage.width)
.height(decodedImage.height);
final imageSlideDraft = imageDraft.intoNewsSlideDraft();
imageSlideDraft.color(
sdk.api.newColorizeBuilder(null, slidePost.backgroundColor?.value),
);
if (slidePost.newsReferencesModel != null) {
final objRef = getSlideReference(sdk, slidePost.newsReferencesModel!);
imageSlideDraft.addReference(objRef);
}
await draft.addSlide(imageSlideDraft);
}
// If slide type is video
else if (slidePost.type == NewsSlideType.video &&
slidePost.mediaFile != null) {
final file = slidePost.mediaFile!;
String? mimeType = file.mimeType ?? lookupMimeType(file.path);
if (mimeType == null) throw lang.failedToDetectMimeType;
if (!mimeType.startsWith('video/')) {
if (!context.mounted) {
EasyLoading.dismiss();
return;
}
EasyLoading.showError(
L10n.of(context).postingOfTypeNotYetSupported(mimeType),
duration: const Duration(seconds: 3),
);
return;
}
Uint8List bytes = await file.readAsBytes();
final videoDraft =
client.videoDraft(file.path, mimeType).size(bytes.length);
final videoSlideDraft = videoDraft.intoNewsSlideDraft();
videoSlideDraft.color(
sdk.api.newColorizeBuilder(null, slidePost.backgroundColor?.value),
);
if (slidePost.newsReferencesModel != null) {
final objRef = getSlideReference(sdk, slidePost.newsReferencesModel!);
videoSlideDraft.addReference(objRef);
}
await draft.addSlide(videoSlideDraft);
}
}
await draft.send();
// close loading
EasyLoading.dismiss();
if (!context.mounted) return;
// FIXME due to #718. well lets at least try forcing a refresh upon route.
ref.invalidate(newsStateProvider);
// Navigate back to update screen.
Navigator.pop(context);
context.pushReplacementNamed(
Routes.main.name,
); // go to the home / main updates
} catch (e, s) {
_log.severe('Failed to send news', e, s);
if (!context.mounted) {
EasyLoading.dismiss();
return;
}
EasyLoading.showError(
L10n.of(context).creatingNewsFailed(e),
duration: const Duration(seconds: 3),
);
}
}