from<R> method

R from<R>([
  1. Key? key
])

Gets a related state by type

Implementation

R from<R>([Key? key]) {
  assert(() {
    log('🔍 Getting related state of type $R from $T${key != null ? ' with key: $key' : ''}',
        level: 10);
    return true;
  }());

  if (related == null || related!.isEmpty) {
    throw StateError('''
❌ No Related States Found
━━━━━━━━━━━━━━━━━━━━━
Parent type: $T
Requested type: $R${key != null ? '\nRequested key: $key' : ''}
━━━━━━━━━━━━━━━━━━━━━
''');
  }

  final result = key != null
      ? related!.firstWhere(
          (n) => n.notifier is R && n.keyNotifier == key,
          orElse: () => throw StateError('''
❌ Related State Not Found
━━━━━━━━━━━━━━━━━━━━━
Looking for: $R with key: $key
Parent type: $T
Available types: ${related!.map((r) => '${r.notifier.runtimeType}(${r.keyNotifier})').join(', ')}
━━━━━━━━━━━━━━━━━━━━━
'''),
        )
      : related!.firstWhere(
          (n) => n.notifier is R,
          orElse: () => throw StateError('''
❌ Related State Not Found
━━━━━━━━━━━━━━━━━━━━━
Looking for: $R
Parent type: $T
Available types: ${related!.map((r) => '${r.notifier.runtimeType}(${r.keyNotifier})').join(', ')}
━━━━━━━━━━━━━━━━━━━━━
'''),
        );

  return result.notifier as R;
}