Flutter--PageView学习

一、PageView的介绍

PageView:滑动视图列表,类型Android的ViewPage控件,不过PageView支持上下滑动,可制作轮播图。

二、PageView,PageController的源码

2.1、PageView源码

PageView({
    Key? key,
    this.scrollDirection = Axis.horizontal,//滑动方向
    this.reverse = false,//是否反转,true 从最后一个记0
    PageController? controller,//控制初始化
    this.physics,//滚动方式
    this.pageSnapping = true,//是否有回弹效果
    this.onPageChanged,//监听切换
    List<Widget> children = const <Widget>[],//子组件
    this.dragStartBehavior = DragStartBehavior.start,//处理拖拽开始行为方式
    this.allowImplicitScrolling = false,
    this.restorationId,
    this.clipBehavior = Clip.hardEdge,
  }) : assert(allowImplicitScrolling != null),
       assert(clipBehavior != null),
       controller = controller ?? _defaultPageController,
       childrenDelegate = SliverChildListDelegate(children),
       super(key: key);

2.2、PageController的源码

PageController({
    this.initialPage = 0,//初始化第一次默认在第几个
    this.keepPage = true,//是否保存当前 Page 的状态,如果保存,下次回复对应保存的 page,initialPage被忽略,如果为 false 。下次总是从 initialPage 开始
    this.viewportFraction = 1.0,//占屏幕多少,1为占满整个屏幕
  }) : assert(initialPage != null),
       assert(keepPage != null),
       assert(viewportFraction != null),
       assert(viewportFraction > 0.0);
三、PageView的属性说明

3.1、PageView的属性说明

属性说明
scrollDirection滑动反向
Axis.vertical上下滑动
Axis.horizontal左右滑动
reverse是否反转 true从最后一个记0
controllerPageController见下文
physics滚动方式
pageSnapping是否有回弹效果
onPageChanged监听切换
children子组件
dragStartBehavior处理拖拽开始行为方式

3.2、PageController的属性说明

属性说明
initialPage初始化第一次默认在第几个
keepPage是否保存当前 Page 的状态
true下次回复对应保存的 page,initialPage被忽略
false总是从 initialPage 开始
viewportFraction占屏幕多少,1为占满整个屏幕
四、PageView的demo

4.1、PageView的简单使用

return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("PageView学习"),
        ),
        body: Center(
          child: PageView(
            scrollDirection: Axis.horizontal,
            reverse: false,
            controller: PageController(
              initialPage: 1,
              keepPage: false,
              viewportFraction: 0.8

            ),
            children: [
              Container(
                color: Colors.red,
                child: Text("我是页面0"),
              ),
              Container(
                color: Colors.blue,
                child: Text("我是页面1"),
              ),
              Container(
                color: Colors.green,
                child: Text("我是页面2")
              )
            ],

          ),
        ),
      ),
    );

4.2、

PageView添加指示器及无限滚动
class _ViewPagerStudyState extends State<ViewPagerStudy> {
  List<Widget> pageList = [
    Page(name: "我是页面A", mColor: Colors.red),
    Page(name: "我是页面B", mColor: Colors.blue),
    Page(name: "我是页面C", mColor: Colors.green)
  ];
  int _nowIndex = 0;

  @override
  void initState() {
    super.initState();
  }

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

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      home: Scaffold(
          appBar: AppBar(
            title: Text("PageView无限滚动"),
          ),
          body: Stack(
            alignment: Alignment.bottomCenter,
            children: [
              PageView.builder(
                  onPageChanged: (int index) {
                    setState(() {
                      _nowIndex = index % pageList.length;
                    });
                  },
                  itemCount: 1000,
                  itemBuilder: (context, index) {
                    return pageList[index % pageList.length];
                  }),
              //指示器
              Positioned(
                bottom: 10,
                child: Row(
                    children: List.generate(pageList.length, (index) {
                  return Container(
                    margin: EdgeInsets.all(10),
                    width: 10,
                    height: 10,
                    decoration: BoxDecoration(
                        shape: BoxShape.circle,
                        color: _nowIndex == index
                            ? Colors.amberAccent
                            : Colors.white),
                  );
                }).toList()),
              ),
            ],
          )),
    );
  }
}

class Page extends StatelessWidget {
  String name;
  Color mColor;

  Page({Key key, this.name, this.mColor}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      color: mColor,
      child: Text(
        "${this.name}",
        style: TextStyle(color: Colors.white),
      ),
    );
  }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flutter中,可以通过将TabBar和PageView组合在一起来创建具有选项卡的页面滚动视图。下面是一个简单的示例,演示如何使用TabBar和PageView来创建具有选项卡的页面滚动视图。 首先,我们需要在代码中导入必要的库: ```dart import 'package:flutter/material.dart'; ``` 然后,我们可以创建一个StatefulWidget,其中包含一个TabBar和一个PageView。在这个示例中,我们将创建一个具有三个选项卡的滚动视图,每个选项卡都包含一个文本控件。 ```dart class MyTabbedPage extends StatefulWidget { @override _MyTabbedPageState createState() => _MyTabbedPageState(); } class _MyTabbedPageState extends State<MyTabbedPage> { final List<Tab> myTabs = <Tab>[ Tab(text: 'Tab 1'), Tab(text: 'Tab 2'), Tab(text: 'Tab 3'), ]; @override Widget build(BuildContext context) { return DefaultTabController( length: myTabs.length, child: Scaffold( appBar: AppBar( title: Text('My Tabbed Page'), bottom: TabBar( tabs: myTabs, ), ), body: TabBarView( children: myTabs.map((Tab tab) { return Center(child: Text(tab.text)); }).toList(), ), ), ); } } ``` 在这个示例中,我们首先定义了一个包含三个选项卡的TabBar。然后,我们使用DefaultTabController来指定选项卡的数量,并将TabBar包装在AppBar中。最后,我们使用TabBarView来构建页面视图,并将一个文本控件放在每个选项卡中间。 现在,我们可以将MyTabbedPage添加到我们的应用程序中: ```dart void main() { runApp(MaterialApp( title: 'My App', home: MyTabbedPage(), )); } ``` 这样,我们就可以创建一个具有选项卡的页面滚动视图,用户可以在不同的选项卡之间滚动并查看不同的页面内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值