Fix image size issue

pull/24/head
rish07 4 years ago
parent c3aa174274
commit 478c44c17f
  1. 1
      app/lib/main.dart
  2. 12
      app/lib/pages/home_page.dart
  3. 4
      lib/widgets/FakeUi.dart
  4. 9
      lib/widgets/RealUi.dart
  5. 44
      lib/widgets/editor.dart
  6. 36
      lib/widgets/responsive_widget.dart
  7. 1
      pubspec.yaml

@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'pages/home_page.dart'; import 'pages/home_page.dart';
void main() { void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp()); runApp(MyApp());
} }

@ -89,11 +89,11 @@ class _HomePageState extends State<HomePage> {
} }
Widget _buildWelcomeEditor(BuildContext context) { Widget _buildWelcomeEditor(BuildContext context) {
return Column( return SafeArea(
crossAxisAlignment: CrossAxisAlignment.stretch, child: Stack(
children: <Widget>[ children: <Widget>[
Expanded( Container(
child: Container( height: MediaQuery.of(context).size.height * 0.88,
color: Colors.white, color: Colors.white,
padding: const EdgeInsets.only(left: 16.0, right: 16.0), padding: const EdgeInsets.only(left: 16.0, right: 16.0),
child: QuillEditor( child: QuillEditor(
@ -120,13 +120,15 @@ class _HomePageState extends State<HomePage> {
sizeSmall: TextStyle(fontSize: 9.0)), sizeSmall: TextStyle(fontSize: 9.0)),
), ),
), ),
),
Container( Container(
padding:
EdgeInsets.only(top: MediaQuery.of(context).size.height * 0.9),
child: QuillToolbar.basic( child: QuillToolbar.basic(
controller: _controller, controller: _controller,
uploadFileCallback: _fakeUploadImageCallBack), uploadFileCallback: _fakeUploadImageCallBack),
) )
], ],
),
); );
} }

@ -0,0 +1,4 @@
// ignore: camel_case_types
class platformViewRegistry {
static registerViewFactory(String viewId, dynamic cb) {}
}

@ -0,0 +1,9 @@
import 'dart:ui' as ui;
// ignore: camel_case_types
class platformViewRegistry {
static registerViewFactory(String viewId, dynamic cb) {
// ignore:undefined_prefixed_name
ui.platformViewRegistry.registerViewFactory(viewId, cb);
}
}

@ -1,7 +1,6 @@
import 'dart:html' as html;
import 'dart:io'; import 'dart:io';
import 'dart:math' as math; import 'dart:math' as math;
import 'dart:ui' as ui; import 'dart:math' if (dart.library.html) 'dart:html' as html;
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
@ -19,9 +18,11 @@ import 'package:flutter_quill/models/documents/nodes/line.dart';
import 'package:flutter_quill/models/documents/nodes/node.dart'; import 'package:flutter_quill/models/documents/nodes/node.dart';
import 'package:flutter_quill/widgets/image.dart'; import 'package:flutter_quill/widgets/image.dart';
import 'package:flutter_quill/widgets/raw_editor.dart'; import 'package:flutter_quill/widgets/raw_editor.dart';
import 'package:flutter_quill/widgets/responsive_widget.dart';
import 'package:flutter_quill/widgets/text_selection.dart'; import 'package:flutter_quill/widgets/text_selection.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import 'FakeUi.dart' if (dart.library.html) 'RealUi.dart' as ui;
import 'box.dart'; import 'box.dart';
import 'controller.dart'; import 'controller.dart';
import 'cursor.dart'; import 'cursor.dart';
@ -79,25 +80,43 @@ abstract class RenderAbstractEditor {
Widget _defaultEmbedBuilder(BuildContext context, leaf.Embed node) { Widget _defaultEmbedBuilder(BuildContext context, leaf.Embed node) {
switch (node.value.type) { switch (node.value.type) {
case 'image': case 'image':
if (kIsWeb) {
String imageUrl = node.value.data; String imageUrl = node.value.data;
return imageUrl.startsWith('http')
? Image.network(imageUrl)
: Image.file(File(imageUrl));
default:
throw UnimplementedError(
'Embeddable type "${node.value.type}" is not supported by default embed '
'builder of QuillEditor. You must pass your own builder function to '
'embedBuilder property of QuillEditor or QuillField widgets.');
}
}
Widget _defaultEmbedBuilderWeb(BuildContext context, leaf.Embed node) {
switch (node.value.type) {
case 'image':
String imageUrl = node.value.data;
Size size = MediaQuery.of(context).size;
ui.platformViewRegistry.registerViewFactory( ui.platformViewRegistry.registerViewFactory(
imageUrl, imageUrl,
(int viewId) => html.ImageElement()..src = imageUrl, (int viewId) => html.ImageElement()..src = imageUrl,
); );
return Container( return Padding(
constraints: BoxConstraints(maxWidth: 300), padding: EdgeInsets.only(
height: MediaQuery.of(context).size.height, right: ResponsiveWidget.isMediumScreen(context)
? size.width * 0.5
: (ResponsiveWidget.isLargeScreen(context))
? size.width * 0.75
: size.width * 0.2,
),
child: SizedBox(
height: MediaQuery.of(context).size.height * 0.45,
child: HtmlElementView( child: HtmlElementView(
viewType: imageUrl, viewType: imageUrl,
), ),
),
); );
}
String imageUrl = node.value.data;
return imageUrl.startsWith('http')
? Image.network(imageUrl)
: Image.file(File(imageUrl));
default: default:
throw UnimplementedError( throw UnimplementedError(
'Embeddable type "${node.value.type}" is not supported by default embed ' 'Embeddable type "${node.value.type}" is not supported by default embed '
@ -144,7 +163,8 @@ class QuillEditor extends StatefulWidget {
this.keyboardAppearance = Brightness.light, this.keyboardAppearance = Brightness.light,
this.scrollPhysics, this.scrollPhysics,
this.onLaunchUrl, this.onLaunchUrl,
this.embedBuilder = _defaultEmbedBuilder}) this.embedBuilder =
kIsWeb ? _defaultEmbedBuilderWeb : _defaultEmbedBuilder})
: assert(controller != null), : assert(controller != null),
assert(scrollController != null), assert(scrollController != null),
assert(scrollable != null), assert(scrollable != null),

@ -0,0 +1,36 @@
import 'package:flutter/material.dart';
class ResponsiveWidget extends StatelessWidget {
final Widget largeScreen;
final Widget mediumScreen;
final Widget smallScreen;
const ResponsiveWidget({Key key, @required this.largeScreen, this.mediumScreen, this.smallScreen}) : super(key: key);
static bool isSmallScreen(BuildContext context) {
return MediaQuery.of(context).size.width < 800;
}
static bool isLargeScreen(BuildContext context) {
return MediaQuery.of(context).size.width > 1200;
}
static bool isMediumScreen(BuildContext context) {
return MediaQuery.of(context).size.width >= 800 && MediaQuery.of(context).size.width <= 1200;
}
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (context, constraints) {
if (constraints.maxWidth > 1200) {
return largeScreen;
} else if (constraints.maxWidth <= 1200 && constraints.maxWidth >= 800) {
return mediumScreen ?? largeScreen;
} else {
return smallScreen ?? largeScreen;
}
},
);
}
}

@ -20,6 +20,7 @@ dependencies:
flutter_colorpicker: ^0.3.4 flutter_colorpicker: ^0.3.4
image_picker: ^0.6.7+17 image_picker: ^0.6.7+17
photo_view: ^0.10.3 photo_view: ^0.10.3
universal_html: ^1.2.4
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:

Loading…
Cancel
Save