Update ImageResizer

pull/635/head
X Code 3 years ago
parent 50b53d1a99
commit 5bfd36f112
  1. 30
      lib/src/translations/toolbar.i18n.dart
  2. 13
      lib/src/widgets/embeds/default_embed_builder.dart
  3. 45
      lib/src/widgets/embeds/image_resizer.dart

@ -20,6 +20,8 @@ extension Localization on String {
'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
'Width': 'Width',
'Height': 'Height',
},
'en_us': {
'Paste a link': 'Paste a link',
@ -38,6 +40,8 @@ extension Localization on String {
'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
'Width': 'Width',
'Height': 'Height',
},
'ar': {
'Paste a link': 'نسخ الرابط',
@ -56,6 +60,8 @@ extension Localization on String {
'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
'Width': 'Width',
'Height': 'Height',
},
'da': {
'Paste a link': 'Indsæt link',
@ -74,6 +80,8 @@ extension Localization on String {
'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
'Width': 'Width',
'Height': 'Height',
},
'de': {
'Paste a link': 'Link hinzufügen',
@ -93,6 +101,8 @@ extension Localization on String {
'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
'Width': 'Width',
'Height': 'Height',
},
'fr': {
'Paste a link': 'Coller un lien',
@ -111,6 +121,8 @@ extension Localization on String {
'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
'Width': 'Width',
'Height': 'Height',
},
'zh_CN': {
'Paste a link': '粘贴链接',
@ -129,6 +141,8 @@ extension Localization on String {
'Text': '文字',
'What is entered is not a link': '输入的不是链接',
'Resize': '调整大小',
'Width': 'Width',
'Height': 'Height',
},
'ko': {
'Paste a link': '링크를 붙여넣어 주세요.',
@ -147,6 +161,8 @@ extension Localization on String {
'Text': '텍스트',
'What is entered is not a link': '입력한 내용은 링크가 아닙니다.',
'Resize': 'Resize',
'Width': 'Width',
'Height': 'Height',
},
'ru': {
'Paste a link': 'Вставить ссылку',
@ -165,6 +181,8 @@ extension Localization on String {
'Text': 'Текст',
'What is entered is not a link': 'Некорректная ссылка',
'Resize': 'Resize',
'Width': 'Width',
'Height': 'Height',
},
'es': {
'Paste a link': 'Pega un enlace',
@ -184,6 +202,8 @@ extension Localization on String {
'Text': 'Texto',
'What is entered is not a link': 'El link ingresado no es válido',
'Resize': 'Resize',
'Width': 'Width',
'Height': 'Height',
},
'tr': {
'Paste a link': 'Bağlantıyı Yapıştır',
@ -202,6 +222,8 @@ extension Localization on String {
'Text': 'Text',
'What is entered is not a link': 'What is entered is not a link',
'Resize': 'Resize',
'Width': 'Width',
'Height': 'Height',
},
'uk': {
'Paste a link': 'Вставити посилання',
@ -220,6 +242,8 @@ extension Localization on String {
'Text': 'Текст',
'What is entered is not a link': 'Некоректне посилання',
'Resize': 'Resize',
'Width': 'Width',
'Height': 'Height',
},
'pt': {
'Paste a link': 'Colar um link',
@ -239,6 +263,8 @@ extension Localization on String {
'Text': 'Texto',
'What is entered is not a link': 'O link inserido não é válido',
'Resize': 'Resize',
'Width': 'Width',
'Height': 'Height',
},
'pl': {
'Paste a link': 'Wklej link',
@ -258,6 +284,8 @@ extension Localization on String {
'What is entered is not a link':
'To, co jest wpisane, nie jest linkiem',
'Resize': 'Resize',
'Width': 'Width',
'Height': 'Height',
},
'vi': {
'Paste a link': 'Chèn liên kết',
@ -277,6 +305,8 @@ extension Localization on String {
'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',
'Width': 'Width',
'Height': 'Height',
},
};

@ -4,6 +4,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:gallery_saver/gallery_saver.dart';
import 'package:tuple/tuple.dart';
import '../../models/documents/nodes/leaf.dart' as leaf;
import '../../translations/toolbar.i18n.dart';
@ -19,6 +20,7 @@ Widget defaultEmbedBuilder(BuildContext context, QuillController controller,
leaf.Embed node, bool readOnly) {
assert(!kIsWeb, 'Please provide EmbedBuilder for Web');
Tuple2<double?, double?>? _widthHeight;
switch (node.value.type) {
case 'image':
final imageUrl = standardizeImageUrl(node.value.data);
@ -33,6 +35,7 @@ Widget defaultEmbedBuilder(BuildContext context, QuillController controller,
'mobileWidth and mobileHeight must be specified');
final w = double.parse(_attrs['mobileWidth']!);
final h = double.parse(_attrs['mobileHeight']!);
_widthHeight = Tuple2(w, h);
final m = _attrs['mobileMargin'] == null
? 0.0
: double.parse(_attrs['mobileMargin']!);
@ -42,7 +45,11 @@ Widget defaultEmbedBuilder(BuildContext context, QuillController controller,
child: imageByUrl(imageUrl, width: w, height: h, alignment: a));
}
}
image ??= imageByUrl(imageUrl);
if (_widthHeight == null) {
image = imageByUrl(imageUrl);
_widthHeight = Tuple2((image as Image).width, image.height);
}
if (!readOnly && isMobile()) {
return GestureDetector(
@ -59,7 +66,9 @@ Widget defaultEmbedBuilder(BuildContext context, QuillController controller,
showCupertinoModalPopup<void>(
context: context,
builder: (context) {
return const ImageResizer();
return ImageResizer(
imageWidth: _widthHeight?.item1,
imageHeight: _widthHeight?.item2);
});
},
);

@ -1,16 +1,33 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../../translations/toolbar.i18n.dart';
class ImageResizer extends StatefulWidget {
const ImageResizer({Key? key}) : super(key: key);
const ImageResizer(
{required this.imageWidth, required this.imageHeight, Key? key})
: super(key: key);
final double? imageWidth;
final double? imageHeight;
@override
_ImageResizerState createState() => _ImageResizerState();
}
class _ImageResizerState extends State<ImageResizer> {
late double _width;
late double _height;
late double _maxWidth;
late double _maxHeight;
@override
Widget build(BuildContext context) {
_maxWidth = MediaQuery.of(context).size.width;
_maxHeight = MediaQuery.of(context).size.height;
_width = widget.imageWidth ?? _maxWidth;
_height = widget.imageHeight ?? _maxHeight;
return CupertinoActionSheet(actions: [
CupertinoActionSheetAction(
onPressed: () {},
@ -18,10 +35,15 @@ class _ImageResizerState extends State<ImageResizer> {
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Card(
child: Slider(
value: 50,
max: 100,
divisions: 5,
onChanged: (val) {},
value: _width,
max: _maxWidth,
divisions: 100,
label: 'Width'.i18n,
onChanged: (val) {
setState(() {
_width = val;
});
},
),
)),
),
@ -31,10 +53,15 @@ class _ImageResizerState extends State<ImageResizer> {
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Card(
child: Slider(
value: 10,
max: 100,
divisions: 5,
onChanged: (val) {},
value: _height,
max: _maxHeight,
divisions: 100,
label: 'Height'.i18n,
onChanged: (val) {
setState(() {
_height = val;
});
},
),
)),
)

Loading…
Cancel
Save