[Multiline Select] HomePage allows to select paragraph line on triple click (#983)

Co-authored-by: Luis Felipe Murguia Ramos <felipelfmr1@gmail.com>
pull/984/head
Luis Felipe Murguia Ramos 3 years ago committed by GitHub
parent 391b21b4f1
commit c4c512552b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 95
      example/lib/pages/home_page.dart

@ -17,6 +17,12 @@ import 'package:tuple/tuple.dart';
import '../universal_ui/universal_ui.dart'; import '../universal_ui/universal_ui.dart';
import 'read_only_page.dart'; import 'read_only_page.dart';
enum _SelectionType {
none,
word,
// line,
}
class HomePage extends StatefulWidget { class HomePage extends StatefulWidget {
@override @override
_HomePageState createState() => _HomePageState(); _HomePageState createState() => _HomePageState();
@ -25,6 +31,14 @@ class HomePage extends StatefulWidget {
class _HomePageState extends State<HomePage> { class _HomePageState extends State<HomePage> {
QuillController? _controller; QuillController? _controller;
final FocusNode _focusNode = FocusNode(); final FocusNode _focusNode = FocusNode();
Timer? _selectAllTimer;
_SelectionType _selectionType = _SelectionType.none;
@override
void dispose() {
_selectAllTimer?.cancel();
super.dispose();
}
@override @override
void initState() { void initState() {
@ -99,8 +113,72 @@ class _HomePageState extends State<HomePage> {
); );
} }
bool _onTripleClickSelection() {
final controller = _controller!;
_selectAllTimer?.cancel();
_selectAllTimer = null;
// If you want to select all text after paragraph, uncomment this line
// if (_selectionType == _SelectionType.line) {
// final selection = TextSelection(
// baseOffset: 0,
// extentOffset: controller.document.length,
// );
// controller.updateSelection(selection, ChangeSource.REMOTE);
// _selectionType = _SelectionType.none;
// return true;
// }
if (controller.selection.isCollapsed) {
_selectionType = _SelectionType.none;
}
if (_selectionType == _SelectionType.none) {
_selectionType = _SelectionType.word;
_startTripleClickTimer();
return false;
}
if (_selectionType == _SelectionType.word) {
final child = controller.document.queryChild(
controller.selection.baseOffset,
);
final offset = child.node?.documentOffset ?? 0;
final length = child.node?.length ?? 0;
final selection = TextSelection(
baseOffset: offset,
extentOffset: offset + length,
);
controller.updateSelection(selection, ChangeSource.REMOTE);
// _selectionType = _SelectionType.line;
_selectionType = _SelectionType.none;
_startTripleClickTimer();
return true;
}
return false;
}
void _startTripleClickTimer() {
_selectAllTimer = Timer(const Duration(milliseconds: 900), () {
_selectionType = _SelectionType.none;
});
}
Widget _buildWelcomeEditor(BuildContext context) { Widget _buildWelcomeEditor(BuildContext context) {
var quillEditor = QuillEditor( Widget quillEditor = MouseRegion(
cursor: SystemMouseCursors.text,
child: QuillEditor(
controller: _controller!, controller: _controller!,
scrollController: ScrollController(), scrollController: ScrollController(),
scrollable: true, scrollable: true,
@ -112,6 +190,9 @@ class _HomePageState extends State<HomePage> {
expands: false, expands: false,
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
onImagePaste: _onImagePaste, onImagePaste: _onImagePaste,
onTapUp: (details, p1) {
return _onTripleClickSelection();
},
customStyles: DefaultStyles( customStyles: DefaultStyles(
h1: DefaultTextBlockStyle( h1: DefaultTextBlockStyle(
const TextStyle( const TextStyle(
@ -129,9 +210,12 @@ class _HomePageState extends State<HomePage> {
...FlutterQuillEmbeds.builders(), ...FlutterQuillEmbeds.builders(),
NotesEmbedBuilder(addEditNote: _addEditNote) NotesEmbedBuilder(addEditNote: _addEditNote)
], ],
),
); );
if (kIsWeb) { if (kIsWeb) {
quillEditor = QuillEditor( quillEditor = MouseRegion(
cursor: SystemMouseCursors.text,
child: QuillEditor(
controller: _controller!, controller: _controller!,
scrollController: ScrollController(), scrollController: ScrollController(),
scrollable: true, scrollable: true,
@ -141,6 +225,9 @@ class _HomePageState extends State<HomePage> {
placeholder: 'Add content', placeholder: 'Add content',
expands: false, expands: false,
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
onTapUp: (details, p1) {
return _onTripleClickSelection();
},
customStyles: DefaultStyles( customStyles: DefaultStyles(
h1: DefaultTextBlockStyle( h1: DefaultTextBlockStyle(
const TextStyle( const TextStyle(
@ -154,7 +241,9 @@ class _HomePageState extends State<HomePage> {
null), null),
sizeSmall: const TextStyle(fontSize: 9), sizeSmall: const TextStyle(fontSize: 9),
), ),
embedBuilders: defaultEmbedBuildersWeb); embedBuilders: defaultEmbedBuildersWeb,
),
);
} }
var toolbar = QuillToolbar.basic( var toolbar = QuillToolbar.basic(
controller: _controller!, controller: _controller!,

Loading…
Cancel
Save