【发布时间】: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