### demo 地址: https://github.com/iotjin/jh_flutter_demo

####实现效果:

  • appbar滚动颜色渐变,状态栏颜色切换
  • 背景图下拉放大
  • 图片9宫格展示
  • 图片全屏浏览,长按弹框

效果图:

代码


import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:jhtoast/jhtoast.dart';
import 'package:jh_flutter_demo/base_appbar.dart';
import 'package:jh_flutter_demo/jh_common/utils/jh_color_utils.dart';
import 'package:jh_flutter_demo/jh_common/widgets/jh_bottom_sheet.dart';
import 'package:jh_flutter_demo/jh_common/widgets/jh_nine_picture.dart';
import 'package:jh_flutter_demo/project/configs/project_config.dart';
import 'package:jh_flutter_demo/project/model/contacts_model.dart';class WxFriendsCirclePage extends StatefulWidget {@override_WxFriendsCirclePageState createState() => _WxFriendsCirclePageState();
}class _WxFriendsCirclePageState extends State<WxFriendsCirclePage> {ScrollController _scrollController = ScrollController();double _imgNormalHeight = 300;double _imgExtraHeight = 0;double _imgChangeHeight = 0;double _scrollMinOffSet = 0;double _navH = 0;double _appbarOpacity = 0.0;var _dataArr = [];@overridevoid initState() {super.initState();_navH = JhScreenUtils.navigationBarHeight;_imgChangeHeight = _imgNormalHeight + _imgExtraHeight;_scrollMinOffSet = _imgNormalHeight - _navH;_addListener();_loadData();}void _loadData() async {// 获取微信运动排行榜数据final jsonStr =await rootBundle.loadString('lib/res/wx_friends_circle.json');Map dic = json.decode(jsonStr);List dataArr = dic['data'];// dataArr.forEach((item) {// });_dataArr = dataArr;setState(() {});}//滚动监听void _addListener() {_scrollController.addListener(() {double _y = _scrollController.offset;// print("滑动距离: $_y");if (_y < _scrollMinOffSet) {_imgExtraHeight = -_y;
//        print(_topH);setState(() {_imgChangeHeight = _imgNormalHeight + _imgExtraHeight;});} else {setState(() {_imgChangeHeight = _navH;});}// //小于0 ,下拉放大// if (_y < 0) {// } else {}//appbar 透明度double appBarOpacity = _y / _navH;if (appBarOpacity < 0) {//透明appBarOpacity = 0.0;} else if (appBarOpacity > 1) {//不透明appBarOpacity = 1.0;}//更新透明度setState(() {_appbarOpacity = appBarOpacity;// print('_appbarO: ${_appbarOpacity}');});});}@overridevoid dispose() {//为了避免内存泄露,_scrollController.dispose_scrollController.dispose();super.dispose();}@overrideWidget build(BuildContext context) {return Scaffold(body: _body(context, _dataArr),);}Widget _body(context, dataArr) {return Stack(children: <Widget>[Container(color: Colors.white,child: MediaQuery.removePadding(context: context,removeTop: true,child: ListView.builder(controller: _scrollController,physics: BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()),itemCount: dataArr.length + 1,itemBuilder: (BuildContext context, int index) {if (index == 0) {return Container(width: double.infinity,height: _imgNormalHeight,);}return _cell(context, dataArr[index - 1]);}),),),Positioned(top: 0,left: 0,right: 0,height: _imgChangeHeight,child: _header(context),),Positioned(top: 0,left: 0,right: 0,child: backAppBar(context, '朋友圈',backgroundColor: KColor.kWeiXinBgColor.withOpacity(_appbarOpacity),brightness:_appbarOpacity == 1.0 ? Brightness.light : Brightness.dark,rightImgPath: 'assets/wechat/discover/ic_xiangji.png',rightItemCallBack: () {_clickNav();}),),]);}//_headerWidget _header(context) {return Stack(fit: StackFit.expand,children: [Container(margin: EdgeInsets.only(bottom: 20),color: Colors.white,// child: Image.network(//   'http://img1.mukewang.com/5c18cf540001ac8206000338.jpg',//   fit: BoxFit.cover,// ),child: Image.asset('assets/wechat/discover/friends/wx_bg0.jpeg',// 'assets/wechat/discover/friends/wx_bg1.jpg',fit: BoxFit.cover,),),Positioned(right: 20,bottom: 0,child: Row(children: [Container(margin: EdgeInsets.only(bottom: 10),child: Text('小于',style: TextStyle(color: Colors.white,fontSize: 18.0,fontWeight: FontWeight.w500,),),),SizedBox(width: 20),InkWell(child: Container(height: 75,width: 75,decoration: BoxDecoration(borderRadius: BorderRadius.circular(10),image: DecorationImage(fit: BoxFit.fitHeight,image: AssetImage("assets/images/lufei.png"),),),),onTap: () => _jumpInfo(),),],)),],);}//cellWidget _cell(context, item) {return InkWell(onTap: () => _clickCell(context, item['name']),child: Container(decoration: BoxDecoration(// border: Border.all(color: KColor.kLineColor, width: 1),border: Border(bottom: BorderSide(width: 0.5, color: KColor.kLineColor), //下边框)),child: Row(crossAxisAlignment: CrossAxisAlignment.start,children: [//头像InkWell(onTap: () => _jumpInfo(),child: Container(margin: EdgeInsets.all(15),height: 50,width: 50,decoration: BoxDecoration(color: JhColorUtils.hexColor(item['color']),borderRadius: BorderRadius.circular(8),),child: Center(child: Text(item['name'].substring(0, 1),style: TextStyle(color: Colors.white, fontSize: 20)),),),),Expanded(child: Column(crossAxisAlignment: CrossAxisAlignment.start,children: [Container(margin: EdgeInsets.only(top: 13),child: Text(item['name'],style: TextStyle(color: KColor.kWeiXinTextBlueColor, fontSize: 15),),),Container(margin: EdgeInsets.fromLTRB(0, 5, 15, 5),child: Text(item['content'],style: TextStyle(fontSize: 13),)),_imgs(context, item),Container(margin: EdgeInsets.fromLTRB(0, 5, 15, 10),child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween,children: [Text(item['time'],style: TextStyle(color: KColor.kTextGrayColor, fontSize: 13),),InkWell(child: Container(width: 34,height: 22,decoration: BoxDecoration(borderRadius: BorderRadius.circular(5),color: Color.fromRGBO(240, 240, 240, 1),),child: Image.asset('assets/wechat/discover/ic_diandian.png',color: KColor.kWeiXinTextBlueColor,),),onTap: () => _clickCell(context, '评论'),)],)),])),],),));}//图片viewWidget _imgs(context, item) {return Container(child: JhNinePicture(imgData: item['imgs'],lRSpace: (80.0 + 20.0),onLongPress: () {print('objonLongPressect:');JhBottomSheet.showText(context, dataArr: ["保存图片"]);},));}//点击cell_clickCell(context, text) {JhToast.showText(context, msg: '点击 ${text}');}_clickNav() {JhBottomSheet.showText(context,title: "请选择操作",dataArr: ['拍摄', '从手机相册选择'],clickCallback: (index, text) {});}_jumpInfo() {//跳转个人信息页 跳转传递modelContactsModel model = ContactsModel();model.id = 123;model.name = '小于';model.namePinyin = '小于';model.phone = '17372826674';model.sex = '0';model.region = '淮北市';model.label = '';model.color = '#c579f2';model.avatarUrl = 'https://gitee.com/iotjh/Picture/raw/master/lufei.png';model.isStar = false;String jsonStr = Uri.encodeComponent(jsonEncode(model));NavigatorUtils.pushNamed(context, '${"WxUserInfoPage"}?passValue=${jsonStr}');}
}

Flutter - 微信朋友圈效果实现相关推荐

  1. 【微信小程序】小程序仿微信朋友圈效果

    废话不多说 直接上代码 HTML <!--pages/index/discor.wxml--> <view class='scrtionList'> <view wx:i ...

  2. android 微信朋友圈效果(附完整注释)

    请尊重原创,转载请注明出处:http://blog.csdn.net/mabeijianxi/article/details/50533703 先看下效果图: 源码地址:https://github. ...

  3. android今日头条图片查看效果,图片查看器ImageViewer:轻松实现微信朋友圈、今日头条、横向列表、纵向列表等图片浏览效果...

    ImageViewer 关于 图片浏览器,支持图片手势缩放.拖拽等操作,自定义View的模式显示,自定义图片加载方式,可自定义索引UI与加载进度UI,更加灵活,易于扩展,同时也适用于RecyclerV ...

  4. Flutter 实现微信朋友圈功能

    今天给大家实现一下微信朋友圈的效果,下面是效果图 下面还是老样子,还是以代码的方式进行讲解 import 'package:dio/dio.dart'; import 'package:flutter ...

  5. 微信朋友圈附近推效果怎么样?

    朋友圈广告是流量比较大的广告投放了.但是产品不同,效果不同,转化率不同! 首先朋友圈广告按地域投放,最小可精准至0.5千米以内 其次可按照用户 年龄.性别.兴趣爱好.学历.手机价格--筛选用户 最重要 ...

  6. 从微信朋友圈卖“冰丝内裤”看:效果类广告投放哪家强?

    微信2015年在朋友圈发出第一批品牌广告后,朋友圈广告一时间几乎成为了"土豪"和"屌丝"的分水岭,以至于网上有段子调侃"人世间最遥远的距离,就是你在朋 ...

  7. android bmob 朋友圈,仿微信朋友圈视频效果 – MVideo

    MVideo 仿微信朋友圈视频效果,可以拖拽及缩放,视频查看,基于ijkplayer. Demo 入门 Step 1:在buil文件中添加JitPack仓库: allprojects { reposi ...

  8. 音乐相册怎么做?3步快速学会制作微信朋友圈的精美音乐相册效果

    现在抖音.微信朋友圈最流行分享什么内容?音乐相册必须拥有姓名! 那在社交平台收获超多赞的爆款音乐相册怎么做? 如何快速制作一个精美的音乐相册? 今天,教大家通过数码大师来快速制作一个效果精美的音乐相册 ...

  9. RecyclerView实现QQ空间和微信朋友圈头部刷新效果

    RecyclerView实现QQ空间和微信朋友圈头部刷新效果 老规矩先上图 本篇主要讲RecyclerView实现QQ空间和微信朋友圈头部刷新效果,如果想了解ListView如何实现,请查看上篇:Li ...

  10. iOS纯Autolayout实现微信朋友圈和通讯录另附App启动页短视频效果

    2017/8/24更新 由于10.0以上的版本对于autolayout的布局有点变化,因此这里做一下修复 如果按照之前的操作,约束就会严重冲突,虽然不会影响对应的效果,但是看起来很不爽 1.首先更新下 ...

最新文章

  1. 算法基础知识科普:8大搜索算法之红黑树(上)
  2. CMDB收集资产脚本
  3. 【未完待续】Git个人solo实际常用命令
  4. HDU4809 Wow! Such City! Dijkstra算法
  5. SpringBoot 配置 generator代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)
  6. 数据库索引失效情况汇总
  7. JQuery Show()的几种效果
  8. Python gevent高并发(限制最大并发数、协程池)
  9. tomcat源码分析_CVE-2020-9484 tomcat session反序列化漏洞分析
  10. BZOJ 1070: [SCOI2007]修车
  11. 在编写mini2440 helloworld驱动遇到的问题
  12. Activity生命周期详解一
  13. 12篇学通C#网络编程——第一篇 基础之进程线程(转)
  14. 几类常用Case工具介绍(有点老,但还是具有参考性,对应找较新版本就是了)...
  15. 12864液晶模块的详细使用
  16. 【Android安全】fastboot相关
  17. 杜甫水平最高的10首五律
  18. 视觉学习笔记Week9 Gazebo仿真环境下相机焦距计算
  19. 《嵌入式 – GD32开发实战指南》第19章 程序加密
  20. 微软的拼音输入法可以带声调进行

热门文章

  1. 清理系统垃圾 bat
  2. 虚拟偶像养成记:人工智能人格化与IP化打造出完美“爱豆”
  3. 《中文版PHOTOSHOP.CS3完全自学教程》李金明.李金荣.彩色扫描版.pdf
  4. windows update 离线包下载
  5. Flowplayer简单酷炫的视频播放器
  6. 美通企业周刊 | 麦当劳阿里巴巴开启全域合作;老佛爷百货中国第三店落户贵阳;OPPO推出首款智能电视...
  7. 配置ouster雷达过程
  8. 【Firefox设置百度搜索引擎】
  9. 三菱plc控制步进电机实例_FX3U PLC通过手摇轮,如何手动控制步进电机
  10. WS824的电话交换机设置分机号