Showing
10 changed files
with
92 additions
and
67 deletions
| 1 | include: package:flutter_lints/flutter.yaml | 1 | include: package:flutter_lints/flutter.yaml |
| 2 | 2 | ||
| 3 | analyzer: | 3 | analyzer: |
| 4 | - strong-mode: | ||
| 5 | - implicit-dynamic: false | ||
| 6 | errors: | 4 | errors: |
| 7 | missing_required_param: warning | 5 | missing_required_param: warning |
| 8 | missing_return: warning | 6 | missing_return: warning |
| @@ -10,6 +10,7 @@ | @@ -10,6 +10,7 @@ | ||
| 10 | - Fix lints | 10 | - Fix lints |
| 11 | - Add options to customise border in Dataset widget [838] | 11 | - Add options to customise border in Dataset widget [838] |
| 12 | - Add Choice Field [Carsten Fregin] | 12 | - Add Choice Field [Carsten Fregin] |
| 13 | +- Add Flutter 3.7 compatibility | ||
| 13 | 14 | ||
| 14 | ## 3.8.4 | 15 | ## 3.8.4 |
| 15 | 16 |
| 1 | include: package:flutter_lints/flutter.yaml | 1 | include: package:flutter_lints/flutter.yaml |
| 2 | 2 | ||
| 3 | analyzer: | 3 | analyzer: |
| 4 | - strong-mode: | ||
| 5 | - implicit-dynamic: false | ||
| 6 | errors: | 4 | errors: |
| 7 | missing_required_param: warning | 5 | missing_required_param: warning |
| 8 | missing_return: warning | 6 | missing_return: warning |
| @@ -76,7 +76,6 @@ class PdfBool extends PdfDataType { | @@ -76,7 +76,6 @@ class PdfBool extends PdfDataType { | ||
| 76 | class PdfNum extends PdfDataType { | 76 | class PdfNum extends PdfDataType { |
| 77 | const PdfNum(this.value) | 77 | const PdfNum(this.value) |
| 78 | : assert(value != double.infinity), | 78 | : assert(value != double.infinity), |
| 79 | - assert(value != double.nan), | ||
| 80 | assert(value != double.negativeInfinity); | 79 | assert(value != double.negativeInfinity); |
| 81 | 80 | ||
| 82 | static const int precision = 5; | 81 | static const int precision = 5; |
| @@ -85,6 +84,9 @@ class PdfNum extends PdfDataType { | @@ -85,6 +84,9 @@ class PdfNum extends PdfDataType { | ||
| 85 | 84 | ||
| 86 | @override | 85 | @override |
| 87 | void output(PdfStream s, [int? indent]) { | 86 | void output(PdfStream s, [int? indent]) { |
| 87 | + assert(!value.isNaN); | ||
| 88 | + assert(!value.isInfinite); | ||
| 89 | + | ||
| 88 | if (value is int) { | 90 | if (value is int) { |
| 89 | s.putString(value.toInt().toString()); | 91 | s.putString(value.toInt().toString()); |
| 90 | } else { | 92 | } else { |
| @@ -11,7 +11,7 @@ environment: | @@ -11,7 +11,7 @@ environment: | ||
| 11 | dependencies: | 11 | dependencies: |
| 12 | archive: ^3.1.0 | 12 | archive: ^3.1.0 |
| 13 | barcode: ">=2.2.3 <3.0.0" | 13 | barcode: ">=2.2.3 <3.0.0" |
| 14 | - bidi: ^2.0.2 | 14 | + bidi: ^2.0.6 |
| 15 | crypto: ^3.0.0 | 15 | crypto: ^3.0.0 |
| 16 | image: ^4.0.0 | 16 | image: ^4.0.0 |
| 17 | meta: ">=1.3.0 <2.0.0" | 17 | meta: ">=1.3.0 <2.0.0" |
| @@ -7,6 +7,7 @@ | @@ -7,6 +7,7 @@ | ||
| 7 | - Update Image dependency | 7 | - Update Image dependency |
| 8 | - Fix canChangeOrientation option not appearing bug [Bilal Raja] | 8 | - Fix canChangeOrientation option not appearing bug [Bilal Raja] |
| 9 | - Add Support cmaps option on printing web [Koji Wakamiya] | 9 | - Add Support cmaps option on printing web [Koji Wakamiya] |
| 10 | +- Add Flutter 3.7 compatibility | ||
| 10 | 11 | ||
| 11 | ## 5.9.3 | 12 | ## 5.9.3 |
| 12 | 13 |
| 1 | include: package:flutter_lints/flutter.yaml | 1 | include: package:flutter_lints/flutter.yaml |
| 2 | 2 | ||
| 3 | analyzer: | 3 | analyzer: |
| 4 | - strong-mode: | ||
| 5 | - implicit-dynamic: false | ||
| 6 | errors: | 4 | errors: |
| 7 | missing_required_param: warning | 5 | missing_required_param: warning |
| 8 | missing_return: warning | 6 | missing_return: warning |
| @@ -25,8 +25,8 @@ import 'package:pdf/pdf.dart'; | @@ -25,8 +25,8 @@ import 'package:pdf/pdf.dart'; | ||
| 25 | import 'package:pdf/widgets.dart' as pw; | 25 | import 'package:pdf/widgets.dart' as pw; |
| 26 | 26 | ||
| 27 | /// ImageProvider that draws a Flutter Widget on a PDF document | 27 | /// ImageProvider that draws a Flutter Widget on a PDF document |
| 28 | -class WidgetWraper extends pw.ImageProvider { | ||
| 29 | - WidgetWraper._( | 28 | +class WidgetWrapper extends pw.ImageProvider { |
| 29 | + WidgetWrapper._( | ||
| 30 | this.bytes, | 30 | this.bytes, |
| 31 | int width, | 31 | int width, |
| 32 | int height, | 32 | int height, |
| @@ -51,7 +51,7 @@ class WidgetWraper extends pw.ImageProvider { | @@ -51,7 +51,7 @@ class WidgetWraper extends pw.ImageProvider { | ||
| 51 | /// Future<Uint8List> _generatePdf(PdfPageFormat format) async { | 51 | /// Future<Uint8List> _generatePdf(PdfPageFormat format) async { |
| 52 | /// final pdf = pw.Document(); | 52 | /// final pdf = pw.Document(); |
| 53 | /// | 53 | /// |
| 54 | - /// final image = await WidgetWraper.fromKey(key: rb); | 54 | + /// final image = await WidgetWrapper.fromKey(key: rb); |
| 55 | /// | 55 | /// |
| 56 | /// pdf.addPage( | 56 | /// pdf.addPage( |
| 57 | /// pw.Page( | 57 | /// pw.Page( |
| @@ -66,7 +66,7 @@ class WidgetWraper extends pw.ImageProvider { | @@ -66,7 +66,7 @@ class WidgetWraper extends pw.ImageProvider { | ||
| 66 | /// return pdf.save(); | 66 | /// return pdf.save(); |
| 67 | /// } | 67 | /// } |
| 68 | /// ``` | 68 | /// ``` |
| 69 | - static Future<WidgetWraper> fromKey({ | 69 | + static Future<WidgetWrapper> fromKey({ |
| 70 | required GlobalKey key, | 70 | required GlobalKey key, |
| 71 | int? width, | 71 | int? width, |
| 72 | int? height, | 72 | int? height, |
| @@ -82,7 +82,7 @@ class WidgetWraper extends pw.ImageProvider { | @@ -82,7 +82,7 @@ class WidgetWraper extends pw.ImageProvider { | ||
| 82 | final byteData = await image.toByteData(format: ui.ImageByteFormat.rawRgba); | 82 | final byteData = await image.toByteData(format: ui.ImageByteFormat.rawRgba); |
| 83 | 83 | ||
| 84 | if (byteData == null) { | 84 | if (byteData == null) { |
| 85 | - return WidgetWraper._( | 85 | + return WidgetWrapper._( |
| 86 | Uint8List(0), | 86 | Uint8List(0), |
| 87 | 0, | 87 | 0, |
| 88 | 0, | 88 | 0, |
| @@ -92,7 +92,7 @@ class WidgetWraper extends pw.ImageProvider { | @@ -92,7 +92,7 @@ class WidgetWraper extends pw.ImageProvider { | ||
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | final imageData = byteData.buffer.asUint8List(); | 94 | final imageData = byteData.buffer.asUint8List(); |
| 95 | - return WidgetWraper._( | 95 | + return WidgetWrapper._( |
| 96 | imageData, | 96 | imageData, |
| 97 | image.width, | 97 | image.width, |
| 98 | image.height, | 98 | image.height, |
| @@ -104,7 +104,7 @@ class WidgetWraper extends pw.ImageProvider { | @@ -104,7 +104,7 @@ class WidgetWraper extends pw.ImageProvider { | ||
| 104 | /// Wrap a Flutter Widget to an ImageProvider. | 104 | /// Wrap a Flutter Widget to an ImageProvider. |
| 105 | /// | 105 | /// |
| 106 | /// ``` | 106 | /// ``` |
| 107 | - /// final wrapped = await WidgetWraper.fromWidget( | 107 | + /// final wrapped = await WidgetWrapper.fromWidget( |
| 108 | /// widget: Container( | 108 | /// widget: Container( |
| 109 | /// color: Colors.white, | 109 | /// color: Colors.white, |
| 110 | /// child: Text( | 110 | /// child: Text( |
| @@ -125,7 +125,7 @@ class WidgetWraper extends pw.ImageProvider { | @@ -125,7 +125,7 @@ class WidgetWraper extends pw.ImageProvider { | ||
| 125 | /// ), | 125 | /// ), |
| 126 | /// ); | 126 | /// ); |
| 127 | /// ``` | 127 | /// ``` |
| 128 | - static Future<WidgetWraper> fromWidget({ | 128 | + static Future<WidgetWrapper> fromWidget({ |
| 129 | required Widget widget, | 129 | required Widget widget, |
| 130 | required BoxConstraints constraints, | 130 | required BoxConstraints constraints, |
| 131 | double pixelRatio = 1.0, | 131 | double pixelRatio = 1.0, |
| @@ -170,11 +170,7 @@ class WidgetWraper extends pw.ImageProvider { | @@ -170,11 +170,7 @@ class WidgetWraper extends pw.ImageProvider { | ||
| 170 | configuration: ViewConfiguration( | 170 | configuration: ViewConfiguration( |
| 171 | size: Size(_constraints.maxWidth, _constraints.maxHeight), | 171 | size: Size(_constraints.maxWidth, _constraints.maxHeight), |
| 172 | devicePixelRatio: ui.window.devicePixelRatio), | 172 | devicePixelRatio: ui.window.devicePixelRatio), |
| 173 | - window: _FlutterView( | ||
| 174 | - configuration: ui.ViewConfiguration( | ||
| 175 | - devicePixelRatio: ui.window.devicePixelRatio, | ||
| 176 | - ), | ||
| 177 | - ), | 173 | + window: ui.window, |
| 178 | ); | 174 | ); |
| 179 | 175 | ||
| 180 | final pipelineOwner = PipelineOwner()..rootNode = renderView; | 176 | final pipelineOwner = PipelineOwner()..rootNode = renderView; |
| @@ -204,7 +200,7 @@ class WidgetWraper extends pw.ImageProvider { | @@ -204,7 +200,7 @@ class WidgetWraper extends pw.ImageProvider { | ||
| 204 | throw Exception('Unable to read image data'); | 200 | throw Exception('Unable to read image data'); |
| 205 | } | 201 | } |
| 206 | 202 | ||
| 207 | - return WidgetWraper._( | 203 | + return WidgetWrapper._( |
| 208 | bytes.buffer.asUint8List(), | 204 | bytes.buffer.asUint8List(), |
| 209 | image.width, | 205 | image.width, |
| 210 | image.height, | 206 | image.height, |
| @@ -228,15 +224,51 @@ class WidgetWraper extends pw.ImageProvider { | @@ -228,15 +224,51 @@ class WidgetWraper extends pw.ImageProvider { | ||
| 228 | } | 224 | } |
| 229 | } | 225 | } |
| 230 | 226 | ||
| 231 | -class _FlutterView extends ui.FlutterView { | ||
| 232 | - _FlutterView({required this.configuration}); | ||
| 233 | - | ||
| 234 | - final ui.ViewConfiguration configuration; | 227 | +/// ImageProvider that draws a Flutter Widget on a PDF document |
| 228 | +@Deprecated('Use WidgetWrapper instead') | ||
| 229 | +class WidgetWraper extends WidgetWrapper { | ||
| 230 | + WidgetWraper._( | ||
| 231 | + Uint8List bytes, | ||
| 232 | + int width, | ||
| 233 | + int height, | ||
| 234 | + PdfImageOrientation orientation, | ||
| 235 | + double? dpi, | ||
| 236 | + ) : super._(bytes, width, height, orientation, dpi); | ||
| 235 | 237 | ||
| 236 | - @override | ||
| 237 | - ui.PlatformDispatcher get platformDispatcher => | ||
| 238 | - ui.PlatformDispatcher.instance; | 238 | + /// Wrap a Flutter Widget identified by a GlobalKey to an ImageProvider. |
| 239 | + @Deprecated('Use WidgetWrapper.fromKey instead') | ||
| 240 | + static Future<WidgetWrapper> fromKey({ | ||
| 241 | + required GlobalKey key, | ||
| 242 | + int? width, | ||
| 243 | + int? height, | ||
| 244 | + double pixelRatio = 1.0, | ||
| 245 | + PdfImageOrientation? orientation, | ||
| 246 | + double? dpi, | ||
| 247 | + }) { | ||
| 248 | + return WidgetWrapper.fromKey( | ||
| 249 | + key: key, | ||
| 250 | + width: width, | ||
| 251 | + pixelRatio: pixelRatio, | ||
| 252 | + orientation: orientation, | ||
| 253 | + dpi: dpi, | ||
| 254 | + ); | ||
| 255 | + } | ||
| 239 | 256 | ||
| 240 | - @override | ||
| 241 | - ui.ViewConfiguration get viewConfiguration => configuration; | 257 | + /// Wrap a Flutter Widget to an ImageProvider. |
| 258 | + @Deprecated('Use WidgetWrapper.fromWidget instead') | ||
| 259 | + static Future<WidgetWrapper> fromWidget({ | ||
| 260 | + required Widget widget, | ||
| 261 | + required BoxConstraints constraints, | ||
| 262 | + double pixelRatio = 1.0, | ||
| 263 | + PdfImageOrientation? orientation, | ||
| 264 | + double? dpi, | ||
| 265 | + }) { | ||
| 266 | + return WidgetWrapper.fromWidget( | ||
| 267 | + widget: widget, | ||
| 268 | + constraints: constraints, | ||
| 269 | + pixelRatio: pixelRatio, | ||
| 270 | + orientation: orientation, | ||
| 271 | + dpi: dpi, | ||
| 272 | + ); | ||
| 273 | + } | ||
| 242 | } | 274 | } |
| @@ -14,13 +14,11 @@ | @@ -14,13 +14,11 @@ | ||
| 14 | * limitations under the License. | 14 | * limitations under the License. |
| 15 | */ | 15 | */ |
| 16 | 16 | ||
| 17 | -// @dart=2.9 | ||
| 18 | - | ||
| 19 | import 'dart:io'; | 17 | import 'dart:io'; |
| 20 | 18 | ||
| 21 | import 'package:markdown/markdown.dart' as md; | 19 | import 'package:markdown/markdown.dart' as md; |
| 22 | 20 | ||
| 23 | -Iterable<String> getCode(List<md.Node> nodes, [bool isCode = false]) sync* { | 21 | +Iterable<String> getCode(List<md.Node>? nodes, [bool isCode = false]) sync* { |
| 24 | if (nodes == null) { | 22 | if (nodes == null) { |
| 25 | return; | 23 | return; |
| 26 | } | 24 | } |
| @@ -14,8 +14,6 @@ | @@ -14,8 +14,6 @@ | ||
| 14 | * limitations under the License. | 14 | * limitations under the License. |
| 15 | */ | 15 | */ |
| 16 | 16 | ||
| 17 | -// @dart=2.9 | ||
| 18 | - | ||
| 19 | import 'dart:io'; | 17 | import 'dart:io'; |
| 20 | 18 | ||
| 21 | import 'package:pdf/pdf.dart'; | 19 | import 'package:pdf/pdf.dart'; |
| @@ -154,15 +152,16 @@ Future<void> main() async { | @@ -154,15 +152,16 @@ Future<void> main() async { | ||
| 154 | } | 152 | } |
| 155 | 153 | ||
| 156 | class SyntaxHighlighterStyle { | 154 | class SyntaxHighlighterStyle { |
| 157 | - const SyntaxHighlighterStyle( | ||
| 158 | - {this.baseStyle, | ||
| 159 | - this.numberStyle, | ||
| 160 | - this.commentStyle, | ||
| 161 | - this.keywordStyle, | ||
| 162 | - this.stringStyle, | ||
| 163 | - this.punctuationStyle, | ||
| 164 | - this.classStyle, | ||
| 165 | - this.constantStyle}); | 155 | + const SyntaxHighlighterStyle({ |
| 156 | + required this.baseStyle, | ||
| 157 | + required this.numberStyle, | ||
| 158 | + required this.commentStyle, | ||
| 159 | + required this.keywordStyle, | ||
| 160 | + required this.stringStyle, | ||
| 161 | + required this.punctuationStyle, | ||
| 162 | + required this.classStyle, | ||
| 163 | + required this.constantStyle, | ||
| 164 | + }); | ||
| 166 | 165 | ||
| 167 | final TextStyle baseStyle; | 166 | final TextStyle baseStyle; |
| 168 | final TextStyle numberStyle; | 167 | final TextStyle numberStyle; |
| @@ -190,9 +189,7 @@ class SyntaxHighlighterStyle { | @@ -190,9 +189,7 @@ class SyntaxHighlighterStyle { | ||
| 190 | } | 189 | } |
| 191 | 190 | ||
| 192 | class DartSyntaxHighlighter { | 191 | class DartSyntaxHighlighter { |
| 193 | - DartSyntaxHighlighter(this._style) { | ||
| 194 | - _spans = <_HighlightSpan>[]; | ||
| 195 | - } | 192 | + DartSyntaxHighlighter(this._style); |
| 196 | 193 | ||
| 197 | final SyntaxHighlighterStyle _style; | 194 | final SyntaxHighlighterStyle _style; |
| 198 | 195 | ||
| @@ -259,10 +256,10 @@ class DartSyntaxHighlighter { | @@ -259,10 +256,10 @@ class DartSyntaxHighlighter { | ||
| 259 | 'bool' | 256 | 'bool' |
| 260 | ]; | 257 | ]; |
| 261 | 258 | ||
| 262 | - String _src; | ||
| 263 | - StringScanner _scanner; | 259 | + late String _src; |
| 260 | + late StringScanner _scanner; | ||
| 264 | 261 | ||
| 265 | - List<_HighlightSpan> _spans; | 262 | + final _spans = <_HighlightSpan>[]; |
| 266 | 263 | ||
| 267 | TextSpan format(String source) { | 264 | TextSpan format(String source) { |
| 268 | _src = source; | 265 | _src = source; |
| @@ -306,18 +303,18 @@ class DartSyntaxHighlighter { | @@ -306,18 +303,18 @@ class DartSyntaxHighlighter { | ||
| 306 | // Block comments | 303 | // Block comments |
| 307 | if (_scanner.scan(RegExp(r'/\*(.|\n)*\*/'))) { | 304 | if (_scanner.scan(RegExp(r'/\*(.|\n)*\*/'))) { |
| 308 | _spans.add(_HighlightSpan(_HighlightType.comment, | 305 | _spans.add(_HighlightSpan(_HighlightType.comment, |
| 309 | - _scanner.lastMatch.start, _scanner.lastMatch.end)); | 306 | + _scanner.lastMatch!.start, _scanner.lastMatch!.end)); |
| 310 | continue; | 307 | continue; |
| 311 | } | 308 | } |
| 312 | 309 | ||
| 313 | // Line comments | 310 | // Line comments |
| 314 | if (_scanner.scan('//')) { | 311 | if (_scanner.scan('//')) { |
| 315 | - final int startComment = _scanner.lastMatch.start; | 312 | + final int startComment = _scanner.lastMatch!.start; |
| 316 | 313 | ||
| 317 | bool eof = false; | 314 | bool eof = false; |
| 318 | int endComment; | 315 | int endComment; |
| 319 | if (_scanner.scan(RegExp(r'.*\n'))) { | 316 | if (_scanner.scan(RegExp(r'.*\n'))) { |
| 320 | - endComment = _scanner.lastMatch.end - 1; | 317 | + endComment = _scanner.lastMatch!.end - 1; |
| 321 | } else { | 318 | } else { |
| 322 | eof = true; | 319 | eof = true; |
| 323 | endComment = _src.length; | 320 | endComment = _src.length; |
| @@ -336,78 +333,78 @@ class DartSyntaxHighlighter { | @@ -336,78 +333,78 @@ class DartSyntaxHighlighter { | ||
| 336 | // Raw r"String" | 333 | // Raw r"String" |
| 337 | if (_scanner.scan(RegExp(r'r".*"'))) { | 334 | if (_scanner.scan(RegExp(r'r".*"'))) { |
| 338 | _spans.add(_HighlightSpan(_HighlightType.string, | 335 | _spans.add(_HighlightSpan(_HighlightType.string, |
| 339 | - _scanner.lastMatch.start, _scanner.lastMatch.end)); | 336 | + _scanner.lastMatch!.start, _scanner.lastMatch!.end)); |
| 340 | continue; | 337 | continue; |
| 341 | } | 338 | } |
| 342 | 339 | ||
| 343 | // Raw r'String' | 340 | // Raw r'String' |
| 344 | if (_scanner.scan(RegExp(r"r'.*'"))) { | 341 | if (_scanner.scan(RegExp(r"r'.*'"))) { |
| 345 | _spans.add(_HighlightSpan(_HighlightType.string, | 342 | _spans.add(_HighlightSpan(_HighlightType.string, |
| 346 | - _scanner.lastMatch.start, _scanner.lastMatch.end)); | 343 | + _scanner.lastMatch!.start, _scanner.lastMatch!.end)); |
| 347 | continue; | 344 | continue; |
| 348 | } | 345 | } |
| 349 | 346 | ||
| 350 | // Multiline """String""" | 347 | // Multiline """String""" |
| 351 | if (_scanner.scan(RegExp(r'"""(?:[^"\\]|\\(.|\n))*"""'))) { | 348 | if (_scanner.scan(RegExp(r'"""(?:[^"\\]|\\(.|\n))*"""'))) { |
| 352 | _spans.add(_HighlightSpan(_HighlightType.string, | 349 | _spans.add(_HighlightSpan(_HighlightType.string, |
| 353 | - _scanner.lastMatch.start, _scanner.lastMatch.end)); | 350 | + _scanner.lastMatch!.start, _scanner.lastMatch!.end)); |
| 354 | continue; | 351 | continue; |
| 355 | } | 352 | } |
| 356 | 353 | ||
| 357 | // Multiline '''String''' | 354 | // Multiline '''String''' |
| 358 | if (_scanner.scan(RegExp(r"'''(?:[^'\\]|\\(.|\n))*'''"))) { | 355 | if (_scanner.scan(RegExp(r"'''(?:[^'\\]|\\(.|\n))*'''"))) { |
| 359 | _spans.add(_HighlightSpan(_HighlightType.string, | 356 | _spans.add(_HighlightSpan(_HighlightType.string, |
| 360 | - _scanner.lastMatch.start, _scanner.lastMatch.end)); | 357 | + _scanner.lastMatch!.start, _scanner.lastMatch!.end)); |
| 361 | continue; | 358 | continue; |
| 362 | } | 359 | } |
| 363 | 360 | ||
| 364 | // "String" | 361 | // "String" |
| 365 | if (_scanner.scan(RegExp(r'"(?:[^"\\]|\\.)*"'))) { | 362 | if (_scanner.scan(RegExp(r'"(?:[^"\\]|\\.)*"'))) { |
| 366 | _spans.add(_HighlightSpan(_HighlightType.string, | 363 | _spans.add(_HighlightSpan(_HighlightType.string, |
| 367 | - _scanner.lastMatch.start, _scanner.lastMatch.end)); | 364 | + _scanner.lastMatch!.start, _scanner.lastMatch!.end)); |
| 368 | continue; | 365 | continue; |
| 369 | } | 366 | } |
| 370 | 367 | ||
| 371 | // 'String' | 368 | // 'String' |
| 372 | if (_scanner.scan(RegExp(r"'(?:[^'\\]|\\.)*'"))) { | 369 | if (_scanner.scan(RegExp(r"'(?:[^'\\]|\\.)*'"))) { |
| 373 | _spans.add(_HighlightSpan(_HighlightType.string, | 370 | _spans.add(_HighlightSpan(_HighlightType.string, |
| 374 | - _scanner.lastMatch.start, _scanner.lastMatch.end)); | 371 | + _scanner.lastMatch!.start, _scanner.lastMatch!.end)); |
| 375 | continue; | 372 | continue; |
| 376 | } | 373 | } |
| 377 | 374 | ||
| 378 | // Double | 375 | // Double |
| 379 | if (_scanner.scan(RegExp(r'\d+\.\d+'))) { | 376 | if (_scanner.scan(RegExp(r'\d+\.\d+'))) { |
| 380 | _spans.add(_HighlightSpan(_HighlightType.number, | 377 | _spans.add(_HighlightSpan(_HighlightType.number, |
| 381 | - _scanner.lastMatch.start, _scanner.lastMatch.end)); | 378 | + _scanner.lastMatch!.start, _scanner.lastMatch!.end)); |
| 382 | continue; | 379 | continue; |
| 383 | } | 380 | } |
| 384 | 381 | ||
| 385 | // Integer | 382 | // Integer |
| 386 | if (_scanner.scan(RegExp(r'\d+'))) { | 383 | if (_scanner.scan(RegExp(r'\d+'))) { |
| 387 | _spans.add(_HighlightSpan(_HighlightType.number, | 384 | _spans.add(_HighlightSpan(_HighlightType.number, |
| 388 | - _scanner.lastMatch.start, _scanner.lastMatch.end)); | 385 | + _scanner.lastMatch!.start, _scanner.lastMatch!.end)); |
| 389 | continue; | 386 | continue; |
| 390 | } | 387 | } |
| 391 | 388 | ||
| 392 | // Punctuation | 389 | // Punctuation |
| 393 | if (_scanner.scan(RegExp(r'[\[\]{}().!=<>&\|\?\+\-\*/%\^~;:,]'))) { | 390 | if (_scanner.scan(RegExp(r'[\[\]{}().!=<>&\|\?\+\-\*/%\^~;:,]'))) { |
| 394 | _spans.add(_HighlightSpan(_HighlightType.punctuation, | 391 | _spans.add(_HighlightSpan(_HighlightType.punctuation, |
| 395 | - _scanner.lastMatch.start, _scanner.lastMatch.end)); | 392 | + _scanner.lastMatch!.start, _scanner.lastMatch!.end)); |
| 396 | continue; | 393 | continue; |
| 397 | } | 394 | } |
| 398 | 395 | ||
| 399 | // Meta data | 396 | // Meta data |
| 400 | if (_scanner.scan(RegExp(r'@\w+'))) { | 397 | if (_scanner.scan(RegExp(r'@\w+'))) { |
| 401 | _spans.add(_HighlightSpan(_HighlightType.keyword, | 398 | _spans.add(_HighlightSpan(_HighlightType.keyword, |
| 402 | - _scanner.lastMatch.start, _scanner.lastMatch.end)); | 399 | + _scanner.lastMatch!.start, _scanner.lastMatch!.end)); |
| 403 | continue; | 400 | continue; |
| 404 | } | 401 | } |
| 405 | 402 | ||
| 406 | // Words | 403 | // Words |
| 407 | if (_scanner.scan(RegExp(r'\w+'))) { | 404 | if (_scanner.scan(RegExp(r'\w+'))) { |
| 408 | - _HighlightType type; | 405 | + _HighlightType? type; |
| 409 | 406 | ||
| 410 | - String word = _scanner.lastMatch[0]; | 407 | + String word = _scanner.lastMatch![0]!; |
| 411 | if (word.startsWith('_')) { | 408 | if (word.startsWith('_')) { |
| 412 | word = word.substring(1); | 409 | word = word.substring(1); |
| 413 | } | 410 | } |
| @@ -425,7 +422,7 @@ class DartSyntaxHighlighter { | @@ -425,7 +422,7 @@ class DartSyntaxHighlighter { | ||
| 425 | 422 | ||
| 426 | if (type != null) { | 423 | if (type != null) { |
| 427 | _spans.add(_HighlightSpan( | 424 | _spans.add(_HighlightSpan( |
| 428 | - type, _scanner.lastMatch.start, _scanner.lastMatch.end)); | 425 | + type, _scanner.lastMatch!.start, _scanner.lastMatch!.end)); |
| 429 | } | 426 | } |
| 430 | } | 427 | } |
| 431 | 428 |
-
Please register or login to post a comment