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);
    } catch (e) {
      return _readDI<T>(nothrow: false, di: di)!;
    }
  } else if (onlyProvider == true) {
    // Provider
    return Provider.of<T>(context, listen: false);
  } else {
    // DI -> Provider
    try {
      return _readDI<T>(nothrow: false, di: di)!;
    } catch (e) {
      log(
        'Waring! `read<$T>(onlyProvider=null)` read Global first, then Provider',
        name: 'FlowR',
      );
      return Provider.of<T>(context, listen: false);
    }
  }
}