Scroll 如何在颤振中滚动或跳转到PageView.builder或PageController的位置?
问题:使用PageController加载页面视图后无法滚动到位置* 像ViewPager一样,在Android中滚动到特定页面Scroll 如何在颤振中滚动或跳转到PageView.builder或PageController的位置?,scroll,flutter,position,flutter-layout,pageviews,Scroll,Flutter,Position,Flutter Layout,Pageviews,问题:使用PageController加载页面视图后无法滚动到位置* 像ViewPager一样,在Android中滚动到特定页面 Widget\u buildCarousel(BuildContext上下文,int-selectedIndex){ PageController=PageController(viewportFraction:1,keepPage:true); 返回列( mainAxisSize:mainAxisSize.min, 儿童:[ 大小盒子( //您可能希望在此处使用纵横
Widget\u buildCarousel(BuildContext上下文,int-selectedIndex){
PageController=PageController(viewportFraction:1,keepPage:true);
返回列(
mainAxisSize:mainAxisSize.min,
儿童:[
大小盒子(
//您可能希望在此处使用纵横比来支持平板电脑
高度:400.0,
宽度:240,
子项:PageView.builder(
itemCount:assetImageList.length,
控制器:控制器,
itemBuilder:(BuildContext上下文,int itemIndex){
返回_buildCarouselItem(上下文、selectedIndex、itemIndex);
},
),
)
],
);
}
您可以使用jumpTo()方法滚动页面视图的位置。
我在下面的示例中创建了一个changepageviewposition()方法:
import 'package:flutter/material.dart';
class MyPageView extends StatefulWidget {
createState() {
return StateKeeper();
}
}
class StateKeeper extends State<MyPageView> {
PageController controller = PageController(viewportFraction: 1, keepPage: true);
var currentPageValue = 0.0;
var mItemCount = 10;
@override
void initState() {
// TODO: implement initState
super.initState();
controller.addListener(() {
setState(() {
currentPageValue = controller.page;
});
});
}
void changePageViewPostion(int whichPage) {
if(controller != null){
whichPage = whichPage + 1; // because position will start from 0
double jumpPosition = MediaQuery.of(context).size.width / 2;
double orgPosition = MediaQuery.of(context).size.width / 2;
for(int i=0; i<mItemCount; i++){
controller.jumpTo(jumpPosition);
if(i==whichPage){
break;
}
jumpPosition = jumpPosition + orgPosition;
}
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('PageView position change'),
),
body: PageView.builder(
controller: controller,
itemBuilder: (context, position) {
return Container(
color: position % 2 == 0 ? Colors.blue : Colors.pink,
child: Column(
children: <Widget>[
Center(
child: Text(
"Page " + (position + 1).toString(),
style: TextStyle(color: Colors.white, fontSize: 22.0),
),
),
Align(
alignment: FractionalOffset.bottomCenter,
child: Padding(padding: EdgeInsets.only(bottom: 20),
child: FloatingActionButton(
elevation: 0.0,
child: new Icon(Icons.check),
backgroundColor: new Color(0xFFE57373),
onPressed: (){
changePageViewPostion(5);
}
),),
),
],
),
);
},
itemCount: mItemCount,
)
);
}
}
希望有帮助:)终于找到了答案。只需将初始页面:mSelectedPosition属性设置为:
child: PageView.builder(
itemCount: mTemplateModelList.length,
controller: PageController(initialPage: mSelectedPosition, keepPage: true, viewportFraction: 1),
itemBuilder: (BuildContext context, int itemIndex) {
return _buildCarouselItem(context, selectedIndex, itemIndex);
},
),
或者,如果您想在单击按钮后滚动页面,您可以使用另一个用户在下面清楚地提到的PageController使用jumpTo()方法:@android。目前有两个选项来处理您的请求:
PageView.builder(
controller: _pageController,
itemCount: _list.length,
itemBuilder: (context, index) {
return GestureDetector(
onTap: () {
_pageController.jumpToPage(index); // for regular jump
_pageController.animateToPage(_position, curve: Curves.decelerate, duration: Duration(milliseconds: 300)); // for animated jump. Requires a curve and a duration
},
child: Container();
);
}
),
我需要这个尽快的用户查看该页面。当用户点击按钮时,则不会。所以你能帮我吗?意思是当用户查看那个页面或滚动那个页面时,你需要像第一页或第二页一样的滚动位置。对吧?你说的没错。如果我们能听到页面的变化,我们就能做到这一点。那么,有PageChangeListener吗?当然有。非常感谢。我刚刚找到并发布了上面的答案。谢谢你的帮助_定位我们如何获得该值??这将是您希望从一个索引移动到另一个索引的变量
child: PageView.builder(
itemCount: mTemplateModelList.length,
controller: PageController(initialPage: mSelectedPosition, keepPage: true, viewportFraction: 1),
itemBuilder: (BuildContext context, int itemIndex) {
return _buildCarouselItem(context, selectedIndex, itemIndex);
},
),
PageView.builder(
controller: _pageController,
itemCount: _list.length,
itemBuilder: (context, index) {
return GestureDetector(
onTap: () {
_pageController.jumpToPage(index); // for regular jump
_pageController.animateToPage(_position, curve: Curves.decelerate, duration: Duration(milliseconds: 300)); // for animated jump. Requires a curve and a duration
},
child: Container();
);
}
),