Flutter 如何获取页面视图中的页数,以便在Flatter中的行指示器中使用?
请允许我就如何获取页面视图中的页数寻求帮助, 与listview类似,您可以通过listview.length获取列表的数量,但对于pageview,没有我可以使用的pageview.length属性 我尝试使用pageview.builder,但无法将数据作为列表启动,显示需要作为初始值设定项启动的问题 请帮我弄清楚 我需要页面视图中的数据用于_lineprogressindicator中,以显示内部有多少个问题列表用于制作指标 这是我的密码Flutter 如何获取页面视图中的页数,以便在Flatter中的行指示器中使用?,flutter,Flutter,请允许我就如何获取页面视图中的页数寻求帮助, 与listview类似,您可以通过listview.length获取列表的数量,但对于pageview,没有我可以使用的pageview.length属性 我尝试使用pageview.builder,但无法将数据作为列表启动,显示需要作为初始值设定项启动的问题 请帮我弄清楚 我需要页面视图中的数据用于_lineprogressindicator中,以显示内部有多少个问题列表用于制作指标 这是我的密码 import 'dart:async';
import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:survey/content/thankyou.dart';
import 'package:survey/widgets/animations.dart';
import 'package:survey/widgets/buttonstyle.dart';
import 'package:survey/widgets/widgetlist.dart';
class questionaires extends StatefulWidget {
@override
_questionairesState createState() => _questionairesState();
}
class _questionairesState extends State<questionaires> {
TextStyle conqueststyle = TextStyle(
fontSize: 15, fontWeight: FontWeight.bold, color: Colors.indigo);
TextStyle questionstyle = TextStyle(
fontSize: 17,
fontWeight: FontWeight.bold,
);
String titletop = 'Post Visit Patient Satisfaction';
String q1 = "Sample Question HERE";
String q2 = "Sample Question HERE";
String q3 = "Sample Question HERE";
String q4 = "Sample Question HERE";
int percentagenum = 0;
int _currValue = 1;
bool _loading;
double _progress;
final _texteditingcontroller = TextEditingController();
final _pageController = PageController(initialPage: 0, keepPage: true);
var _currentpage = 0;
List answernumbers = ["5", "4", "3", "2", "1"];
List currentselectedvalue = [];
List usingCollection1 = [
"Excellent",
"Very Good",
"Good",
"Fair",
"Poor",
];
@override
void dispose() {
super.dispose();
_texteditingcontroller.dispose();
_loading = false;
_progress = 0.0;
percentagenum = 0;
_currValue = 0;
usingTimes1 = '';
usingTimes = '';
usingTimes2 = '';
}
void initState() {
super.initState();
usingTimes1 = '';
usingTimes = '';
usingTimes2 = '';
_loading = false;
_progress = 0.0;
percentagenum = 0;
_texteditingcontroller.clear();
_currValue = 0;
}
void pageChanged(int index) {
setState(() {
_currentpage = index;
});
}
void _selectedanswers(data1, data2) {
if (_progress.toStringAsFixed(1) == '1.0') {
print(data1);
print(data2);
_texteditingcontroller.text;
}
}
void _updateProgress() {
setState(() {
_progress += 0.25;
percentagenum += 25;
if (_progress.toStringAsFixed(1) == '1.0') {
_loading = false;
_progress = 0;
percentagenum = 0;
Navigator.push(context, FadeRoute(page: thankyou()));
return;
}
});
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
backgroundColor: Colors.white,
resizeToAvoidBottomPadding: false,
body: Padding(
padding: EdgeInsets.all(20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
width: 100,
height: 60,
child: Image.asset(imgtit),
),
Stack(
children: <Widget>[
Container(
child: Text(
titletop,
style: conqueststyle,
maxLines: 1,
),
),
_buildPageView(),
_lineprogressindicator()
],
)
],
),
),
),
);
}
_buildPageView() {
return Container(
height: MediaQuery.of(context).size.height / 1.25,
child: PageView(
controller: _pageController,
onPageChanged: (index) {
pageChanged(index);
},
children: <Widget>[
_emojiquestions(q1),
_selectedutton(q2),
_numberrating(q3),
_textboxquestion(q4),
],
));
}
_lineprogressindicator() {
return Positioned(
left: 0.0,
right: 0.0,
bottom: 0.0,
child: Column(
children: <Widget>[
RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(50.0),
),
color: Colors.indigo,
onPressed: () {
_pageController.nextPage(
duration: kTabScrollDuration, curve: Curves.ease);
_loading = !_loading;
_updateProgress();
},
child: Icon(
Icons.check,
color: Colors.white,
size: 50,
),
),
SizedBox(
height: 10,
),
Text('%$percentagenum'),
LinearProgressIndicator(
value: _progress,
),
],
),
);
}
_emojiquestions(String quest1) {
final using = usingCollection1[index];
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text(
'Question 1',
style: conqueststyle,
textAlign: TextAlign.right,
),
SizedBox(
height: 20,
),
TextField(
decoration: InputDecoration.collapsed(hintText: quest1),
maxLines: 5,
style: conqueststyle,
),
Expanded(
child: Center(
child: Container(
height: 300,
child: ListView.separated(
separatorBuilder: (context, index) => SizedBox(height: 10),
itemCount: usingCollection1.length,
itemBuilder: (context, index) => GestureDetector(
onTapUp: (index) {
_selectedanswers(index, null);
},
child: Card(
color: usingTimes == usingCollection1[index]
? Colors.blue.withAlpha(100)
: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15.0),
),
child: Column(
children: <Widget>[
Row(
children: <Widget>[
SizedBox(
height: 50,
width: 70,
child: Image.asset(emojiimage[index]),
),
Text(usingCollection1[index])
],
),
Divider(
height: index < usingCollection1.length ? 1.0 : 0.0,
),
],
),
),
),
)),
),
)
],
);
}
_selectedutton(String quest1) {
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text(
'Question 1',
style: conqueststyle,
textAlign: TextAlign.right,
),
SizedBox(
height: 20,
),
TextField(
decoration: InputDecoration.collapsed(hintText: quest1),
maxLines: 5,
style: conqueststyle,
),
Expanded(
child: Center(
child: Container(
height: 300,
child: Column(
children: List.generate(usingCollection1.length, (int index) {
final using = usingCollection1[index];
return GestureDetector(
onTap: () {
setState(() {
_currValue = index;
_selectedanswers(index, null);
usingTimes = using.identifier;
});
},
child: Card(
color: usingTimes == using.identifier
? Colors.blue.withAlpha(100)
: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15.0),
),
child: Column(
children: <Widget>[
Row(
children: <Widget>[
Radio(
value: index,
groupValue: _currValue,
onChanged: (val) =>
setState(() => _currValue = val),
),
Text(using.displayContent)
],
),
Divider(
height:
index < usingCollection1.length ? 1.0 : 0.0,
),
],
),
));
}),
),
),
),
)
],
);
}
_numberrating(quest) {
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text(
'Question 2',
style: conqueststyle,
textAlign: TextAlign.right,
),
SizedBox(
height: 20,
),
TextField(
decoration: InputDecoration.collapsed(hintText: quest),
maxLines: 5,
style: conqueststyle,
),
Text("**5 is the highest"),
Container(
height: MediaQuery.of(context).size.height / 12.0,
width: MediaQuery.of(context).size.width,
child: ListView.builder(
physics: NeverScrollableScrollPhysics(),
scrollDirection: Axis.horizontal,
itemCount: usingCollection1.length,
itemBuilder: (context, index) {
final using = usingCollection1[index];
return GestureDetector(
onTapUp: (index) {
setState(() {
_selectedanswers(null, index);
usingTimes = using.identifier;
});
},
child: Card(
color: usingTimes == using.identifier
? Colors.blue.withAlpha(100)
: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15.0),
side: BorderSide(color: Colors.indigoAccent)),
child: Column(
children: <Widget>[
SizedBox(
height: 50,
width: 50,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
answernumbers[index],
textAlign: TextAlign.center,
style: conqueststyle,
),
],
)),
),
],
),
),
);
},
),
)
],
);
}
_textboxquestion(quest) {
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text(
'Question 2',
style: conqueststyle,
textAlign: TextAlign.right,
),
SizedBox(
height: 20,
),
TextField(
decoration: InputDecoration.collapsed(hintText: quest),
maxLines: 5,
style: conqueststyle,
),
TextFormField(
decoration: InputDecoration(
hintText: "Your FeedBack Here",
border: OutlineInputBorder(),
),
controller: _texteditingcontroller,
maxLines: 7,
style: conqueststyle,
)
],
);
}
}
导入'dart:async';
进口“包装:颤振/cupertino.dart”;
进口“包装:颤振/材料.省道”;
导入“package:survey/content/thankyou.dart”;
导入“package:survey/widgets/animations.dart”;
导入“package:survey/widgets/buttonstyle.dart”;
导入“package:survey/widgets/widgetlist.dart”;
类问询扩展StatefulWidget{
@凌驾
_questionairesState createState()=>\u questionairesState();
}
类_questionairesState扩展状态{
TextStyle conqueststyle=TextStyle(
fontSize:15,fontWeight:fontWeight.bold,颜色:Colors.indigo);
TextStyle questionstyle=TextStyle(
尺寸:17,
fontWeight:fontWeight.bold,
);
字符串titletop=‘就诊后患者满意度’;
String q1=“此处的示例问题”;
String q2=“此处的示例问题”;
String q3=“此处的示例问题”;
字符串q4=“此处的示例问题”;
int percentagenum=0;
int _currValue=1;
bool_加载;
双倍进步;
最终_texteditingcontroller=texteditingcontroller();
final _pageController=pageController(initialPage:0,keepPage:true);
var _currentpage=0;
列出答案编号=[“5”、“4”、“3”、“2”、“1”];
列表currentselectedvalue=[];
使用Collection1的列表=[
“好极了”,
“非常好”,
“好”,
“公平”,
“穷人”,
];
@凌驾
无效处置(){
super.dispose();
_texteditingcontroller.dispose();
_加载=假;
_进度=0.0;
百分比=0;
_currValue=0;
使用times1='';
使用时间=“”;
使用times2='';
}
void initState(){
super.initState();
使用times1='';
使用时间=“”;
使用times2='';
_加载=假;
_进度=0.0;
百分比=0;
_texteditingcontroller.clear();
_currValue=0;
}
无效页面已更改(整型索引){
设置状态(){
_currentpage=索引;
});
}
无效(数据1,数据2){
如果(_progress.toStringAsFixed(1)='1.0'){
打印(数据1);
打印(数据2);
_texteditingcontroller.text;
}
}
void _updateProgress(){
设置状态(){
_进度+=0.25;
百分位数+=25;
如果(_progress.toStringAsFixed(1)='1.0'){
_加载=假;
_进度=0;
百分比=0;
push(上下文,FadeRoute(page:thankyou());
返回;
}
});
}
@凌驾
小部件构建(构建上下文){
返回安全区(
孩子:脚手架(
背景颜色:Colors.white,
resizeToAvoidBottomPadding:false,
主体:填充物(
填充:边缘设置。全部(20),
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
容器(
宽度:100,
身高:60,
子项:Image.asset(imgtit),
),
堆叠(
儿童:[
容器(
子:文本(
titletop,
风格:征服风格,
maxLines:1,
),
),
_buildPageView(),
_lineprogressindicator()
],
)
],
),
),
),
);
}
_buildPageView(){
返回容器(
高度:MediaQuery.of(context).size.height/1.25,
子:页面视图(
控制器:_pageController,
onPageChanged:(索引){
页面更改(索引);
},
儿童:[
_表情问题(q1),
_已选择Edutton(q2),
_编号(q3),
_文本框问题(第四季度),
],
));
}
_lineprogressindicator(){
返回定位(
左:0.0,
右:0.0,
底部:0.0,
子:列(
儿童:[
升起的按钮(
形状:圆形矩形边框(
边界半径:新边界半径。圆形(50.0),
),
颜色:颜色,靛蓝,
已按下:(){
_pageController.nextPage(
持续时间:kTabScrollDuration,曲线:Curves.ease);
_加载=!\u加载;
_updateProgress();
},
子:图标(
图标。检查,
颜色:颜色,白色,
尺码:50,
),
),
大小盒子(
身高:10,
),
文本(“%$percentagenum”),
线性预测指示器(
值:_进度,
),
],
),
);
}
_表情问题(字符串问题1){
class MyState extends State<MyWidget> {
List<Widget> _pages = [
Container(color: Colors.blue,),
Container(color: Colors.amber,),
];
@override
Widget build(BuildContext context) {
return MyComplexWidgetTree(
child: PageView(
controller: PageController(),
children: _pages,
),
);
}
void _myMethodThatRequiresNumberOfPages() {
int numberOfPages = pages.length;
}
}