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',
'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
},
'en_us': {
'Paste a link': 'Paste a link',
@ -36,6 +37,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',
},
'ar': {
'Paste a link': 'نسخ الرابط',
@ -53,6 +55,7 @@ extension Localization on String {
'Saved': 'أنقذ',
'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
},
'da': {
'Paste a link': 'Indsæt link',
@ -70,6 +73,7 @@ extension Localization on String {
'Saved': 'Gemt',
'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
},
'de': {
'Paste a link': 'Link hinzufügen',
@ -88,6 +92,7 @@ extension Localization on String {
'Saved': 'Gerettet',
'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
},
'fr': {
'Paste a link': 'Coller un lien',
@ -105,6 +110,7 @@ extension Localization on String {
'Saved': 'Enregistrée',
'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
},
'zh_CN': {
'Paste a link': '粘贴链接',
@ -122,6 +128,7 @@ extension Localization on String {
'Saved': '已保存',
'Text': '文字',
'What is entered is not a link': '输入的不是链接',
'Resize': '删除',
},
'ko': {
'Paste a link': '링크를 붙여넣어 주세요.',
@ -139,6 +146,7 @@ extension Localization on String {
'Saved': '저장되었습니다.',
'Text': '텍스트',
'What is entered is not a link': '입력한 내용은 링크가 아닙니다.',
'Resize': 'Resize',
},
'ru': {
'Paste a link': 'Вставить ссылку',
@ -156,6 +164,7 @@ extension Localization on String {
'Saved': 'Сохранено',
'Text': 'Текст',
'What is entered is not a link': 'Некорректная ссылка',
'Resize': 'Resize',
},
'es': {
'Paste a link': 'Pega un enlace',
@ -174,6 +183,7 @@ extension Localization on String {
'Saved': 'Guardado',
'Text': 'Texto',
'What is entered is not a link': 'El link ingresado no es válido',
'Resize': 'Resize',
},
'tr': {
'Paste a link': 'Bağlantıyı Yapıştır',
@ -191,6 +201,7 @@ extension Localization on String {
'Saved': 'kaydedildi',
'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
},
'uk': {
'Paste a link': 'Вставити посилання',
@ -208,6 +219,7 @@ extension Localization on String {
'Saved': 'Збережено',
'Text': 'Текст',
'What is entered is not a link': 'Некоректне посилання',
'Resize': 'Resize',
},
'pt': {
'Paste a link': 'Colar um link',
@ -226,6 +238,7 @@ extension Localization on String {
'Saved': 'Salvo',
'Text': 'Texto',
'What is entered is not a link': 'O link inserido não é válido',
'Resize': 'Resize',
},
'pl': {
'Paste a link': 'Wklej link',
@ -244,6 +257,7 @@ extension Localization on String {
'Text': 'Tekst',
'What is entered is not a link':
'To, co jest wpisane, nie jest linkiem',
'Resize': 'Resize',
},
'vi': {
'Paste a link': 'Chèn liên kết',
@ -262,6 +276,7 @@ extension Localization on String {
'Text': 'Chữ',
'What is entered is not a link':
'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(
BuildContext context, leaf.Embed node, bool readOnly) {
assert(!kIsWeb, 'Please provide EmbedBuilder for Web');
switch (node.value.type) {
case 'image':
final imageUrl = standardizeImageUrl(node.value.data);
@ -39,10 +40,14 @@ Widget defaultEmbedBuilder(
image ??= imageByUrl(imageUrl);
if (!readOnly || !isMobile() || isImageBase64(imageUrl)) {
if (!readOnly && isMobile()) {
// TODO: slider for width and height
// return _menuOptionsForEditableImageInMobile(context, imageUrl, 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);
case 'video':
final videoUrl = node.value.data;
@ -60,8 +65,48 @@ Widget defaultEmbedBuilder(
}
}
GestureDetector _menuOptionsForReadonlyImage(
BuildContext context, String imageUrl, image) {
Widget _menuOptionsForEditableImageInMobile(
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(
onTap: () {
showDialog(
@ -77,7 +122,6 @@ GestureDetector _menuOptionsForReadonlyImage(
color: Colors.greenAccent,
text: 'Save'.i18n,
onPressed: () {
// TODO: improve this
GallerySaver.saveImage(imageUrl).then((_) =>
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Saved'.i18n))));

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

Loading…
Cancel
Save