$cond<TValue> method

Widget $cond<TValue>(
  1. ValueListenable<TValue> valueListenable, {
  2. ValueWidgetBuilder<TValue>? $true,
  3. ValueWidgetBuilder<TValue>? $false,
  4. Widget? child,
  5. bool valueHandle(
    1. TValue
    )?,
})

绑定到指定 ValueListenable, 当 valueListenable 值发生变化时, 若值判定结果为 true 则使用 $true 构建 Widget, 否则使用 $false 构建 Widget

当值类型不为 bool 时, 非 null 即被判定为 true, 否则为 false 可通过指定 valueHandle 对值进行处理 child 用于向构建方法中传入 Widget

// example
final bp1$ = BindableProperty.$value(initial: 1);
@override
Widget build(BuildContext context) {
  return $cond<int>(bp1$,
    $true: (context, value, child) => Text("tom!"),
    $false: (context, value, child) => Text("jerry!"),
    valueHandle: (value) => value == 1);
}

Implementation

Widget $cond<TValue>(ValueListenable<TValue> valueListenable,
    {ValueWidgetBuilder<TValue>? $true,
    ValueWidgetBuilder<TValue>? $false,
    Widget? child,
    bool Function(TValue)? valueHandle}) {
  assert($true != null || $false != null);
  return $select<TValue>(valueListenable,
      selector: (value) => (valueHandle != null
              ? valueHandle(value)
              : (value is bool ? value : true))
          ? $true?.call
          : $false?.call,
      child: child);
}