Option to resize image in edit mode

pull/635/head
X Code 3 years ago
parent a1f39564f6
commit 97b97ce7cf
  1. 15
      lib/src/translations/toolbar.i18n.dart
  2. 52
      lib/src/widgets/embeds/default_embed_builder.dart
  3. 2
      lib/src/widgets/embeds/image.dart

@ -19,6 +19,7 @@ extension Localization on String {
'Saved': 'Saved', 'Saved': 'Saved',
'Text': 'Text', 'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link', 'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
}, },
'en_us': { 'en_us': {
'Paste a link': 'Paste a link', 'Paste a link': 'Paste a link',
@ -36,6 +37,7 @@ extension Localization on String {
'Saved': 'Saved', 'Saved': 'Saved',
'Text': 'Text', 'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link', 'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
}, },
'ar': { 'ar': {
'Paste a link': 'نسخ الرابط', 'Paste a link': 'نسخ الرابط',
@ -53,6 +55,7 @@ extension Localization on String {
'Saved': 'أنقذ', 'Saved': 'أنقذ',
'Text': 'Text', 'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link', 'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
}, },
'da': { 'da': {
'Paste a link': 'Indsæt link', 'Paste a link': 'Indsæt link',
@ -70,6 +73,7 @@ extension Localization on String {
'Saved': 'Gemt', 'Saved': 'Gemt',
'Text': 'Text', 'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link', 'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
}, },
'de': { 'de': {
'Paste a link': 'Link hinzufügen', 'Paste a link': 'Link hinzufügen',
@ -88,6 +92,7 @@ extension Localization on String {
'Saved': 'Gerettet', 'Saved': 'Gerettet',
'Text': 'Text', 'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link', 'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
}, },
'fr': { 'fr': {
'Paste a link': 'Coller un lien', 'Paste a link': 'Coller un lien',
@ -105,6 +110,7 @@ extension Localization on String {
'Saved': 'Enregistrée', 'Saved': 'Enregistrée',
'Text': 'Text', 'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link', 'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
}, },
'zh_CN': { 'zh_CN': {
'Paste a link': '粘贴链接', 'Paste a link': '粘贴链接',
@ -122,6 +128,7 @@ extension Localization on String {
'Saved': '已保存', 'Saved': '已保存',
'Text': '文字', 'Text': '文字',
'What is entered is not a link': '输入的不是链接', 'What is entered is not a link': '输入的不是链接',
'Resize': '删除',
}, },
'ko': { 'ko': {
'Paste a link': '링크를 붙여넣어 주세요.', 'Paste a link': '링크를 붙여넣어 주세요.',
@ -139,6 +146,7 @@ extension Localization on String {
'Saved': '저장되었습니다.', 'Saved': '저장되었습니다.',
'Text': '텍스트', 'Text': '텍스트',
'What is entered is not a link': '입력한 내용은 링크가 아닙니다.', 'What is entered is not a link': '입력한 내용은 링크가 아닙니다.',
'Resize': 'Resize',
}, },
'ru': { 'ru': {
'Paste a link': 'Вставить ссылку', 'Paste a link': 'Вставить ссылку',
@ -156,6 +164,7 @@ extension Localization on String {
'Saved': 'Сохранено', 'Saved': 'Сохранено',
'Text': 'Текст', 'Text': 'Текст',
'What is entered is not a link': 'Некорректная ссылка', 'What is entered is not a link': 'Некорректная ссылка',
'Resize': 'Resize',
}, },
'es': { 'es': {
'Paste a link': 'Pega un enlace', 'Paste a link': 'Pega un enlace',
@ -174,6 +183,7 @@ extension Localization on String {
'Saved': 'Guardado', 'Saved': 'Guardado',
'Text': 'Texto', 'Text': 'Texto',
'What is entered is not a link': 'El link ingresado no es válido', 'What is entered is not a link': 'El link ingresado no es válido',
'Resize': 'Resize',
}, },
'tr': { 'tr': {
'Paste a link': 'Bağlantıyı Yapıştır', 'Paste a link': 'Bağlantıyı Yapıştır',
@ -191,6 +201,7 @@ extension Localization on String {
'Saved': 'kaydedildi', 'Saved': 'kaydedildi',
'Text': 'Text', 'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link', 'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
}, },
'uk': { 'uk': {
'Paste a link': 'Вставити посилання', 'Paste a link': 'Вставити посилання',
@ -208,6 +219,7 @@ extension Localization on String {
'Saved': 'Збережено', 'Saved': 'Збережено',
'Text': 'Текст', 'Text': 'Текст',
'What is entered is not a link': 'Некоректне посилання', 'What is entered is not a link': 'Некоректне посилання',
'Resize': 'Resize',
}, },
'pt': { 'pt': {
'Paste a link': 'Colar um link', 'Paste a link': 'Colar um link',
@ -226,6 +238,7 @@ extension Localization on String {
'Saved': 'Salvo', 'Saved': 'Salvo',
'Text': 'Texto', 'Text': 'Texto',
'What is entered is not a link': 'O link inserido não é válido', 'What is entered is not a link': 'O link inserido não é válido',
'Resize': 'Resize',
}, },
'pl': { 'pl': {
'Paste a link': 'Wklej link', 'Paste a link': 'Wklej link',
@ -244,6 +257,7 @@ extension Localization on String {
'Text': 'Tekst', 'Text': 'Tekst',
'What is entered is not a link': 'What is entered is not a link':
'To, co jest wpisane, nie jest linkiem', 'To, co jest wpisane, nie jest linkiem',
'Resize': 'Resize',
}, },
'vi': { 'vi': {
'Paste a link': 'Chèn liên kết', 'Paste a link': 'Chèn liên kết',
@ -262,6 +276,7 @@ extension Localization on String {
'Text': 'Chữ', 'Text': 'Chữ',
'What is entered is not a link': 'What is entered is not a link':
'Những gì được nhập không phải là một liên kết', 'Những gì được nhập không phải là một liên kết',
'Resize': 'Resize',
}, },
}; };

@ -13,6 +13,7 @@ import 'youtube_video_app.dart';
Widget defaultEmbedBuilder( Widget defaultEmbedBuilder(
BuildContext context, leaf.Embed node, bool readOnly) { BuildContext context, leaf.Embed node, bool readOnly) {
assert(!kIsWeb, 'Please provide EmbedBuilder for Web'); assert(!kIsWeb, 'Please provide EmbedBuilder for Web');
switch (node.value.type) { switch (node.value.type) {
case 'image': case 'image':
final imageUrl = standardizeImageUrl(node.value.data); final imageUrl = standardizeImageUrl(node.value.data);
@ -39,10 +40,14 @@ Widget defaultEmbedBuilder(
image ??= imageByUrl(imageUrl); image ??= imageByUrl(imageUrl);
if (!readOnly || !isMobile() || isImageBase64(imageUrl)) { if (!readOnly || !isMobile() || isImageBase64(imageUrl)) {
if (!readOnly && isMobile()) {
// TODO: slider for width and height
// return _menuOptionsForEditableImageInMobile(context, imageUrl, image);
}
return image; return image;
} }
// We provide option menu only for mobile platform excluding base64 image // We provide option menu for mobile platform excluding base64 image
return _menuOptionsForReadonlyImage(context, imageUrl, image); return _menuOptionsForReadonlyImage(context, imageUrl, image);
case 'video': case 'video':
final videoUrl = node.value.data; final videoUrl = node.value.data;
@ -60,8 +65,48 @@ Widget defaultEmbedBuilder(
} }
} }
GestureDetector _menuOptionsForReadonlyImage( Widget _menuOptionsForEditableImageInMobile(
BuildContext context, String imageUrl, image) { BuildContext context, String imageUrl, Image image) {
return GestureDetector(
onTap: () {
showDialog(
context: context,
builder: (context) => Padding(
padding: const EdgeInsets.fromLTRB(50, 0, 50, 0),
child: SimpleDialog(
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(10))),
children: [
_SimpleDialogItem(
icon: Icons.settings_outlined,
color: Colors.greenAccent,
text: 'Resize'.i18n,
onPressed: () {
GallerySaver.saveImage(imageUrl).then((_) =>
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Saved'.i18n))));
},
),
_SimpleDialogItem(
icon: Icons.delete_forever_outlined,
color: Colors.red.shade200,
text: 'Remove'.i18n,
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
ImageTapWrapper(imageUrl: imageUrl)));
},
)
]),
));
},
child: image);
}
Widget _menuOptionsForReadonlyImage(
BuildContext context, String imageUrl, Image image) {
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
showDialog( showDialog(
@ -77,7 +122,6 @@ GestureDetector _menuOptionsForReadonlyImage(
color: Colors.greenAccent, color: Colors.greenAccent,
text: 'Save'.i18n, text: 'Save'.i18n,
onPressed: () { onPressed: () {
// TODO: improve this
GallerySaver.saveImage(imageUrl).then((_) => GallerySaver.saveImage(imageUrl).then((_) =>
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Saved'.i18n)))); SnackBar(content: Text('Saved'.i18n))));

@ -9,7 +9,7 @@ bool isImageBase64(String imageUrl) {
return !imageUrl.startsWith('http') && isBase64(imageUrl); return !imageUrl.startsWith('http') && isBase64(imageUrl);
} }
Widget imageByUrl(String imageUrl, Image imageByUrl(String imageUrl,
{double? width, {double? width,
double? height, double? height,
AlignmentGeometry alignment = Alignment.center}) { AlignmentGeometry alignment = Alignment.center}) {

Loading…
Cancel
Save