[英]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.