【问题标题】:How do I set the initial page of PageView in Flutter?Flutter中如何设置PageView的初始页面?
【发布时间】:2020-03-16 08:10:15
【问题描述】:

我有一个PageView,里面有四页。我想从第三页开始。这意味着当用户向上滚动时有两个页面可用,当用户向下滚动时有一个页面可用。

我试过了:

home: PageView(
   controller: MyPageController(),
   children: [Page1(), Page2(), Page3(), Page4()],
   scrollDirection: Axis.vertical,
),

与:

class MyPageController extends PageController {
   @override
   int get initialPage => 3;
}

不幸的是,这对我没有帮助。

【问题讨论】:

  • 您尝试拨打super(initialPage:0) 吗?初始化时可能会用到一些东西

标签: flutter flutter-layout flutter-pageview


【解决方案1】:

PageController 构造函数具有命名参数 initialPage。您可以使用它,只需在 build 函数之外的某处创建控制器:

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  PageController controller;

  @override
  void initState() {
    super.initState();
    controller = PageController(initialPage: 3);
  }

  @override
  void dispose() {
    controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: SafeArea(
          child: PageView(
            controller: controller,
            children: [
              for (var i = 0; i < 4; i++)
                Text('test $i')
            ],
            scrollDirection: Axis.vertical,
          )
        )
      ),
    );
  }
}

【讨论】:

  • 您不应该在无状态小部件中使用这样的PageController!您必须确保妥善处理它。只需查看文档以获取使用 StatefulWidget api.flutter.dev/flutter/widgets/PageController-class.html 的完整示例
  • 对不起,是的,你是对的。我忘了你应该把它扔掉。
  • 正是我想要的真棒:)
【解决方案2】:

您需要设置初始页面,

PageController _controller = PageController(initialPage: 3);

【讨论】:

    【解决方案3】:

    对我来说,使用initialPage 初始化PageController 不适用于大量页面。我还注意到,如果您想直接登陆所需的页面,则会出现滚动动画。

    我用了以下

      PageController _pageViewController = PageController();
    
      @override
      void initState() {
        super.initState();
      }
    
      @override
      void didChangeDependencies() {
        
        WidgetsBinding.instance.addPostFrameCallback((_) {
    
          if (_pageViewController.hasClients)
            _pageViewController.jumpToPage(3);
    
        });
    
        super.didChangeDependencies();
      }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      • 2014-04-10
      • 2020-04-24
      相关资源
      最近更新 更多