Merge pull request #19 from rish07/master

Enable 'bold' with ctrl+b on flutter web
pull/22/head
Xin Yao 4 years ago committed by GitHub
commit d74e18a15e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      README.md
  2. 21
      app/lib/pages/home_page.dart
  3. 19
      lib/widgets/editor.dart
  4. 2
      lib/widgets/text_line.dart
  5. 2
      lib/widgets/text_selection.dart
  6. 11
      lib/widgets/toolbar.dart
  7. 38
      pubspec.lock

@ -1,3 +1,4 @@
<a href="https://bulletjournal.us/home/index.html"><img src=
"https://user-images.githubusercontent.com/122956/72955931-ccc07900-3d52-11ea-89b1-d468a6e2aa2b.png"
width="150px" height="150px"></a>
@ -8,7 +9,14 @@ Rich text editor and a [Quill] component for [Flutter].
https://pub.dev/packages/flutter_quill
This library is a WYSIWYG editor built for the modern mobile platform only and web is not supported.
This library is a WYSIWYG editor built for the modern mobile platform only and web is under development.
To run the app on web do the following:
1) Change flutter channel to master using `flutter channel master`, followed by `flutter upgrade`.
2) Enable web using `flutter config --enable-web` and restart the IDE.
3) Upon successful execution of step 1 and 2 you should see `Chrome` as one of the devices which you run `flutter devices`.
4) Run the app.
For web development, [ReactQuill] is recommended to use for compatibility.
---

@ -4,6 +4,7 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_quill/models/documents/attribute.dart';
import 'package:flutter_quill/models/documents/document.dart';
import 'package:flutter_quill/widgets/controller.dart';
import 'package:flutter_quill/widgets/default_styles.dart';
@ -65,7 +66,25 @@ class _HomePageState extends State<HomePage> {
color: Colors.grey.shade800,
child: _buildMenuBar(context),
),
body: _buildWelcomeEditor(context),
body: RawKeyboardListener(
focusNode: FocusNode(),
onKey: (RawKeyEvent event) {
if (event.data.isControlPressed && event.character == 'b') {
if (_controller
.getSelectionStyle()
.attributes
.keys
.contains("bold")) {
_controller
.formatSelection(Attribute.clone(Attribute.bold, null));
} else {
_controller.formatSelection(Attribute.bold);
print("not bold");
}
}
},
child: _buildWelcomeEditor(context),
),
);
}

@ -11,7 +11,7 @@ import 'package:flutter_quill/models/documents/document.dart';
import 'package:flutter_quill/models/documents/nodes/container.dart'
as containerNode;
import 'package:flutter_quill/models/documents/nodes/embed.dart';
import 'package:flutter_quill/models/documents/nodes/leaf.dart';
import 'package:flutter_quill/models/documents/nodes/leaf.dart' as leaf;
import 'package:flutter_quill/models/documents/nodes/line.dart';
import 'package:flutter_quill/models/documents/nodes/node.dart';
import 'package:flutter_quill/widgets/image.dart';
@ -73,20 +73,19 @@ abstract class RenderAbstractEditor {
void selectPosition(SelectionChangedCause cause);
}
Widget _defaultEmbedBuilder(BuildContext context, Embed node) {
Widget _defaultEmbedBuilder(BuildContext context, leaf.Embed node) {
switch (node.value.type) {
case 'divider':
final style = QuillStyles.getStyles(context, true);
return Divider(
height: style.paragraph.style.fontSize * style.paragraph.style.height,
thickness: 2,
color: Colors.grey.shade200,
);
case 'image':
if (kIsWeb) {
return SizedBox.shrink();
} else {
String imageUrl = node.value.data;
return imageUrl.startsWith('http')
? Image.network(imageUrl)
: Image.asset(imageUrl);
}
break;
default:
throw UnimplementedError(
'Embeddable type "${node.value.type}" is not supported by default embed '
@ -348,7 +347,7 @@ class _QuillEditorSelectionGestureDetectorBuilder
}
return false;
}
Leaf segment = segmentResult.node as Leaf;
leaf.Leaf segment = segmentResult.node as leaf.Leaf;
if (segment.style.containsKey(Attribute.link.key)) {
var launchUrl = getEditor().widget.onLaunchUrl;
if (launchUrl == null) {

@ -60,7 +60,7 @@ class TextLine extends StatelessWidget {
textAlign,
textDirection,
1.0,
Localizations.localeOf(context, nullOk: true),
Localizations.localeOf(context),
strutStyle,
TextWidthBasis.parent,
null);

@ -206,7 +206,7 @@ class EditorTextSelectionOverlay {
endpoints,
selectionDelegate,
clipboardStatus,
),
Offset(0, 0)),
),
);
}

@ -1,5 +1,6 @@
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_colorpicker/flutter_colorpicker.dart';
import 'package:flutter_quill/models/documents/attribute.dart';
@ -446,7 +447,15 @@ Widget _selectHeadingStyleButtonBuilder(
height: iconSize * 1.77,
fillColor: Theme.of(context).canvasColor,
child: Text(
_valueToText[value],
!kIsWeb
? _valueToText[value]
: _valueToText[value.key == "header"
? Attribute.header
: (value.key == "h1")
? Attribute.h1
: (value.key == "h2")
? Attribute.h2
: Attribute.h3],
style: TextStyle(fontSize: 13, fontWeight: FontWeight.w600),
),
initialValue: value,

@ -7,49 +7,49 @@ packages:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.5.0-nullsafety.3"
version: "2.5.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0-nullsafety.3"
version: "2.1.0"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0-nullsafety.5"
version: "1.1.0"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0-nullsafety.3"
version: "1.2.0"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0-nullsafety.3"
version: "1.1.0"
collection:
dependency: "direct main"
description:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0-nullsafety.5"
version: "1.15.0"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0-nullsafety.3"
version: "1.2.0"
flutter:
dependency: "direct main"
description: flutter
@ -113,28 +113,28 @@ packages:
name: js
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.3-nullsafety.3"
version: "0.6.3"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.10-nullsafety.3"
version: "0.12.10"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0-nullsafety.6"
version: "1.3.0"
path:
dependency: transitive
description:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0-nullsafety.3"
version: "1.8.0"
pedantic:
dependency: transitive
description:
@ -188,42 +188,42 @@ packages:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0-nullsafety.4"
version: "1.8.0"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.dartlang.org"
source: hosted
version: "1.10.0-nullsafety.6"
version: "1.10.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0-nullsafety.3"
version: "2.1.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0-nullsafety.3"
version: "1.1.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0-nullsafety.3"
version: "1.2.0"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.19-nullsafety.6"
version: "0.2.19"
tuple:
dependency: "direct main"
description:
@ -237,7 +237,7 @@ packages:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0-nullsafety.5"
version: "1.3.0"
url_launcher:
dependency: "direct main"
description:
@ -286,7 +286,7 @@ packages:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0-nullsafety.5"
version: "2.1.0"
sdks:
dart: ">=2.12.0-0.0 <3.0.0"
flutter: ">=1.22.0"

Loading…
Cancel
Save