SpinnerBox.builder constructor

SpinnerBox.builder({
  1. Key? key,
  2. List<SpinnerHeaderData>? titles,
  3. PopupValueNotifier? controller,
  4. required SpinnerBoxBuilder builder,
  5. Widget? prefix,
  6. bool isExpandPrefix = false,
  7. Widget? suffix,
  8. bool isExpandSuffix = false,
  9. SpinnerHeaderTheme theme = defaultPinnerTheme,
  10. Color? barrierColor,
  11. SpinnerViewTransitionsBuilder? transitionsBuilder,
})

每次唤起弹框,都会重新构建内部视图,可以减少对数据源的监听修改

使用示例:

SpinnerBox.builder(
   prefix: prefix,
   suffix: suffix,
   titles: const ['title1', 'tilte2'],
   builder: (notifier) => [
     CustomWidget().heightFll,
     CustomWidget().heightPart,
   ],
 )

控制器方法:

  notifier.updateName('update-title1');
 'or' notifier.close();
 'or' notifier.reset();

Implementation

SpinnerBox.builder({
  super.key,
  List<SpinnerHeaderData>? titles,
  PopupValueNotifier? controller,
  required SpinnerBoxBuilder builder,
  this.prefix,
  this.isExpandPrefix = false,
  this.suffix,
  this.isExpandSuffix = false,
  this.theme = defaultPinnerTheme,
  this.barrierColor,
  this.transitionsBuilder,
}) {
  assert(
      (titles?.isNotEmpty == true || controller != null) &&
          !(titles?.isNotEmpty == true && controller != null),
      '`SpinnerBox.builder` 构造方法 `titles` 或者 `controller` 有且只有一个有效。');
  isRebuilder = true;
  if (controller != null) {
    spinnerController = controller;
  } else if (titles?.isNotEmpty == true) {
    spinnerController = PopupValueNotifier.titles(titles!);
  }
  // widgets = builder.call(controller);
  widgetsBuilder = builder;
}