PageView 在 animateToPage 进行时重建
PageView rebuilding while animateToPage is in progress
我正在创建一个社交媒体供稿,其中每个 post 都是不同尺寸的图像。用户可以向右滑动表示喜欢,向左滑动表示不喜欢,向上滑动可以跳到下一个 post,向下滑动可以返回。为此,我在 PageView 中使用了一个 Dismissible 小部件,其中每个页面都包含一个 post/image。我在 Dismissible 中使用了“animateToPage”,以便在用户向右或向左滑动时自动动画到下一页。
问题是,当 PageView 动画到下一页时,在动画发生时被关闭的图像突然重新出现在上一页上。 我希望它重新出现仅当用户向下滑动返回上一个时 post,而不是在 PageView 动画时。
Here's a video showing what is going wrong
And here's an animation showing what I need
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> with TickerProviderStateMixin{
int pageIndex = 0;
PageController _pageController = PageController(
initialPage: 0,
);
@override
Widget build(BuildContext context) {
List images = [
'assets/1.jpg', 'assets/2.jpg', 'assets/3.jpg', 'assets/4.jpg', 'assets/5.jpg',
];
return MaterialApp(
home: Scaffold(
backgroundColor: Color.fromRGBO(250, 250, 250, 1),
body: LayoutBuilder(
builder: (context, constraints) => PageView.builder(
controller: _pageController,
itemCount: 5,
scrollDirection: Axis.vertical,
itemBuilder: (context, index) {
return images.map((image) => Dismissible(
onResize: () {
setState(() {
_pageController.animateToPage(index+1, duration: Duration(milliseconds: 300), curve: Curves.ease);
});
},
onDismissed: (direction) {},
key: UniqueKey(),
child: Container(
padding: const EdgeInsets.all(20.0),
child: Center(
child: Padding(
padding: EdgeInsets.symmetric(vertical: 100),
child: Container(
alignment: Alignment.center,
child: Image(
image: AssetImage(image)
),
),
),
),
),
))
.toList()[index];
}
),
),
),
);
}
}
我认为发生这种情况是因为 PageView 正在重建其他页面,而动画正在进行中。我仍然是 Flutter 的初学者,无法找到解决方案。关于如何解决此问题的任何想法?
每次调用 setState
时,都会重新绘制小部件。尝试将动画代码放在 setState
方法之外。
我正在创建一个社交媒体供稿,其中每个 post 都是不同尺寸的图像。用户可以向右滑动表示喜欢,向左滑动表示不喜欢,向上滑动可以跳到下一个 post,向下滑动可以返回。为此,我在 PageView 中使用了一个 Dismissible 小部件,其中每个页面都包含一个 post/image。我在 Dismissible 中使用了“animateToPage”,以便在用户向右或向左滑动时自动动画到下一页。
问题是,当 PageView 动画到下一页时,在动画发生时被关闭的图像突然重新出现在上一页上。 我希望它重新出现仅当用户向下滑动返回上一个时 post,而不是在 PageView 动画时。
Here's a video showing what is going wrong
And here's an animation showing what I need
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> with TickerProviderStateMixin{
int pageIndex = 0;
PageController _pageController = PageController(
initialPage: 0,
);
@override
Widget build(BuildContext context) {
List images = [
'assets/1.jpg', 'assets/2.jpg', 'assets/3.jpg', 'assets/4.jpg', 'assets/5.jpg',
];
return MaterialApp(
home: Scaffold(
backgroundColor: Color.fromRGBO(250, 250, 250, 1),
body: LayoutBuilder(
builder: (context, constraints) => PageView.builder(
controller: _pageController,
itemCount: 5,
scrollDirection: Axis.vertical,
itemBuilder: (context, index) {
return images.map((image) => Dismissible(
onResize: () {
setState(() {
_pageController.animateToPage(index+1, duration: Duration(milliseconds: 300), curve: Curves.ease);
});
},
onDismissed: (direction) {},
key: UniqueKey(),
child: Container(
padding: const EdgeInsets.all(20.0),
child: Center(
child: Padding(
padding: EdgeInsets.symmetric(vertical: 100),
child: Container(
alignment: Alignment.center,
child: Image(
image: AssetImage(image)
),
),
),
),
),
))
.toList()[index];
}
),
),
),
);
}
}
我认为发生这种情况是因为 PageView 正在重建其他页面,而动画正在进行中。我仍然是 Flutter 的初学者,无法找到解决方案。关于如何解决此问题的任何想法?
每次调用 setState
时,都会重新绘制小部件。尝试将动画代码放在 setState
方法之外。