SliverList 和 Getx StateMixin 支持
Posted
技术标签:
【中文标题】SliverList 和 Getx StateMixin 支持【英文标题】:SliverList and Getx StateMixin support 【发布时间】:2021-04-07 09:12:40 【问题描述】:我正在努力使GetxController
与SliverList
一起工作。特别是,我的控制器从Getx library 返回带有StateMixin
的视图状态。
class ItinerariesByCreatorPageController extends GetxController
with StateMixin<Pair<Creator, List<Itinerary>>>
ItinerariesByCreatorPageController(this._interactor);
final ItinerariesInteractor _interactor;
void getCreatorPage(String creatorSlug, String language)
_interactor
.getItinerariesByCreatorSlug(creatorSlug, language)
.then((value) => change(value, status: RxStatus.success()))
.onError<String>((error, stackTrace) =>
change(null, status: RxStatus.error(error.toString())));
在视图方面,我使用obx
扩展来观察控制器状态并使用SliverList
来显示数据。不幸的是,SliverList
委托 SliverChildBuilderDelegate
需要在其构造函数中提供列表 childCount
,但子计数来自控制器异步,我无法在 Getx 文档中找到以反应方式返回子计数的方法.有没有办法让SliverList
和Getx
一起工作?
Widget _getItinerariesList()
return SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) => _controller.obx((data)
if (index == 0)
return CreatorInfoWidget(
creator: data.first,
imageWidget: CreatorImageWidget(
imageUrl: data.first.avatars.first,
),
);
else if (index == 1)
return MainItineraryWidget(
creator: data.first, itinerary: data.second[index - 1]);
else
return SecondaryItineraryWidget(
creator: data.first, itinerary: data.second[index - 1]);
),
childCount: 5 // use a dynamic child count here, coming from the controller));
【问题讨论】:
【参考方案1】:你可以在SliverList
上方移动controller.obx
Widget _getItinerariesList()
return _controller.obx((data)
return SliverList(
delegate: SliverChildBuilderDelegate(
(context, index)
if (index == 0)
return CreatorInfoWidget(
creator: data.first,
imageWidget: CreatorImageWidget(
imageUrl: data.first.avatars.first,
),
);
else if (index == 1)
return MainItineraryWidget(
creator: data.first, itinerary: data.second[index - 1]);
else
return SecondaryItineraryWidget(
creator: data.first, itinerary: data.second[index - 1]);
),
childCount: data.yourCountVariable // use a dynamic child count here, coming from the controller));
【讨论】:
以上是关于SliverList 和 Getx StateMixin 支持的主要内容,如果未能解决你的问题,请参考以下文章
flutter系列之:使用SliverList和SliverGird
Flutter如何滚动到SliverList中的特定项目位置?
Flutter SliverAppBar 和 SliverList 有不同的滚动条
颤振 - SliverList / SliverChildBuilderDelegate 提供初始索引或允许负索引