prefer-multi-provider
- Group
- Style
- Path
lint/style/prefer-multi-provider- Default
- Off, opt in
- Origin
- Falcon
- Domain
- provider
- Rule
- 388 of 512
Prefer a flat MultiProvider to directly nested provider widgets.
Invalid
import 'package:provider/provider.dart' as p;
void examples(Object existing) {
p.Provider(create: (_) => 1, child: p.Provider(create: (_) => 2));
p.Provider.value(value: existing, child: p.ChangeNotifierProvider.value(value: existing));
p.ChangeNotifierProvider(create: (_) => existing, child: p.ListenableProvider.value(value: existing));
new p.ListenableProvider(create: (_) => existing, child: new p.Provider(create: (_) => 1));
p.Provider<int>(create: (_) => 1, child: (p.Provider<String>(create: (_) => 'a')));
p.Provider<Object>.value(value: existing, child: p.ChangeNotifierProvider<Object>.value(value: existing));
p.ProxyProvider0<Object>(update: (_, previous) => existing, child: p.Provider.value(value: existing));
p.Provider.value(value: existing, child: p.ProxyProvider0<Object>(update: (_, previous) => existing));
p.ChangeNotifierProxyProvider0<Object>(update: (_, previous) => existing, child: p.Provider.value(value: existing));
p.Provider.value(value: existing, child: p.ChangeNotifierProxyProvider0<Object>(update: (_, previous) => existing));
p.ListenableProxyProvider0<Object>(update: (_, previous) => existing, child: p.Provider.value(value: existing));
p.Provider.value(value: existing, child: p.ListenableProxyProvider0<Object>(update: (_, previous) => existing));
}void examples(Object existing) { p.Provider(create: (_) => 1, child: p.Provider(create: (_) => 2)); p.Provider(create: (_) => 1, child: p.Provider(create: (_) => 2)); p.Provider.value(value: existing, child: p.ChangeNotifierProvider.value(value: existing)); p.Provider.value(value: existing, child: p.ChangeNotifierProvider.value(value: existing)); p.ChangeNotifierProvider(create: (_) => existing, child: p.ListenableProvider.value(value: existing)); p.ChangeNotifierProvider(create: (_) => existing, child: p.ListenableProvider.value(value: existing)); new p.ListenableProvider(create: (_) => existing, child: new p.Provider(create: (_) => 1)); new p.ListenableProvider(create: (_) => existing, child: new p.Provider(create: (_) => 1)); p.Provider<int>(create: (_) => 1, child: (p.Provider<String>(create: (_) => 'a'))); p.Provider<int>(create: (_) => 1, child: (p.Provider<String>(create: (_) => 'a'))); p.Provider<Object>.value(value: existing, child: p.ChangeNotifierProvider<Object>.value(value: existing)); p.Provider<Object>.value(value: existing, child: p.ChangeNotifierProvider<Object>.value(value: existing)); p.ProxyProvider0<Object>(update: (_, previous) => existing, child: p.Provider.value(value: existing)); p.ProxyProvider0<Object>(update: (_, previous) => existing, child: p.Provider.value(value: existing)); p.Provider.value(value: existing, child: p.ProxyProvider0<Object>(update: (_, previous) => existing)); p.Provider.value(value: existing, child: p.ProxyProvider0<Object>(update: (_, previous) => existing)); p.ChangeNotifierProxyProvider0<Object>(update: (_, previous) => existing, child: p.Provider.value(value: existing)); p.ChangeNotifierProxyProvider0<Object>(update: (_, previous) => existing, child: p.Provider.value(value: existing)); p.Provider.value(value: existing, child: p.ChangeNotifierProxyProvider0<Object>(update: (_, previous) => existing)); p.Provider.value(value: existing, child: p.ChangeNotifierProxyProvider0<Object>(update: (_, previous) => existing)); p.ListenableProxyProvider0<Object>(update: (_, previous) => existing, child: p.Provider.value(value: existing)); p.ListenableProxyProvider0<Object>(update: (_, previous) => existing, child: p.Provider.value(value: existing)); p.Provider.value(value: existing, child: p.ListenableProxyProvider0<Object>(update: (_, previous) => existing));Valid
import 'package:flutter/widgets.dart';
import 'package:provider/provider.dart' as p;
class Provider { Provider({Object? child}); }
class Wrapper { Wrapper({Object? child}); }
void examples(Object existing, Object child) {
p.Provider(create: (_) => 1);
p.Provider.value(value: existing, child: child);
p.MultiProvider(providers: [p.Provider(create: (_) => 1), p.Provider(create: (_) => 2)], child: child);
p.Provider(create: (_) => 1, child: Wrapper(child: p.Provider(create: (_) => 2)));
Provider(child: p.Provider(create: (_) => 1));
p.Provider(create: (_) => 1, child: Provider(child: child));
p.Provider(create: (_) => 1, child: p.MultiProvider(providers: [], child: child));
}
void shadowed(dynamic p) {
p.Provider(child: p.Provider());
}
void lookupChild(BuildContext context) {
p.Provider(create: (_) => 1, child: p.Provider.of<Object>(context));
}Configure prefer-multi-provider
Set its severity in falcon.json. See the configuration guide.
{
"linter": {
"rules": {
"style": {
"prefer-multi-provider": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/style/prefer-multi-provider: <reason>More style rules
- prefer-named-boolean-parameters
Flags explicit positional
boolparameters in private declarations and unconstrained closures. - prefer-named-parameters
Prefer named parameters when a declaration exceeds
max-number(default 1). - prefer-null-aware-method-calls
prefer_null_aware_method_callsrecommendedPrefers
f?.call()to calling a null-checked function after a!= nulltest. - prefer-padding-over-containerflutter
Prefers
Paddingover aContainerused only forpadding. - prefer-provider-extensionsprovider
Prefer context.read/watch when provider extensions are in scope.
- prefer-returning-condition
Flags an
ifreturning a boolean literal followed by the opposite literal. - prefer-riverpod-notifier-suffixriverpod
Requires a
Notifiersuffix on classes extending resolved Riverpod notifiers. - prefer-riverpod-provider-suffixriverpod
Requires a Provider suffix on resolved Riverpod top-level providers and static fields.