Flutter学习-通过上下滑动打开新页面

笔记

Flutter 监听滚动打开新的页面

import 'dart:ui' as prefix0;
import 'package:flutter/material.dart';
class PersonalPage extends StatefulWidget {
  @override
  PersonalPageState createState() {
    return new PersonalPageState();
  }
}
class PersonalPageState extends State<PersonalPage> {
// 在这里创建一个监听.
  ScrollController scrollController = new ScrollController();
  @override
  void initState() {
    scrollController.addListener(() {
    // 在这里监听滚动,反正只要一动,就跳到新的页面,当然这个是没有任务的业务要求的,就是试着玩.
      if (scrollController.offset < 20) {
        Navigator.pushNamed(context, "/home");
      } else if (scrollController.offset >= 20) {
        Navigator.pushNamed(context, "/home");
      }
    });
  }

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: Text("个人信息"),
          ),
          body: Scrollbar(
            child: Stack(
              alignment: Alignment.center,
              children: <Widget>[
                ListView.builder(
                  itemCount: 100,
                  itemExtent: 50,
                  controller: scrollController,
                  itemBuilder: (context, index) {
                    return ListTile(
                      title: Text("编号: $index"),
                    );
                  },
                ),
              ],
            ),
          ),
        ),
        title: "个人信息",
        theme: ThemeData(
          primaryColor: Colors.grey,
        ));
  }
}

以下代码是稍微完整一点的。

import 'dart:ui' as prefix0;
import 'package:flutter/material.dart';

class PersonalPage extends StatefulWidget {
  @override
  PersonalPageState createState() {
    return new PersonalPageState();
  }
}

class PersonalPageState extends State<PersonalPage> {
  ScrollController scrollController = new ScrollController();
  bool isTop = false;
  String percent = "0%";
  @override
  void initState() {
    scrollController.addListener((){
      //print(scrollController.offset);
      if(scrollController.offset<500 && isTop) {
        setState(() {
          isTop = false;
        });
      } else if (scrollController.offset >= 500 && isTop == false) {
        setState(() {
          isTop = true;
          Navigator.pushNamed(context, "/home");
        });
      }
    });
  }
  @override
  void dispose() {
    scrollController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("个人信息"),
        ),
        body: Scrollbar(
          child: NotificationListener<ScrollNotification>(
            onNotification: (ScrollNotification sn) {
              double progress = sn.metrics.pixels / sn.metrics.maxScrollExtent;
              setState(() {
                percent = "${(progress*100).toInt()}%";
              });
            },
            child: Stack(
              alignment: Alignment.center,
              children: <Widget>[
                ListView.builder(
                  itemCount: 100,
                    itemExtent: 50,
                    controller: scrollController,
                    itemBuilder: (context,index) {
                  return ListTile(title: Text("编号: $index"),);
                },
                ),
                CircleAvatar(
                  backgroundColor: Colors.black12,
                  radius: 30,
                  child: Text(percent,style: TextStyle(color: Colors.red),),
                )
              ],
            ),
          ),
        ),
      ),
      title: "个人信息",
      theme: ThemeData(
        primaryColor: Colors.grey,
      )
    );

  }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值