Refactor code

pull/593/head
X Code 3 years ago
parent a399b529e9
commit 8d04a8ed3e
  1. 2
      example/assets/sample_data.json
  2. 3
      lib/src/utils/simple_dialog_item.dart
  3. 53
      lib/src/widgets/editor.dart
  4. 39
      lib/src/widgets/embeds/image.dart

File diff suppressed because one or more lines are too long

@ -23,7 +23,8 @@ class SimpleDialogItem extends StatelessWidget {
Icon(icon, size: 36, color: color), Icon(icon, size: 36, color: color),
Padding( Padding(
padding: const EdgeInsetsDirectional.only(start: 16), padding: const EdgeInsetsDirectional.only(start: 16),
child: Text(text), child:
Text(text, style: const TextStyle(fontWeight: FontWeight.bold)),
), ),
], ],
), ),

@ -1,5 +1,3 @@
import 'dart:convert';
import 'dart:io' as io;
import 'dart:math' as math; import 'dart:math' as math;
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
@ -9,7 +7,6 @@ import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:gallery_saver/gallery_saver.dart'; import 'package:gallery_saver/gallery_saver.dart';
import 'package:string_validator/string_validator.dart';
import '../models/documents/document.dart'; import '../models/documents/document.dart';
import '../models/documents/nodes/container.dart' as container_node; import '../models/documents/nodes/container.dart' as container_node;
@ -189,40 +186,37 @@ Widget defaultEmbedBuilder(
final a = getAlignment(_attrs['mobileAlignment']); final a = getAlignment(_attrs['mobileAlignment']);
image = Padding( image = Padding(
padding: EdgeInsets.all(m), padding: EdgeInsets.all(m),
child: imageUrl.startsWith('http') child: imageByUrl(imageUrl, width: w, height: h, alignment: a));
? Image.network(imageUrl, width: w, height: h, alignment: a) }
: isBase64(imageUrl) }
? Image.memory(base64.decode(imageUrl), image ??= imageByUrl(imageUrl);
width: w, height: h, alignment: a)
: Image.file(io.File(imageUrl), if (!readOnly || !isMobile() || isImageBase64(imageUrl)) {
width: w, height: h, alignment: a));
}
}
image ??= imageUrl.startsWith('http')
? Image.network(imageUrl)
: isBase64(imageUrl)
? Image.memory(base64.decode(imageUrl))
: Image.file(io.File(imageUrl));
if (!readOnly || !isMobile()) {
return image; return image;
} }
/// We provide these option menu only for mobile platform /// We provide option menu only for mobile platform excluding base64
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
showDialog( showDialog(
context: context, context: context,
builder: (context) => SimpleDialog(children: [ builder: (context) => Padding(
padding: const EdgeInsets.fromLTRB(50, 0, 50, 0),
child: SimpleDialog(
shape: const RoundedRectangleBorder(
borderRadius:
BorderRadius.all(Radius.circular(10))),
children: [
SimpleDialogItem( SimpleDialogItem(
icon: Icons.save, icon: Icons.save,
color: Colors.greenAccent, color: Colors.greenAccent,
text: 'Save', text: 'Save',
onPressed: () { onPressed: () {
// TODO: handle base64 and etc. // TODO: improve this
GallerySaver.saveImage(imageUrl).then((_) => GallerySaver.saveImage(imageUrl).then((_) =>
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Saved')))); const SnackBar(
content: Text('Saved'))));
}, },
), ),
SimpleDialogItem( SimpleDialogItem(
@ -234,18 +228,11 @@ Widget defaultEmbedBuilder(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: (context) => ImageTapWrapper( builder: (context) => ImageTapWrapper(
imageProvider: imageUrl imageUrl: imageUrl)));
.startsWith('http')
? NetworkImage(imageUrl)
: isBase64(imageUrl)
? Image.memory(
base64.decode(imageUrl))
as ImageProvider<Object>?
: FileImage(io.File(imageUrl)),
)));
}, },
) )
])); ]),
));
}, },
child: image); child: image);
case 'video': case 'video':

@ -1,12 +1,45 @@
import 'dart:convert';
import 'dart:io' as io;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:photo_view/photo_view.dart'; import 'package:photo_view/photo_view.dart';
import 'package:string_validator/string_validator.dart';
bool isImageBase64(String imageUrl) {
return !imageUrl.startsWith('http') && isBase64(imageUrl);
}
Widget imageByUrl(String imageUrl,
{double? width,
double? height,
AlignmentGeometry alignment = Alignment.center}) {
if (isImageBase64(imageUrl)) {
return Image.memory(base64.decode(imageUrl),
width: width, height: height, alignment: alignment);
}
if (imageUrl.startsWith('http')) {
return Image.network(imageUrl,
width: width, height: height, alignment: alignment);
}
return Image.file(io.File(imageUrl),
width: width, height: height, alignment: alignment);
}
class ImageTapWrapper extends StatelessWidget { class ImageTapWrapper extends StatelessWidget {
const ImageTapWrapper({ const ImageTapWrapper({
this.imageProvider, required this.imageUrl,
}); });
final ImageProvider? imageProvider; final String imageUrl;
ImageProvider _imageProviderByUrl(String imageUrl) {
if (imageUrl.startsWith('http')) {
return NetworkImage(imageUrl);
}
return FileImage(io.File(imageUrl));
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -18,7 +51,7 @@ class ImageTapWrapper extends StatelessWidget {
child: Stack( child: Stack(
children: [ children: [
PhotoView( PhotoView(
imageProvider: imageProvider, imageProvider: _imageProviderByUrl(imageUrl),
loadingBuilder: (context, event) { loadingBuilder: (context, event) {
return Container( return Container(
color: Colors.black, color: Colors.black,

Loading…
Cancel
Save