The utilities extension for Dart & Flutter object.

version license

Getting started

dependencies:
  objectx: '1.0.1+1'

Usage

For all extensions:

import 'package:objectx/objectx.dart';

· let extension on T (T extends Object?)

String foo(String a) {
  return 'Value is $a';
}

String? boo() {
  return null;
}

void main(){
  String fooValue;
  // Method 1: create a local value.
  final value = boo();
  if(value != null){
    fooValue = foo(value);
  }else{
    fooValue = '';
  }
  // Method 2: without creating local value, but will call the boo method multi times.
  fooValue = boo() != null ? foo(boo()!) : '';
  // With let: the boo value is called once, let provides that value and continues to process it.
  fooValue = boo()?.let(foo) ?? '';
}

· letOrNull extension on T? (T extends Object)

  // Like let, but addition onNull function
  fooValue = boo().letOrNull((it) => foo(it), onNull: () => '');

· print extension on Object?

  • print to console with tag > $tag: $object
// Method 1:
String foo(String a) {
  final value = 'Value is $a';
  print(Value);
  return value;
}

// With objectx:
String foo(String a) {
  return 'Value is $a'..print();
}

· castTo extension on T (T extends Object?)

class A {
  const A(this.value);

  final String value;
}

class B extends A {
  const B(super.value, this.number);

  final int number;
}

void foo(A a) {
  int? value;
  // Method 1:
  value = a is B ? a.number : null;
  // With castTo:
  value = a.castTo<B?>()?.number; // returns null if can not cast a to B
}

· firstLetter extension on String

final String a = 'Hello World';
final first = a[0]; // 'H'
final firstLetter = a.firstLetter(); // 'HW', split by space

· toNum extension on String

String a = '3.14';
a.toNum();// 3.14;
a.toInt(); // null // cause int.tryParse('3.14') = null
a.toDouble(); // 3.14
a.toBool(); // null

· limitIn extension on num

// return value in the range [0, 1], 
// if the value is smaller than 0, the minimum value returns is 0,
// and otherwise, the maximum value is 1.
final finalValue = limitIn(0, value, 1);

· read extension on Map<K, V>

Features and bugs

Warning

Some extension is not work in dynamic type.
Please cast to Object? or somethings like that to use it.
See more https://dart.dev/language/extension-methods#static-types-and-dynamic

Please file feature requests and bugs at the issue tracker.

Libraries

objectx
Support for doing something awesome.