如何解决Flutter:如何通过 GetxController 控制 PageView?
主题:PageView 和 GetX
我无法从 PageView widget
模块分离 HomeView
上的控件。我有一个 GlobalController
及其各自的 GlobalBinding
,它们在打开 HomeView
时被实例化。我想将 setPage(int page)
方法带到最终使 HomeView 的 GlobalController
更改页面的 PageView
中。我不知道如何让 PageController
从 PageView
到 GlobalController
以使其工作。我应该如何进行?
解决方法
像这样的东西? 我在入职时使用综合浏览量
class Onboard{
final headTitle;
final secondarytitle;
final discription;
final pngimage;
Onboardslist(this.headTitle,this.secondarytitle,this.discription,this.pngimage);
}
然后用于控制器
class OnboardController extends GetxController{
var selectedPagexNumber = 0.obs;
bool get isLastPage => selectedPagexNumber.value == onBoardPages.length -1;
var pageControll = PageController();
forwardAct()
{
if(isLastPage) Get.offNamedUntil(signin,(route)=> false);
else pageControll.nextPage(duration: 300.milliseconds,curve: Curves.ease);
}
List<Onboardslist> onBoardPages =
[
Onboardslist("title","short description","long description",imageString),Onboardslist("title",imageString)
];
}
然后对于我所做的视图就是这样
class Onboarding extends StatelessWidget {
final yourController= OnboardController();
@override
Widget build(BuildContext context) {
SizeXGet().init(context);
return Scaffold(
backgroundColor: decent_white,appBar: AppBarCustom(
title: 'Skip',button: ()=>Get.offNamedUntil(signin,(route)=>false),),body: WillPopScope(
onWillPop: () async => false,child: SafeArea(
child: Stack(
children: [
PageView.builder(
controller: yourController.pageControll,onPageChanged: yourController.selectedPagexNumber,itemCount: yourController.onBoardPages.length,itemBuilder: (context,index)
=>Padding(
padding: const EdgeInsets.only(left: 10,right: 10),child: Container(
child: SingleChildScrollView(
physics: BouncingScrollPhysics(),child: Column(
crossAxisAlignment: CrossAxisAlignment.center,mainAxisAlignment: MainAxisAlignment.center,children: [
Container(
height: getHeight(150),child: Column(
crossAxisAlignment: CrossAxisAlignment.center,children: [
Padding(
padding: const EdgeInsets.only(left: 20,right: 20),child: Text(yourController.onBoardPages[index].headTitle,style: TextStyle(
color: darkish_color,fontSize: getHeight(20),fontFamily: 'Metropolis-SemiBold',fontWeight: FontWeight.bold
),SizedBox(height: 15,Padding(
padding: const EdgeInsets.only(left: 50,right: 50),child: Text(yourController.onBoardPages[index].secondarytitle,style: TextStyle(
color: not_sopure_black,fontSize: getHeight(26),fontFamily: 'Metropolis-Bold',fontWeight: FontWeight.bold
),Padding(
padding: const EdgeInsets.only(left: 40,right: 40),child: Text(yourController.onBoardPages[index].discription,fontSize: getHeight(15),fontFamily: 'Metropolis-Regular',],Image.asset(yourController.onBoardPages[index].pngimage),bottomNavigationBar: BottomAppBar(
color: Colors.transparent,elevation: 0,child: Container(
height: 75,width: MediaQuery.of(context).size.width,child: Padding(
padding: const EdgeInsets.only(left: 25,right:25,child: Container(
width: MediaQuery.of(context).size.width,child: Stack(
children: [
Align(
alignment: Alignment.centerLeft,child: Container(
child: Row(
children: List.generate(yourController.onBoardPages.length,(index)=>Obx(()=>
AnimatedContainer(
duration: Duration(milliseconds: 200),margin: EdgeInsets.only(right: 5),height: 10,width: yourController.selectedPagexNumber.value == index ? 20 : 10,decoration: BoxDecoration(
borderRadius: BorderRadius.circular(60),color: yourController.selectedPagexNumber.value == index
? darkish_color
: not_sopure_black,)),Align(
alignment: Alignment.centerRight,child: Container(
width: 130,height: 52,child: RaisedButton(
elevation: 0,onPressed: yourController.forwardAct,splashColor: not_sopure_black,color: darkish_color,shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(100)
),child: Obx(() =>
Row(
mainAxisAlignment: MainAxisAlignment.center,children: [
Text(yourController.isLastPage ? 'Next' : 'Next',style: TextStyle(
color: Colors.white,fontFamily: 'Metropolis-Semibold',fontSize: 16,)
],);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。