Flutter 如何获取页面视图中的页数,以便在Flatter中的行指示器中使用?

Flutter 如何获取页面视图中的页数,以便在Flatter中的行指示器中使用?,flutter,Flutter,请允许我就如何获取页面视图中的页数寻求帮助, 与listview类似,您可以通过listview.length获取列表的数量,但对于pageview,没有我可以使用的pageview.length属性 我尝试使用pageview.builder,但无法将数据作为列表启动,显示需要作为初始值设定项启动的问题 请帮我弄清楚 我需要页面视图中的数据用于_lineprogressindicator中,以显示内部有多少个问题列表用于制作指标 这是我的密码 import 'dart:async';

请允许我就如何获取页面视图中的页数寻求帮助, 与listview类似,您可以通过listview.length获取列表的数量,但对于pageview,没有我可以使用的pageview.length属性

我尝试使用pageview.builder,但无法将数据作为列表启动,显示需要作为初始值设定项启动的问题

请帮我弄清楚 我需要页面视图中的数据用于_lineprogressindicator中,以显示内部有多少个问题列表用于制作指标

这是我的密码

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;
  }
}