簡體   English   中英

Dart 泛型類型作為類成員函數的類型

[英]Dart generic type as class-member function's type

我有一個 class 與 generics 一起工作:Screen bloc

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),
          ),

它工作正常

為什么? 我應該改變什么來運行我的第一個版本?

下一行有一個問題:

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

然后我把這條線改成

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

現在一切正常!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM