Modulapp Utils

A set of static methods/getters to core dependency injection, logging, etc, across app's modules/sfeatures

Animation mixin

This mixin simplify the implementation of an animated widget Use that mixin on a StatefulWidget's state like this: class MyClassState extends State<MyClass> with SingleTickerProviderStateMixin, Animated<MyClass>

bool extensions

  • extension BooleanUtils on bool
    • dynamic let<T>(T Function() map, {...}) // For lazy devs which want to do "one line" computations on bool
    • dynamic check<T>(T result, {dynamic orIfFalse}) // Returns something depending if bool is true
    • dynamic not<T>(T result, {dynamic orIfTrue}) // Returns something depending if bool is false

Here is .check() example:

class SimpleButton extends StatelessWidget {
  final VoidCallback? onTap;
  final String text;
  final bool highlight;

  const SimpleButton({
    super.key,
    required this.text,
    this.onTap,
    this.highlight = false,
  });

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: onTap,
      // NOTE: here if [hightlight] is true then background will be red
      style: ButtonStyle(backgroundColor: highlight.check(Colors.red)),
      child: Text(text),
    );
  }
}

Color extensions

  • extension ColorUtils on Color
    • alpha, red, green, blue getters // Returns hexadecimal value as int
    • int getValue() // Returns hexadecimal value as int
    • Color darken([int percent = 10]) // Darken a color by percent amount (100 = black)
    • Color lighten([int percent = 10]) // Lighten a color by percent amount (100 = white)
    • Color fromHex(String hexString) // Returns color from hexadecimal String value
    • String toHex({bool leadingHashSign = true}) // Returns hexadecimal String value

BuildContext extensions

  • extension ContextUtils on BuildContext
    • MediaQueryData get mediaQuery // Shortcut to access context's MediaQuery
    • Size get viewSize // Shortcut to access context's MediaQuery size
    • EdgeInsets get viewInsets // Shortcut to access context's MediaQuery viewInsets
    • EdgeInsets get viewPadding // Shortcut to access context's MediaQuery viewPadding
    • Size get screenSize // Shortcut to access real Screen Size
      • e.g. final currentScreenSize = context.screenSize;

DateTime extensions

  • extension DateTimeUtils on DateTime
    • DateTime parseUtc(String formattedDate) // Unformats date and returns it in the UTC time zone
    • String toUtc(DateTime date) // Stringifies date and returns it in UTC time zone
    • String format(String format) // Formats date
    • bool get isExpired // Returns true if Now() is after date
  • extension StringToDateUtils on String
    • DateTime? fromFormattedDate(String format) // Tries to unformat date
    • String? reformat(String fromFormat, String toFormat) // Unformats then reformats date
  • extension NullableStringToDateUtils on String?
    • DateTime? get asDate // Tries to parse String as date

Iterable extensions

  • extension ListUtils
  • extension IterableUtils
  • extension NestedIterableUtils
  • extension IterableNullableUtils
  • extension PairListUtils<T, V> on Iterable<Pair<T, V>>
    • List<T> get firsts // Returns all Pairs' first value
    • List<V> get seconds // Returns all Pairs' second value
  • extension MapEntryListUtils<T, V> on Iterable<MapEntry<T, V>>
    • Map<T, V> toMap() // Returns a Map from a MapEntry list
  • extension ToListUtils on Object?
    • List toList() // Wraps an Object in a List
  • extension MapUtils<K, V> on Map<K, V>
    • Map<K, V> clone() // Returns a new Map with same values
    • MapEntry<K, V>? getWhere(bool Function(K, V) test) // Returns first MapEntry that passed test
    • void removeAll(Iterable<K> keys) // Removes items with key that match
    • Map<K, V> sort(int Function(MapEntry<K, V>, MapEntry<K, V>) sortFct) // Sorts Map depending on sortFct

Object extensions

  • extension ObjectNullableUtils on Object?
    • dynamic let<T>(T Function() map, {...}) // For lazy devs which want to do "one line" computations on nullable Objects

Here is .let() example:

class SimpleItem extends StatelessWidget {
  final String? title;
  final String? subtitle;
  final String? description;

  const SimpleItem({super.key, this.title, this.subtitle, this.description});

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        title.let((e) => Text(e), orIfNull: () => const Text('Title is missing')),
        ?subtitle.let((e) => Text(e)),
        ?description.let((e) => Text(e)),
      ],
    );
  }
}

Regex extensions

  • extension RegexUtils on String
    • bool get isValidName // Returns true if (for me) it's potentially a valid name
    • bool get isValidUrl // Returns true if (for me) it's potentially a valid Url
    • bool get isSocialNumber // Returns true if (for me) it's potentially a valid social number
    • bool get isSIRET // Returns true if (for me) it's potentially a valid SIRET
    • bool get isEmail // Returns true if (for me) it's potentially a valid Email
    • bool get isPhone // Returns true if (for me) it's potentially a valid Phone
    • bool get isPostalCode // Returns true if (for me) it's potentially a valid Postal Code
    • bool get isDate // Returns true if (for me) it's potentially a valid Date
    • bool get isValidFileName // Returns true if (for me) it's potentially a valid File Name

String extensions

  • extension StringUtils on String
    • double? parseAsDouble() // Tries to parse String as double
    • String limit([int maxLength = 100]) // Limits String's length by adding ...
    • String removeDiacritics() // Removes all accented characters
    • String clean() // Forces lower case and removes all accented characters
    • List<String> splitWords() // Splits all words separated by non alphabetic characters
    • List<String> cleanAndSplit() // Forces lower case and removes all accents and splits all words
    • String? getAllAfterFirst(String target) // Returns text placed after first target
    • String? getAllAfterLast(String target) // Returns text placed after last target
    • String? getAllBeforeFirst(String target) // Returns text placed before first target
    • String? getAllBeforeLast(String target) // Returns text placed before last target
    • String? getAllBetween(String target1, String target2) // Returns text placed between targets
    • String removeLastCharacter() // Removes last character
    • String removeLastZeros() // Cleans up decimals
    • int get lineLength // Returns number of lines
    • List<String> searchWords(List<String> searchedWords) // Search for words ignoring case and accents
    • Size computeSize(double fontSize, String fontFamily, {FontWeight? fontWeight, FontStyle? fontStyle}) // Returns rendered text size with small security margins

Widget extensions

  • extension WidgetUtils on Widget
    • Widget wrapWithHeroIfTagNotNull(String? tag) // Wraps with a Hero widget if tag not null
  • extension WidgeStatePropertytUtils

Libraries

modulapp_utils