작성
·
202
0
안녕하세요. 해당 강의에 질문이 있어서 글을 남깁니다.
강의에 소개된대로 itemBuilder에 RestaurantModel 제너릭을 제공해준 경우
return PaginationListView(
provider: restaurantProvider,
itemBuilder: <RestaurantModel>(context, index, model) {
return GestureDetector(
onTap: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => RestaurantDetailScreen(
id: model.id,
),
));
},
child: RestaurantCard.fromModel(model: model),
);
},
);
PaginationListView에 제너릭을 제공한 경우
return PaginationListView<RestaurantModel>(
provider: restaurantProvider,
itemBuilder: (context, index, model) {
return GestureDetector(
onTap: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => RestaurantDetailScreen(
id: model.id,
),
));
},
child: RestaurantCard.fromModel(model: model),
);
},
);
위 두가지 경우 중에 PaginationListView 소스를 확인하면 2번 항목이 맞는거 같은데 작동은 1번에서만 가능합니다.
typedef PaginaitonWidgetBuilder<T extends IModelWithId> = Widget Function(
BuildContext context,
int index,
T model,
);
class PaginationListView<T extends IModelWithId>
extends ConsumerStatefulWidget {
final StateNotifierProvider<PaginationProvider, CursorPaginationBase>
provider;
final PaginaitonWidgetBuilder<T> itemBuilder;
const PaginationListView({
super.key,
required this.provider,
required this.itemBuilder,
});
@override
ConsumerState<PaginationListView> createState() =>
_PaginationListViewState<T>();
}
제가 생각한 해석방식은 이렇습니다.
PaginationListView 생성 시 ImodelWithId를 extend 한T 타입을 제너릭으로 받습니다.
따라서 itemBuilder가 아닌 PaginationListView<RestaurantModel>과 같이 제너릭을 제공한 경우, 해당 타입을 PaginationWidgetBuilder에 매핑 됩니다.
위 해석방식에서 제가 틀리게 생각한게 있나요?
에러메시지는 아래와 같습니다.
The following _TypeError was thrown building:
type '(BuildContext, int, RestaurantModel) => GestureDetector' is not a subtype of type
'(BuildContext, int, IModelWithId) => Widget'
State 클래스가 어떤건가요?