【问题标题】:Dart generic type as class-member function's typeDart 泛型类型作为类成员函数的类型
【发布时间】:2021-03-06 16:53:51
【问题描述】:

我有一个使用泛型的类: 屏幕块

class ScreenWithUpdater<DataType> extends StatefulWidget {
  final Updater<DataType> updater;
  final Widget Function(BuildContext, DataType) bodyBuilder;
  final Duration updatePeriod;

  const ScreenWithUpdater({
    Key key,
    @required this.updater,
    @required this.bodyBuilder,
    @required this.updatePeriod,
  }) : super(key: key);
  @override
  _ScreenWithUpdaterState createState() => _ScreenWithUpdaterState();
}

class _ScreenWithUpdaterState<DataType>
    extends State<ScreenWithUpdater<DataType>> {
  UpdateBloc<DataType> _bloc;

  @override
  void initState() {
    super.initState();
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    _bloc = UpdateBloc<DataType>(
      updatePeriod: widget.updatePeriod,
      updater: widget.updater,
    );
  }

  @override
  void dispose() {
    _bloc.close();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return BlocBuilder<UpdateBloc, UpdateState>(
      cubit: _bloc,
      builder: (
        context,
        state,
      ) {
        if (state is ShowLoader) {
          return LoaderWidget();
        } else if (state is UpdateMainState<DataType>) {
          return widget.bodyBuilder(context, state.data);
        } else {
          return Center(
            child: Text('Something went wrong'),
          );
        }
      },
    );
  }
}

当我这样称呼它时:

ScreenWithUpdater<List<OrderFromApi>>(
            updatePeriod: updatePeriod,
            updater: OrdersPageUpdater(),
            bodyBuilder: (context, orders) => OrdersPage(microOrders: orders),
          ),

异常失败

type '(BuildContext, List) => OrdersPage' 不是类型 '(BuildContext, dynamic) => Widget' 的子类型


但是当我用下一个方式打电话时

ScreenWithUpdater(
            updatePeriod: updatePeriod,
            updater: OrdersPageUpdater(),
            bodyBuilder: (context, orders) => OrdersPage(microOrders: orders),
          ),

效果很好

为什么?我应该改变什么来运行我的第一个版本?

【问题讨论】:

    标签: flutter dart generics types


    【解决方案1】:

    下一行有问题:

     @override
      _ScreenWithUpdaterState createState() => _ScreenWithUpdaterState();
    }
    

    然后我将这一行改为

     @override
      _ScreenWithUpdaterState createState() => _ScreenWithUpdaterState<DataType>();
    }
    

    现在一切正常!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 2011-05-25
      相关资源
      最近更新 更多