页面视图抖动中刷新屏幕时如何返回上一页

问题描述 投票:0回答:3

当我引用屏幕或在页面视图中导航回来时,我想保留当前页面 这是代码,实际上我想以编程方式显示特定的索引屏幕,而无需单击按钮。有时我的controller.hasClients 变空了。如果页面视图有 3 个屏幕,如果我在第二个屏幕上刷新第二个屏幕,则应显示第二个屏幕,而不是始终显示第一个屏幕。我使用页面控制器来显示,但无法实例化页面控制器,因为我想从页面视图的顶部小部件进行访问。请帮忙

      Container(
          // width: 370,
          height: MediaQuery.of(context).size.height * 0.685,
          child: Stack(children: <Widget>[
            _pages(),

            Stack(
              children: <Widget>[
                Align(
                  alignment: Alignment.bottomCenter,
                  child: Container(
                    child: Row(
                      mainAxisSize: MainAxisSize.max,
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: <Widget>[
                        for (int i = 0; i < 3; i++)
                          (i == currentPage
                              ? circleBar(true)
                              : circleBar(false))
                      ],
                    ),
                  ),
                ),
              ],
            ),
          ]),
        ),

           Widget _pages() {
List _pagesList = [
  FirstScreen(
   
  ),
  SecondScreen(
   
  ),
  ThirdScreen(
      ),
];


return PageView.builder(
  controller: _pageController,
  itemCount: _pagesList.length,
 // restorationId: currentPage.toString(),
  itemBuilder: (BuildContext context, int index) {
   // _pageController=PageController(initialPage: currentPage);
    return _pagesList[index];
  },
  onPageChanged: (int page) {
    setState(() {
      currentPage = page;
      selected = analyticsList[currentPage].anlyticName;
      isIndexChanged = true;
      page;
    });
  },
);

}

flutter dart flutter-layout flutter-pageview
3个回答
1
投票

对于命名路线,您可以使用此代码。

Navigator.pushNamed(context, '/screen2').then((_) {
  // This block runs when you have returned back from screen 2.
  setState(() {
    // code here to refresh data
  });
});

0
投票

首先保存当前页面并在pages()中实例化页面控制器,这对我有用

我只是在我的代码中的pages()中实例化了页面控制器,就好像在顶部声明它不会在每次刷新时读取,所以我声明了页面视图的构建位置。

Widget _pages() {

   _pageController= PageController(initialPage: currentPage, keepPage: true);
    List _pagesList = [
      FirstScreen(
        
      ),
     SecondScreen(
       
      ),
      ThirdScreen(
          ),
    ];


    return PageView.builder(
      controller: _pageController,
      itemCount: _pagesList.length,
     // restorationId: currentPage.toString(),
      itemBuilder: (BuildContext context, int index) {

        return _pagesList[index];
      },
      onPageChanged: (int page) {
        setState(() {
          currentPage = page;
          selected = analyticsList[currentPage].anlyticName;
          isIndexChanged = true;

          page;
        });
      },
    );



  }

0
投票

您应该尝试循环页面视图https://pub.dev/packages/loop_page_view 这是一个非常简单的插件

import 'package:flutter/material.dart';
import 'package:loop_page_view/loop_page_view.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Loop Page View Demo'),
        ),
        body: Center(
          child: LoopPageView.builder(
            itemCount: 2,
            itemBuilder: (_, index) {
              return Card(
                child: Center(
                  child: Text('$index'),
                ),
              );
            },
          ),
        ),
      ),
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.