Refactor code

pull/593/head
X Code 3 years ago
parent a399b529e9
commit 8d04a8ed3e
  1. 1076
      example/assets/sample_data.json
  2. 3
      lib/src/utils/simple_dialog_item.dart
  3. 87
      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),
Padding(
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 'package:flutter/cupertino.dart';
@ -9,7 +7,6 @@ import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:gallery_saver/gallery_saver.dart';
import 'package:string_validator/string_validator.dart';
import '../models/documents/document.dart';
import '../models/documents/nodes/container.dart' as container_node;
@ -189,63 +186,53 @@ Widget defaultEmbedBuilder(
final a = getAlignment(_attrs['mobileAlignment']);
image = Padding(
padding: EdgeInsets.all(m),
child: imageUrl.startsWith('http')
? Image.network(imageUrl, width: w, height: h, alignment: a)
: isBase64(imageUrl)
? Image.memory(base64.decode(imageUrl),
width: w, height: h, alignment: a)
: Image.file(io.File(imageUrl),
width: w, height: h, alignment: a));
child: imageByUrl(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));
image ??= imageByUrl(imageUrl);
if (!readOnly || !isMobile()) {
if (!readOnly || !isMobile() || isImageBase64(imageUrl)) {
return image;
}
/// We provide these option menu only for mobile platform
/// We provide option menu only for mobile platform excluding base64
return GestureDetector(
onTap: () {
showDialog(
context: context,
builder: (context) => SimpleDialog(children: [
SimpleDialogItem(
icon: Icons.save,
color: Colors.greenAccent,
text: 'Save',
onPressed: () {
// TODO: handle base64 and etc.
GallerySaver.saveImage(imageUrl).then((_) =>
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Saved'))));
},
),
SimpleDialogItem(
icon: Icons.zoom_in,
color: Colors.cyanAccent,
text: 'Zoom',
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ImageTapWrapper(
imageProvider: imageUrl
.startsWith('http')
? NetworkImage(imageUrl)
: isBase64(imageUrl)
? Image.memory(
base64.decode(imageUrl))
as ImageProvider<Object>?
: FileImage(io.File(imageUrl)),
)));
},
)
]));
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.save,
color: Colors.greenAccent,
text: 'Save',
onPressed: () {
// TODO: improve this
GallerySaver.saveImage(imageUrl).then((_) =>
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Saved'))));
},
),
SimpleDialogItem(
icon: Icons.zoom_in,
color: Colors.cyanAccent,
text: 'Zoom',
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ImageTapWrapper(
imageUrl: imageUrl)));
},
)
]),
));
},
child: image);
case 'video':

@ -1,12 +1,45 @@
import 'dart:convert';
import 'dart:io' as io;
import 'package:flutter/material.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 {
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
Widget build(BuildContext context) {
@ -18,7 +51,7 @@ class ImageTapWrapper extends StatelessWidget {
child: Stack(
children: [
PhotoView(
imageProvider: imageProvider,
imageProvider: _imageProviderByUrl(imageUrl),
loadingBuilder: (context, event) {
return Container(
color: Colors.black,

Loading…
Cancel
Save