of<T extends Object> static method

T of<T extends Object>(
  1. BuildContext context, {
  2. bool? onlyProvider = false,
  3. GetIt? di,
})
override

onlyProvider false: read Provider first, then DI true: only read provider; null: read DI first, then Provider;

Implementation

static T of<T extends Object>(
  BuildContext context, {
  bool? onlyProvider = false,
  GetIt? di,
}) {
  if (onlyProvider == false) {
    // Provider -> DI
    try {
      return Provider.of<T>(context, listen: false);
    } on ProviderNotFoundException {
      return readDI<T>(nothrow: false, di: di)!;
    }
  } else if (onlyProvider == true) {
    // Provider
    return Provider.of<T>(context, listen: false);
  } else {
    // DI -> Provider
    final diValue = readDI<T>(nothrow: true, di: di);
    if (diValue != null) return diValue;

    log(
      'Waring! `read<$T>(onlyProvider=null)` read Global first, then Provider',
      name: 'FlowR',
    );
    return Provider.of<T>(context, listen: false);
  }
}