当前位置: 首页 > news >正文

flutter AppBar滚动渐变

这个需求应该是挺多的,今天用flutter 实现以下 , 直接上代码.
我没有过多的封装,为了一次性贴出来,我自定义的组件 你可以写自己的,
如果项目自己用,最好封装好,这样看着代码很乱
这里只要的知识点是
1: 监听

NotificationListener(
             onNotification: (ScrollNotification notification) {
               if (notification is ScrollUpdateNotification &&
                   notification.depth == 0) {
                 _onScroll(notification.metrics.pixels);
               }
             },

//以下是API
print(metrics.pixels);// 当前位置
print(metrics.atEdge);//是否在顶部或底部
print(metrics.axis);//垂直或水平滚动
print(metrics.axisDirection);// 滚动方向是down还是up
print(metrics.extentAfter);//视口底部距离列表底部有多大
print(metrics.extentBefore);//视口顶部距离列表顶部有多大
print(metrics.extentInside);//视口范围内的列表长度
print(metrics.maxScrollExtent);//最大滚动距离,列表长度-视口长度
print(metrics.minScrollExtent);//最小滚动距离
print(metrics.viewportDimension);//视口长度
print(metrics.outOfRange);//是否越过边界

2:Stack 的使用
stack 可以把下面的View 放到上面 API 大家自行查看把

3: color 颜色问题
hexToColor('#31bd48') 一个支持颜色的方法, 代码贴一下出来吧


 


Color hexToColor(String s) {
  // 如果传入的十六进制颜色值不符合要求,返回默认值
  if (s == null || s.length != 7 || int.tryParse(s.substring(1, 7), radix: 16) == null) {
    s = '#999999';
  }

  return new Color(int.parse(s.substring(1, 7), radix: 16) + 0xFF000000);
}

 

 

 

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  String hpCon = '';
//定义透明度
  double appBarAlpha = 0;
  @override
  void initState() 
    super.initState();
  }

/**
 * 滚动的距离
 */
  _onScroll(offset) {
    double alpha = offset / 100;
    print(offset);
    if (alpha < 0) {
      alpha = 0;
    } else if (alpha > 1) {
      alpha = 1;
    }

    setState(() {
      appBarAlpha = alpha;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        // appBar: AppBar(
        //   title: NavBar(),
        //   backgroundColor: hexToColor('#31bd48'),
        // ),
        body: Stack(
      children: <Widget>[
        MediaQuery.removePadding(
          removeTop: true,
          context: context,
          child: Container(
            child: Consumer<HomeModel>(builder: (_, homeModel, __) {
              //这里是个监听,监听listview滚动
              return NotificationListener(
                onNotification: (ScrollNotification notification) {
                  if (notification is ScrollUpdateNotification &&
                      notification.depth == 0) {
                    _onScroll(notification.metrics.pixels);
                  }
                },
                child: ListView(
                  children: <Widget>[
                    Container(
                      height: ScreenUtil().setHeight(240),
                    //这里是轮播图,也是可以自己写的
                      child: HomePageSwiper(),
                    ),
                    Container(
                      height: 800,
                      child: Text(''),
                    )
                  ],
                ),
              );
            }),
          ),
        ),
        //这里是搜索框
       //这里可以自定义组件,使用自己的头,我的是项目的
        Opacity(
          opacity: appBarAlpha,//滑动offset改变透明度 
          child: Container(
              decoration: BoxDecoration(
                color: hexToColor('#31bd48'),
              ),
              height: 100,
              child: Padding(
                padding: EdgeInsets.only(top: 44),
                child: NavBar(),
              )),
        )
      ],
    ));
    // );
  }
}

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Flutter开发 Dio拦截器实现token验证过期的功能
  • 实践人生 ,一个普通IT人的十年回顾(四)
  • flutter实用系列(五)之网络请求dio,请求,拦截器简单示例
  • 译者后记 ——《DOOM启示录》读后感(二)
  • centos7 -pm2定时任务重启
  • Borland挺进南极
  • 仿携程首页项目的静态页面布局项目
  • C++Builder使用经验谈 (转)
  • flex布局详解
  • 看完了Essential c++......
  • vue打包上传到服务器加载慢的优化
  • nginx部署多个 vue项目
  • 转载--中国手机游戏市场焦点分析报告
  • 角色扮演游戏引擎的设计原理--转自MOVE2008
  • flutter指纹识别
  • 分享一款快速APP功能测试工具
  • 03Go 类型总结
  • 30秒的PHP代码片段(1)数组 - Array
  • Docker入门(二) - Dockerfile
  • Elasticsearch 参考指南(升级前重新索引)
  • ES6简单总结(搭配简单的讲解和小案例)
  • es的写入过程
  • java小心机(3)| 浅析finalize()
  • node-glob通配符
  • Phpstorm怎样批量删除空行?
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Zsh 开发指南(第十四篇 文件读写)
  • 高度不固定时垂直居中
  • 排序算法学习笔记
  • 前嗅ForeSpider采集配置界面介绍
  • 设计模式 开闭原则
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 微服务入门【系列视频课程】
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 组复制官方翻译九、Group Replication Technical Details
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (MATLAB)第五章-矩阵运算
  • (Qt) 默认QtWidget应用包含什么?
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (第30天)二叉树阶段总结
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (简单) HDU 2612 Find a way,BFS。
  • (七)Flink Watermark
  • (十一)手动添加用户和文件的特殊权限
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (原創) 物件導向與老子思想 (OO)
  • (转)负载均衡,回话保持,cookie
  • .apk文件,IIS不支持下载解决
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复