问题描述
我实现了 TinderSwapCard
小部件,它在初始化期间需要固定数量的卡片(totalNum,例如 =5)。现在我想加载更多卡片,如果卡片的初始数量已经被刷过(例如从初始设置刷过 5 张卡片 -> 再加载 2 张生成的卡片)。应该与 ListView
类似,它可以使用 ScrollController
动态扩展显示的列表。
我尝试使用在 CardController
小部件中实现的 TinderSwapCard
来实现这一点,但这仅适用于触发器事件。
因此,我使用 CardController
扩展了 ChangeNotifier
,但未正确触发侦听器(请参阅下面的代码)。
class _SwipingPageState extends State<SwipingPage> {
final MainController _mainController = MainController.to;
final RxDouble swipeEdge = 50.0.obs;
int iterationCounter = 0; //0 = Standard Set; 1 = 1. Iteration...
int currentCardindex = 0;
CardController _cardController = new CardController();
bool isPerformingRequest = false;
@override
void initState() {
super.initState();
_cardController.addListener(() { //never triggered
if (currentCardindex == 3) { //_mainController.volunteeringOffers.length && iterationCounter == 0) {
print("listener called");
_getMoreData();
}
});
}
@override
void dispose() {
_cardController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Stack(
children: [
Scaffold(
body: Center(
child: Container(
alignment: Alignment.center,padding: const EdgeInsets.symmetric(horizontal: 24,vertical: 16),child: RichText(...
),),TinderSwapCard(
orientation: AmassOrientation.TOP,totalNum: _mainController.volunteeringOffers.length,stackNum: 4,maxWidth: Get.width,maxHeight: Get.height,minWidth: Get.width * 0.9,minHeight: Get.height * 0.9,cardBuilder: (context,index) => _mainController.volunteeringOfferCards[index],cardController: _cardController,swipeEdge: 6.9,swipeCompleteCallback: (CardSwipeOrientation orientation,int index) {
...
currentCardindex++;
},],);
}
_getMoreData() async {
if (!isPerformingRequest) {
setState(() => isPerformingRequest = true);
if (iterationCounter != maximumIterations) {
List<VolunteeringOffer> newEntries = await dataRequest();
setState(() {
_mainController.addCardsWithVolunteeringOffersDynamically(newEntries);
// SwipeCardWidgets are added to volunteeringOfferCards
isPerformingRequest = false;
iterationCounter++;
});
}
}
Future<List<VolunteeringOffer>> dataRequest() async {
return Future.delayed(Duration(seconds: 1),() {
return [
VolunteeringOffer(...),VolunteeringOffer(...)
];
});
}
}
我想知道在这个 Swiping 小部件中动态加载卡片是否可行,如果是,怎么做?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)