我遵循了本教程,该教程探讨了如何为电影应用创建用户界面
https://www.youtube.com/watch?v=OgSLd2lH1FM&feature=youtu.be
虽然我大部分设计都可以重新创建并添加自己的设置,但在本教程的海报显示侧,我主要是在构建器中遇到了问题,它指定了左右页面焦点之一倾斜15度: The poster view should look like this
transform.rotate部分有效,但仅在用户开始在海报列表中水平滚动之后。 在滚动之前,它看起来像这样: What the carousel looks like before scrolling
这在模拟器和真实设备中均会发生。我也尝试过使用transform.translate来查看是否存在相同的问题,但事实并非如此。
下面是“动画”构建器的代码段。
Widget build(BuildContext context) {
return Container(
width: MediaQuery.of(context).size.width,
padding: const EdgeInsets.symmetric(
vertical: kDefaultPadding / 2, horizontal: 0),
child: AspectRatio(
aspectRatio: 0.85,
child: PageView.builder(
itemCount: movies.length,
controller: _pageController // declared PageController type in class//,
onPageChanged: (value) {
setState(() {
// initialPage was initialised with value 1
initialPage = value;
});
},
itemBuilder: (context, index) => buildMovieCard(index),
),
),
);
}
AnimatedBuilder调用函数在下面。
Widget buildMovieCard(int index) => AnimatedBuilder(
animation: _pageController,
builder: (context, child) {
double value = 0;
if (_pageController.position.haveDimensions) {
value = index - _pageController.page;
//0.038 since it time pi gives 7 so 7 rotaitons
value = (value * 0.038).clamp(-1, 1);
}
return Transform.rotate(
child: MovieCard(movie: movies[index]),
angle: math.pi * value,
);
});
(很抱歉,如果上面的信息不完整,则为..) 告诉我,我对这个问题的看法是否有误
编辑:我尝试进行更多搜索,发现了一个类似的问题。 直到动画为动画生成器播放后,动画才会执行。 我在动画制作器方面没有太多经验,因此,如果我发现有问题,请添加它 Here is the link to the question
我尝试使用SingleTickerProvider和带有.repeat()的动画控制器来连续运行animationBuilder。轮播现在确实会自动出现,但是需要一些时间。
答案 0 :(得分:0)
您的_pageController.page
开始时设置正确吗?
如果在if中打印value
会怎样:
if (_pageController.position.haveDimensions) {
...
print(value);
}
(对不起,我没有信誉直接对此帐户的问题发表评论)
答案 1 :(得分:0)
我不太了解代码,但是根据描述,您可能会尝试模拟滚动或查看滚动到底会影响什么,然后尝试实现它。 希望我能帮上忙。