Showing
5 changed files
with
46 additions
and
34 deletions
@@ -23,7 +23,7 @@ jobs: | @@ -23,7 +23,7 @@ jobs: | ||
23 | # https://github.com/marketplace/actions/flutter-action | 23 | # https://github.com/marketplace/actions/flutter-action |
24 | - uses: subosito/flutter-action@v1 | 24 | - uses: subosito/flutter-action@v1 |
25 | with: | 25 | with: |
26 | - flutter-version: "1.22.3" | 26 | + flutter-version: "2.0.2" |
27 | channel: "stable" | 27 | channel: "stable" |
28 | - run: flutter pub get | 28 | - run: flutter pub get |
29 | #- run: flutter analyze | 29 | #- run: flutter analyze |
@@ -86,6 +86,16 @@ void main() { | @@ -86,6 +86,16 @@ void main() { | ||
86 | } | 86 | } |
87 | }); | 87 | }); |
88 | 88 | ||
89 | + test('ever', () async { | ||
90 | + RxString count = ''.obs; | ||
91 | + var result = ''; | ||
92 | + ever<String>(count, (value) { | ||
93 | + result = value; | ||
94 | + }); | ||
95 | + count.value = '1'; | ||
96 | + expect('1', result); | ||
97 | + }); | ||
98 | + | ||
89 | /// Tests with GetTests | 99 | /// Tests with GetTests |
90 | /// TEMPORARILY REMOVED from the null-safetym branch as | 100 | /// TEMPORARILY REMOVED from the null-safetym branch as |
91 | /// get_test is not yet null safety. | 101 | /// get_test is not yet null safety. |
@@ -93,16 +93,17 @@ class ParseRouteTree { | @@ -93,16 +93,17 @@ class ParseRouteTree { | ||
93 | ); | 93 | ); |
94 | } | 94 | } |
95 | 95 | ||
96 | - | ||
97 | Map<String, String?> _parseParams(String path, PathDecoded routePath) { | 96 | Map<String, String?> _parseParams(String path, PathDecoded routePath) { |
98 | final params = <String, String?>{}; | 97 | final params = <String, String?>{}; |
99 | var idx = path.indexOf('?'); | 98 | var idx = path.indexOf('?'); |
100 | if (idx > -1) { | 99 | if (idx > -1) { |
101 | path = path.substring(0, idx); | 100 | path = path.substring(0, idx); |
102 | final uri = Uri.tryParse(path); | 101 | final uri = Uri.tryParse(path); |
102 | + if (uri != null) { | ||
103 | params.addAll(uri.queryParameters); | 103 | params.addAll(uri.queryParameters); |
104 | } | 104 | } |
105 | - Match paramsMatch = routePath.regex.firstMatch(path); | 105 | + } |
106 | + var paramsMatch = routePath.regex.firstMatch(path); | ||
106 | 107 | ||
107 | for (var i = 0; i < routePath.keys.length; i++) { | 108 | for (var i = 0; i < routePath.keys.length; i++) { |
108 | var param = Uri.decodeQueryComponent(paramsMatch![i + 1]!); | 109 | var param = Uri.decodeQueryComponent(paramsMatch![i + 1]!); |
@@ -225,7 +225,7 @@ abstract class _RxImpl<T> extends RxNotifier<T> with RxObjectMixin<T> { | @@ -225,7 +225,7 @@ abstract class _RxImpl<T> extends RxNotifier<T> with RxObjectMixin<T> { | ||
225 | /// secondsRx.trigger(2); // This will trigger the listener independently from the value. | 225 | /// secondsRx.trigger(2); // This will trigger the listener independently from the value. |
226 | /// ``` | 226 | /// ``` |
227 | /// | 227 | /// |
228 | - void trigger([T v]) { | 228 | + void trigger(T v) { |
229 | var firstRebuild = this.firstRebuild; | 229 | var firstRebuild = this.firstRebuild; |
230 | value = v; | 230 | value = v; |
231 | // If it's not the first rebuild, the listeners have been called already | 231 | // If it's not the first rebuild, the listeners have been called already |
@@ -237,16 +237,16 @@ abstract class _RxImpl<T> extends RxNotifier<T> with RxObjectMixin<T> { | @@ -237,16 +237,16 @@ abstract class _RxImpl<T> extends RxNotifier<T> with RxObjectMixin<T> { | ||
237 | } | 237 | } |
238 | 238 | ||
239 | /// Rx class for `bool` Type. | 239 | /// Rx class for `bool` Type. |
240 | -class RxBool extends _RxImpl<bool?> { | ||
241 | - RxBool([bool? initial]) : super(initial); | 240 | +class RxBool extends _RxImpl<bool> { |
241 | + RxBool(bool initial) : super(initial); | ||
242 | 242 | ||
243 | bool? get isTrue => value; | 243 | bool? get isTrue => value; |
244 | 244 | ||
245 | bool get isFalse => !isTrue!; | 245 | bool get isFalse => !isTrue!; |
246 | 246 | ||
247 | - bool operator &(bool other) => other && value!; | 247 | + bool operator &(bool other) => other && value; |
248 | 248 | ||
249 | - bool operator |(bool other) => other || value!; | 249 | + bool operator |(bool other) => other || value; |
250 | 250 | ||
251 | bool operator ^(bool other) => !other == value; | 251 | bool operator ^(bool other) => !other == value; |
252 | 252 | ||
@@ -256,53 +256,53 @@ class RxBool extends _RxImpl<bool?> { | @@ -256,53 +256,53 @@ class RxBool extends _RxImpl<bool?> { | ||
256 | /// not really a dart thing since we have '..' operator | 256 | /// not really a dart thing since we have '..' operator |
257 | // ignore: avoid_returning_this | 257 | // ignore: avoid_returning_this |
258 | RxBool toggle() { | 258 | RxBool toggle() { |
259 | - subject.add(_value = !_value!); | 259 | + subject.add(_value = !_value); |
260 | return this; | 260 | return this; |
261 | } | 261 | } |
262 | 262 | ||
263 | @override | 263 | @override |
264 | String toString() { | 264 | String toString() { |
265 | - return value! ? "true" : "false"; | 265 | + return value ? "true" : "false"; |
266 | } | 266 | } |
267 | } | 267 | } |
268 | 268 | ||
269 | /// Rx class for `String` Type. | 269 | /// Rx class for `String` Type. |
270 | -class RxString extends _RxImpl<String?> implements Comparable<String>, Pattern { | ||
271 | - RxString([String? initial]) : super(initial); | 270 | +class RxString extends _RxImpl<String> implements Comparable<String>, Pattern { |
271 | + RxString(String initial) : super(initial); | ||
272 | 272 | ||
273 | - String operator +(String val) => _value! + val; | 273 | + String operator +(String val) => _value + val; |
274 | 274 | ||
275 | /// Compares this string to [other]. | 275 | /// Compares this string to [other]. |
276 | @override | 276 | @override |
277 | int compareTo(String other) { | 277 | int compareTo(String other) { |
278 | - return value!.compareTo(other); | 278 | + return value.compareTo(other); |
279 | } | 279 | } |
280 | 280 | ||
281 | /// Returns true if this string ends with [other]. For example: | 281 | /// Returns true if this string ends with [other]. For example: |
282 | /// | 282 | /// |
283 | /// 'Dart'.endsWith('t'); // true | 283 | /// 'Dart'.endsWith('t'); // true |
284 | bool endsWith(String other) { | 284 | bool endsWith(String other) { |
285 | - return value!.endsWith(other); | 285 | + return value.endsWith(other); |
286 | } | 286 | } |
287 | 287 | ||
288 | /// Returns true if this string starts with a match of [pattern]. | 288 | /// Returns true if this string starts with a match of [pattern]. |
289 | bool startsWith(Pattern pattern, [int index = 0]) { | 289 | bool startsWith(Pattern pattern, [int index = 0]) { |
290 | - return value!.startsWith(pattern, index); | 290 | + return value.startsWith(pattern, index); |
291 | } | 291 | } |
292 | 292 | ||
293 | /// Returns the position of the first match of [pattern] in this string | 293 | /// Returns the position of the first match of [pattern] in this string |
294 | int indexOf(Pattern pattern, [int start = 0]) { | 294 | int indexOf(Pattern pattern, [int start = 0]) { |
295 | - return value!.indexOf(pattern, start); | 295 | + return value.indexOf(pattern, start); |
296 | } | 296 | } |
297 | 297 | ||
298 | /// Returns the starting position of the last match [pattern] in this string, | 298 | /// Returns the starting position of the last match [pattern] in this string, |
299 | /// searching backward starting at [start], inclusive: | 299 | /// searching backward starting at [start], inclusive: |
300 | int lastIndexOf(Pattern pattern, [int? start]) { | 300 | int lastIndexOf(Pattern pattern, [int? start]) { |
301 | - return value!.lastIndexOf(pattern, start); | 301 | + return value.lastIndexOf(pattern, start); |
302 | } | 302 | } |
303 | 303 | ||
304 | /// Returns true if this string is empty. | 304 | /// Returns true if this string is empty. |
305 | - bool get isEmpty => value!.isEmpty; | 305 | + bool get isEmpty => value.isEmpty; |
306 | 306 | ||
307 | /// Returns true if this string is not empty. | 307 | /// Returns true if this string is not empty. |
308 | bool get isNotEmpty => !isEmpty; | 308 | bool get isNotEmpty => !isEmpty; |
@@ -310,26 +310,26 @@ class RxString extends _RxImpl<String?> implements Comparable<String>, Pattern { | @@ -310,26 +310,26 @@ class RxString extends _RxImpl<String?> implements Comparable<String>, Pattern { | ||
310 | /// Returns the substring of this string that extends from [startIndex], | 310 | /// Returns the substring of this string that extends from [startIndex], |
311 | /// inclusive, to [endIndex], exclusive | 311 | /// inclusive, to [endIndex], exclusive |
312 | String substring(int startIndex, [int? endIndex]) { | 312 | String substring(int startIndex, [int? endIndex]) { |
313 | - return value!.substring(startIndex, endIndex); | 313 | + return value.substring(startIndex, endIndex); |
314 | } | 314 | } |
315 | 315 | ||
316 | /// Returns the string without any leading and trailing whitespace. | 316 | /// Returns the string without any leading and trailing whitespace. |
317 | String trim() { | 317 | String trim() { |
318 | - return value!.trim(); | 318 | + return value.trim(); |
319 | } | 319 | } |
320 | 320 | ||
321 | /// Returns the string without any leading whitespace. | 321 | /// Returns the string without any leading whitespace. |
322 | /// | 322 | /// |
323 | /// As [trim], but only removes leading whitespace. | 323 | /// As [trim], but only removes leading whitespace. |
324 | String trimLeft() { | 324 | String trimLeft() { |
325 | - return value!.trimLeft(); | 325 | + return value.trimLeft(); |
326 | } | 326 | } |
327 | 327 | ||
328 | /// Returns the string without any trailing whitespace. | 328 | /// Returns the string without any trailing whitespace. |
329 | /// | 329 | /// |
330 | /// As [trim], but only removes trailing whitespace. | 330 | /// As [trim], but only removes trailing whitespace. |
331 | String trimRight() { | 331 | String trimRight() { |
332 | - return value!.trimRight(); | 332 | + return value.trimRight(); |
333 | } | 333 | } |
334 | 334 | ||
335 | /// Pads this string on the left if it is shorter than [width]. | 335 | /// Pads this string on the left if it is shorter than [width]. |
@@ -337,7 +337,7 @@ class RxString extends _RxImpl<String?> implements Comparable<String>, Pattern { | @@ -337,7 +337,7 @@ class RxString extends _RxImpl<String?> implements Comparable<String>, Pattern { | ||
337 | /// Return a new string that prepends [padding] onto this string | 337 | /// Return a new string that prepends [padding] onto this string |
338 | /// one time for each position the length is less than [width]. | 338 | /// one time for each position the length is less than [width]. |
339 | String padLeft(int width, [String padding = ' ']) { | 339 | String padLeft(int width, [String padding = ' ']) { |
340 | - return value!.padLeft(width, padding); | 340 | + return value.padLeft(width, padding); |
341 | } | 341 | } |
342 | 342 | ||
343 | /// Pads this string on the right if it is shorter than [width]. | 343 | /// Pads this string on the right if it is shorter than [width]. |
@@ -345,55 +345,55 @@ class RxString extends _RxImpl<String?> implements Comparable<String>, Pattern { | @@ -345,55 +345,55 @@ class RxString extends _RxImpl<String?> implements Comparable<String>, Pattern { | ||
345 | /// Return a new string that appends [padding] after this string | 345 | /// Return a new string that appends [padding] after this string |
346 | /// one time for each position the length is less than [width]. | 346 | /// one time for each position the length is less than [width]. |
347 | String padRight(int width, [String padding = ' ']) { | 347 | String padRight(int width, [String padding = ' ']) { |
348 | - return value!.padRight(width, padding); | 348 | + return value.padRight(width, padding); |
349 | } | 349 | } |
350 | 350 | ||
351 | /// Returns true if this string contains a match of [other]: | 351 | /// Returns true if this string contains a match of [other]: |
352 | bool contains(Pattern other, [int startIndex = 0]) { | 352 | bool contains(Pattern other, [int startIndex = 0]) { |
353 | - return value!.contains(other, startIndex); | 353 | + return value.contains(other, startIndex); |
354 | } | 354 | } |
355 | 355 | ||
356 | /// Replaces all substrings that match [from] with [replace]. | 356 | /// Replaces all substrings that match [from] with [replace]. |
357 | String replaceAll(Pattern from, String replace) { | 357 | String replaceAll(Pattern from, String replace) { |
358 | - return value!.replaceAll(from, replace); | 358 | + return value.replaceAll(from, replace); |
359 | } | 359 | } |
360 | 360 | ||
361 | /// Splits the string at matches of [pattern] and returns a list | 361 | /// Splits the string at matches of [pattern] and returns a list |
362 | /// of substrings. | 362 | /// of substrings. |
363 | List<String> split(Pattern pattern) { | 363 | List<String> split(Pattern pattern) { |
364 | - return value!.split(pattern); | 364 | + return value.split(pattern); |
365 | } | 365 | } |
366 | 366 | ||
367 | /// Returns an unmodifiable list of the UTF-16 code units of this string. | 367 | /// Returns an unmodifiable list of the UTF-16 code units of this string. |
368 | - List<int> get codeUnits => value!.codeUnits; | 368 | + List<int> get codeUnits => value.codeUnits; |
369 | 369 | ||
370 | /// Returns an [Iterable] of Unicode code-points of this string. | 370 | /// Returns an [Iterable] of Unicode code-points of this string. |
371 | /// | 371 | /// |
372 | /// If the string contains surrogate pairs, they are combined and returned | 372 | /// If the string contains surrogate pairs, they are combined and returned |
373 | /// as one integer by this iterator. Unmatched surrogate halves are treated | 373 | /// as one integer by this iterator. Unmatched surrogate halves are treated |
374 | /// like valid 16-bit code-units. | 374 | /// like valid 16-bit code-units. |
375 | - Runes get runes => value!.runes; | 375 | + Runes get runes => value.runes; |
376 | 376 | ||
377 | /// Converts all characters in this string to lower case. | 377 | /// Converts all characters in this string to lower case. |
378 | /// If the string is already in all lower case, this method returns `this`. | 378 | /// If the string is already in all lower case, this method returns `this`. |
379 | String toLowerCase() { | 379 | String toLowerCase() { |
380 | - return value!.toLowerCase(); | 380 | + return value.toLowerCase(); |
381 | } | 381 | } |
382 | 382 | ||
383 | /// Converts all characters in this string to upper case. | 383 | /// Converts all characters in this string to upper case. |
384 | /// If the string is already in all upper case, this method returns `this`. | 384 | /// If the string is already in all upper case, this method returns `this`. |
385 | String toUpperCase() { | 385 | String toUpperCase() { |
386 | - return value!.toUpperCase(); | 386 | + return value.toUpperCase(); |
387 | } | 387 | } |
388 | 388 | ||
389 | @override | 389 | @override |
390 | Iterable<Match> allMatches(String string, [int start = 0]) { | 390 | Iterable<Match> allMatches(String string, [int start = 0]) { |
391 | - return value!.allMatches(string, start); | 391 | + return value.allMatches(string, start); |
392 | } | 392 | } |
393 | 393 | ||
394 | @override | 394 | @override |
395 | Match? matchAsPrefix(String string, [int start = 0]) { | 395 | Match? matchAsPrefix(String string, [int start = 0]) { |
396 | - return value!.matchAsPrefix(string, start); | 396 | + return value.matchAsPrefix(string, start); |
397 | } | 397 | } |
398 | } | 398 | } |
399 | 399 |
-
Please register or login to post a comment