首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获得页面视图中的页数,以便在颤振中的行指示器中使用?

如何获得页面视图中的页数,以便在颤振中的行指示器中使用?
EN

Stack Overflow用户
提问于 2020-03-07 23:35:57
回答 1查看 4.2K关注 0票数 3

我可以请求关于如何获取页面视图中的页面数的帮助吗?类似于listview,您可以通过listview.length获得列表的数量,但是对于页面查看,没有pageview.length属性可以使用,

我试过使用pageview.builder,但无法将数据作为列表启动,这表明了我需要将其作为初始化器启动的问题吗?

请帮我弄清楚,我需要在_lineprogressindicator中使用页面视图中的数据,来显示里面有多少人来做一个指示。

这是我的密码

代码语言:javascript
运行
复制
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,
            )
          ],
        );
      }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-15 16:14:06

对于您的情况,如果事先知道元素的数量,我建议您将页面存储在局部变量中,然后调用它上的length。一个小片段看起来如下所示:

代码语言:javascript
运行
复制
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;
  }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60583201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档