proviso 2.0.0
proviso: ^2.0.0 copied to clipboard
Complete set of tools for widgets conditional rendering and wrapping. Conditional widgets and builders.
Proviso Example #
import 'package:flutter/material.dart';
import 'package:proviso/proviso.dart';
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
children: [
ConditionWidget(
condition: isActive,
widget: ActiveView(),
fallback: InactiveView(),
),
ConditionBuilder(
condition: (_) => hasItems,
trueBuilder: (_) => ItemList(),
fallbackBuilder: (_) => EmptyState(),
),
SwitchCaseBuilder.widget<String>(
context: context,
condition: (_) => status,
caseBuilders: {
'loading': (_) => LoadingWidget(),
'success': (_) => SuccessWidget(),
'error': (_) => ErrorWidget(),
},
fallbackBuilder: (_) => UnknownStatusWidget(),
),
ConditionalWrap(
shouldWrap: isSelected,
child: Text('Hello'),
parentBuilder: (child) => Container(
color: Colors.blue,
child: child,
),
),
SafeBuilder(
widgetBuilder: (_) => riskyWidget,
fallbackBuilder: (error, stackTrace, _) => ErrorText(error),
),
PlatformWidget(
android: (_) => MaterialButton(),
ios: (_) => CupertinoButton(),
web: (_) => WebButton(),
fallback: (_) => DefaultButton(),
),
MediaQueryCondition(
condition: (_, mq) => mq.size.width > 600,
builder: (_) => WideLayout(),
fallbackBuilder: (_) => NarrowLayout(),
),
AsyncConditional<User>(
future: fetchUser(),
loading: (_) => CircularProgressIndicator(),
data: (_, user) => UserCard(user),
error: (_, error, __) => ErrorWidget(error),
),
AnimatedConditional(
condition: isVisible,
trueWidget: DetailView(),
falseWidget: SummaryView(),
),
ReactiveConditional<bool>(
notifier: isActiveNotifier,
condition: (value) => value,
trueBuilder: (_) => ActiveIndicator(),
fallbackBuilder: (_) => InactiveIndicator(),
),
IfNotEmpty<User>(
items: users,
builder: (_, users) => UserList(users),
fallbackBuilder: (_) => EmptyState(),
),
],
);
}
}