From b46db0fa711fdf6608bdbf2ed885c18db94a0d15 Mon Sep 17 00:00:00 2001 From: Travis Dixon Date: Wed, 11 May 2022 14:27:16 +1000 Subject: [PATCH] support nullsafe dart --- example/pubspec.yaml | 6 +----- example/web/main.dart | 6 +++--- lib/browser.dart | 10 +++++----- lib/src/browser.dart | 20 ++++++++++---------- pubspec.yaml | 4 ++-- 5 files changed, 21 insertions(+), 25 deletions(-) diff --git a/example/pubspec.yaml b/example/pubspec.yaml index a537da7..da1bac9 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -3,14 +3,10 @@ description: Examples version: 0.0.1 environment: - sdk: '>=1.20.1 <2.0.0' + sdk: '>=2.12.1 <3.0.0' dependencies: clippy: path: '../' dev_dependencies: - test: ^0.12.0 - build_runner: ^0.10.0 - build_test: ^0.10.2 - build_web_compilers: ^0.4.0 \ No newline at end of file diff --git a/example/web/main.dart b/example/web/main.dart index d74a0ea..3cf2e1e 100644 --- a/example/web/main.dart +++ b/example/web/main.dart @@ -7,11 +7,11 @@ main() { final copyElementBtn = document.querySelector('.copy-element-btn'); final copyElementTarget = document.querySelector('.copy-element-target'); - copyTextBtn.onClick.listen((_) { + copyTextBtn?.onClick.listen((_) { clippy.write(new DateTime.now().toIso8601String()); addAction('Copy: from plain text'); }); - copyElementBtn.onClick.listen((_) { + copyElementBtn?.onClick.listen((_) { clippy.write(copyElementTarget); addAction('Copy: from element'); }); @@ -22,5 +22,5 @@ main() { addAction(text) { final ul = document.querySelector('.actions'); - ul.children.add(new LIElement()..text = text); + ul?.children.add(new LIElement()..text = text); } diff --git a/lib/browser.dart b/lib/browser.dart index 188475a..8e1be89 100644 --- a/lib/browser.dart +++ b/lib/browser.dart @@ -8,7 +8,7 @@ Future write([input]) async { if (input is Element) { return await clipboard.write(input); } else if (input is String) { - return await _writeText(input); + return await _writeText(input) ?? false; } else { return await clipboard.write(); } @@ -18,13 +18,13 @@ Stream get onPaste => clipboard.onPaste; Future _writeText(String text) async { final element = _createFakeElement(text); - document.body.children.add(element); + document.body?.children.add(element); await clipboard.write(element); - document.body.children.remove(element); + document.body?.children.remove(element); } TextAreaElement _createFakeElement(String text) { - final isRtl = document.documentElement.getAttribute('dir') == 'rtl'; + final isRtl = document.documentElement?.getAttribute('dir') == 'rtl'; final fakeElem = new TextAreaElement(); // Prevent zooming on iOS @@ -42,7 +42,7 @@ TextAreaElement _createFakeElement(String text) { fakeElem.style.left = '-9999px'; } // Move element to the same position vertically - final yPosition = window.pageYOffset ?? document.documentElement.scrollTop; + final yPosition = window.pageYOffset; fakeElem.style.top = '${yPosition}px'; fakeElem.setAttribute('readonly', ''); diff --git a/lib/src/browser.dart b/lib/src/browser.dart index 675dc50..2ed6f3a 100644 --- a/lib/src/browser.dart +++ b/lib/src/browser.dart @@ -5,14 +5,14 @@ import 'package:clippy/src/clipboard.dart'; class BrowserClipboard implements Clipboard { @override - Future write([covariant Element element]) async { + Future write([covariant Element? element]) async { if (element != null) { selectText(element); } var result = document.execCommand('copy'); if (element != null) { - window.getSelection().removeAllRanges(); + window.getSelection()?.removeAllRanges(); } return result; } @@ -27,7 +27,7 @@ class BrowserClipboard implements Clipboard { } String _textConverter(ClipboardEvent input) { - return input.clipboardData.getData('text/plain'); + return input.clipboardData?.getData('text/plain') ?? ""; } selectText(Element element) { @@ -35,7 +35,7 @@ selectText(Element element) { if (element is SelectElement) { element.focus(); - selectedText = element.value; + selectedText = element.value ?? ''; } else if (element is InputElement) { final isReadOnly = element.getAttribute('readonly') != null; @@ -44,13 +44,13 @@ selectText(Element element) { } element.select(); - element.setSelectionRange(0, element.value.length); + element.setSelectionRange(0, element.value?.length ?? 0); if (!isReadOnly) { element.attributes.remove('readonly'); } - selectedText = element.value; + selectedText = element.value ?? ''; } else if (element is TextAreaElement) { final isReadOnly = element.getAttribute('readonly') != null; @@ -59,13 +59,13 @@ selectText(Element element) { } element.select(); - element.setSelectionRange(0, element.value.length); + element.setSelectionRange(0, element.value?.length ?? 0); if (!isReadOnly) { element.attributes.remove('readonly'); } - selectedText = element.value; + selectedText = element.value ?? ''; } else { if (element.getAttribute('contenteditable') != null) { element.focus(); @@ -75,8 +75,8 @@ selectText(Element element) { var range = document.createRange(); range.selectNodeContents(element); - selection.removeAllRanges(); - selection.addRange(range); + selection?.removeAllRanges(); + selection?.addRange(range); selectedText = selection.toString(); } diff --git a/pubspec.yaml b/pubspec.yaml index f4b3ba5..53d2819 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,11 +1,11 @@ name: clippy description: Access system clipboard in Dart (Server & Browser). -version: 1.0.0 +version: 2.0.0 homepage: https://github.com/andresaraujo/clippy author: Andres Araujo environment: - sdk: '>=2.0.0-dev <3.0.0' + sdk: '>=2.12.0-dev <3.0.0' dependencies: path: ^1.4.2