flutter仿支付宝余额宝年化收益折线图

在这里插入图片描述

绘制:
1.在pubspec.yaml中引入:fl_chart: 0.55.2
2.绘制:

import 'package:jade/utils/JadeColors.dart';
import 'package:util/easy_loading_util.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';class MyLineChart extends StatefulWidget {const MyLineChart({Key key}) : super(key: key);State<MyLineChart> createState() => _MyLineChartState();
}class _MyLineChartState extends State<MyLineChart> with TickerProviderStateMixin{List<String> _tabs = ['近7日','近1月','近3月'];TabController _tabController;List<Color> gradientColors = [Colors.yellow,Colors.yellow,];//进入后默认显示指示竖线和轨迹球的点FlSpot _defaultShowFlSpot = FlSpot(8, 4);//进入页面时默认显示的点上的竖线显隐开关bool _showSpotLine = true;List<String> get weekDays => const ['10.21', '10.22', '10.23', '10.24', '10.25', '10.26', '10.27'];void initState() {// TODO: implement initStatesuper.initState();_tabController = TabController(length: _tabs.length,vsync: this);}void dispose() {// TODO: implement dispose_tabController.dispose();super.dispose();}Widget build(BuildContext context) {return Container(child: Column(children: <Widget>[_tabBarView(),_lineChartWidget()],),);}//选项卡_tabBarView(){return Container(width: double.infinity,height: 120.w,margin: EdgeInsets.only(bottom: 20.w),decoration: BoxDecoration(color: JadeColors.lightGrey,borderRadius: BorderRadius.circular(5)),child: Column(children: [Container(height: 70.w,child: TabBar(isScrollable: false,labelPadding: EdgeInsets.symmetric(horizontal: 0),indicator: BoxDecoration(color: Colors.white,borderRadius: BorderRadius.circular(5),border: Border.all(width: 2,color: JadeColors.lightGrey)),labelColor: Color(0xff333333),labelStyle: TextStyle(fontSize: 30.sp,fontWeight: FontWeight.w600,),unselectedLabelColor: JadeColors.grey,unselectedLabelStyle: TextStyle(fontSize: 30.sp,fontWeight: FontWeight.w300),indicatorSize: TabBarIndicatorSize.tab,controller: _tabController,tabs: _tabs.map((value) => Container(width: double.infinity,height: double.infinity,padding: EdgeInsets.symmetric(horizontal: 20.w),alignment: Alignment.center,decoration: BoxDecoration(borderRadius: BorderRadius.only(topLeft: value == _tabs.first? Radius.circular(5): Radius.circular(0),bottomLeft: value == _tabs.first? Radius.circular(5): Radius.circular(0),topRight: value == _tabs.last? Radius.circular(5): Radius.circular(0),bottomRight: value == _tabs.last? Radius.circular(5): Radius.circular(0),),border: Border.all(width: 1.w,color: JadeColors.grey_4)),child: Text(value))).toList(),onTap: (index) {esLoadingToast('点击${_tabs[index]}');},)),Expanded(child: Container(margin: EdgeInsets.only(left: 40.w,right: 40.w),child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween,children: [Text('2023-10-30',style: TextStyle(color: JadeColors.grey_2,fontSize: 22.sp,fontWeight: FontWeight.bold),),Text.rich(TextSpan(children: [TextSpan(text: '核销数:',style: TextStyle(color: JadeColors.grey_3,fontSize: 22.sp)),TextSpan(text: '5',style: TextStyle(color: JadeColors.orange,fontSize: 22.sp))]))],),))],),);}//折线图表_lineChartWidget(){return AspectRatio(aspectRatio: 1.70,child: Padding(padding: EdgeInsets.only(right: 40.w,),child: LineChart(mainData())),);}LineChartData mainData() {return LineChartData(//网格gridData: FlGridData(show: true,drawVerticalLine: false,horizontalInterval: 1,verticalInterval: 1,getDrawingHorizontalLine: (value) {return  FlLine(color: JadeColors.lightGrey,strokeWidth: 1,);},getDrawingVerticalLine: (value) {return  FlLine(color: Colors.red,strokeWidth: 1,);},),titlesData: FlTitlesData(show: true,rightTitles:  AxisTitles(sideTitles: SideTitles(showTitles: false),),topTitles:  AxisTitles(sideTitles: SideTitles(showTitles: false),),bottomTitles: AxisTitles(sideTitles: SideTitles(showTitles: true,reservedSize: 30,interval: 2,getTitlesWidget: bottomTitleWidgets,),),leftTitles: AxisTitles(sideTitles: SideTitles(showTitles: true,interval: 1,getTitlesWidget: leftTitleWidgets,reservedSize: 30,),),),borderData: FlBorderData(show: true,//  border: Border.symmetric(horizontal: BorderSide(color: JadeColors.lightGrey, width: 1)),border: Border.fromBorderSide( BorderSide(color: JadeColors.lightGrey, width: 1)),),minX: 0,maxX: 12,minY: 0,maxY: 6,lineBarsData: [LineChartBarData(spots: const [FlSpot(0, 0),FlSpot(2.6, 4),FlSpot(4.9, 5),FlSpot(6.8, 3.1),FlSpot(8, 4),FlSpot(9.5, 3),FlSpot(12, 6),],isCurved: false,gradient: LinearGradient(colors: gradientColors,),barWidth: 2,dotData:  FlDotData(show: _showSpotLine,getDotPainter: (spot, percent, barData, index) {//当点是默认要显示的点时if(spot == _defaultShowFlSpot){return FlDotCirclePainter(strokeWidth: 1,strokeColor: const Color(0xffF27800),radius: 2,color: Colors.white,);}return FlDotCirclePainter(strokeWidth: 0,strokeColor: Colors.yellow,radius: 1,color: Colors.yellow,);}),belowBarData: BarAreaData(show: true,gradient: LinearGradient(colors: [Colors.yellow,Colors.white].map((color) => color.withOpacity(0.3)).toList(),begin: Alignment.topCenter, end: Alignment.bottomCenter),spotsLine: BarAreaSpotsLine(show: _showSpotLine,flLineStyle: FlLine(color: const Color(0xffF27800),strokeWidth: 1,),checkToShowSpotLine: (spot) {if (spot == _defaultShowFlSpot) {return true;}return false;},),),aboveBarData: BarAreaData(show: _showSpotLine,gradient: LinearGradient(colors: [Colors.white,Colors.white].map((color) => color.withOpacity(0.3)).toList(),begin: Alignment.topCenter, end: Alignment.bottomCenter),spotsLine: BarAreaSpotsLine(show: true,flLineStyle: FlLine(color: const Color(0xffF27800),strokeWidth: 1,),checkToShowSpotLine: (spot) {if (spot == _defaultShowFlSpot) {return true;}return false;},),),),],lineTouchData: LineTouchData(enabled: true,getTouchLineEnd: (data, index) => double.infinity,getTouchedSpotIndicator: (LineChartBarData barData, List<int> spotIndexes) {return spotIndexes.map((spotIndex) {return TouchedSpotIndicatorData(//接触点竖线FlLine(color: const Color(0xffF27800), strokeWidth: 1),FlDotData(//设置接触点 轨迹球画笔getDotPainter: (spot, percent, barData, index) =>FlDotCirclePainter(strokeWidth: 1,strokeColor: const Color(0xffF27800),radius: 2,color: Colors.white,),),);}).toList();},touchTooltipData: LineTouchTooltipData(tooltipBgColor:Colors.black26),touchCallback: (FlTouchEvent event,LineTouchResponse response){if(event!= null){bool isInteractions = event.isInterestedForInteractions; //手指是否和图表交互(手指和图标交互时隐藏默认显示的点的指示线和轨迹球,手指离开时则隐藏)setState(() {_showSpotLine = !isInteractions;});}if(response != null){TouchLineBarSpot touchLineBarSpot = response?.lineBarSpots?.first;int spotIndex = touchLineBarSpot?.spotIndex;LineChartBarData lineChartBarData = touchLineBarSpot?.bar;if(lineChartBarData != null && spotIndex != null){FlSpot flSpot = lineChartBarData.spots[spotIndex];// print('spotIndex= ${touchLineBarSpot?.spotIndex}'); //接触的是折线的第几个圆点// print('barIndex= ${touchLineBarSpot?.barIndex}'); //接触的是第几条折线// print('flSpot.x= ${flSpot?.x}');print('flSpot.y= ${flSpot?.y}');// print('spotIndex= ${touchLineBarSpot?.props}');}}}));}Widget bottomTitleWidgets(double value, TitleMeta meta) {TextStyle style = TextStyle(fontWeight: FontWeight.w600,fontSize: 22.sp,);Widget text;switch (value.toInt()) {case 0:text = Text('10.25', style: style);break;case 2:text = Text(' 10.26 ', style: style);break;case 4:text = Text(' 10.27 ', style: style);break;case 6:text = Text(' 10.28 ', style: style);break;case 8:text = Text(' 10.29 ', style: style);break;case 10:text = Text(' 10.30 ', style: style);break;case 12:text = Text(' 10.31 ', style: style);break;default:text = Text('', style: style);break;}return SideTitleWidget(axisSide: meta.axisSide,child: text,);}Widget leftTitleWidgets(double value, TitleMeta meta) {TextStyle style = TextStyle(fontWeight: FontWeight.w600,fontSize: 22.sp,);String text;switch (value.toInt()) {case 0:text = '0';break;case 1:text = '2';break;case 2:text = '4';break;case 3:text = '6';break;case 4:text = '8';break;case 5:text = '10';break;default:return Container();}return Text(text, style: style, textAlign: TextAlign.center);}
}

切换的选项卡没有绘制。对应的数据和坐标点之间的换算没做,要根据后台给的数据操作,现在这个只是单纯的绘制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/196447.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode—142.环形链表II【中等】

2023每日刷题&#xff08;三十三&#xff09; Leetcode—142.环形链表II 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode *detectCycle(struct ListNode *head) {struct ListNode* …

Stable Diffusion - StableDiffusion WebUI 软件升级与扩展兼容

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/134463035 目前&#xff0c;StableDiffusion WebUI 的版本是 1.6.0&#xff0c;同步更新 controlnet、tagcomplete、roop、easy-prompt-selector等…

vmware安装MacOS以及flutter遇到的问题

安装过程&#xff1a;参考下面的文章 链接&#xff1a; 虚拟机VMware安装苹果系统macOS&#xff0c;超级详细教程&#xff0c;附文件下载&#xff0c;真教程&#xff01;&#xff01; 无限重启情况&#xff1a; &#xff08;二&#xff09; 配置虚拟机找到你的虚拟机安装文件…

Vite -静态资源处理 - SVG格式的图片

特点 Vite 对静态资源是开箱即用的。 无需做特殊的配置。项目案例 项目结构 study-vite| -- src| -- assets| -- bbb.svg # 静态的svg图片资源| -- index.html # 主页面| -- main.js # 引入静态资源| -- package.json # 脚本配置| -- vite.co…

景联文科技入选量子位智库《中国AIGC数据标注产业全景报告》数据标注行业代表机构

量子位智库《中国AIGC数据标注产业全景报告》中指出&#xff0c;数据标注处于重新洗牌时期&#xff0c;更高质量、专业化的数据标注成为刚需。未来五年&#xff0c;国内AI基础数据服务将达到百亿规模&#xff0c;年复合增长率在27%左右。 基于数据基础设施建设、大模型/AI技术理…

安装应用与免安装应用差异对比

差异 安装的程序和免安装的应用程序之间有以下几个方面的差别&#xff1a; 安装过程&#xff1a;安装的程序需要通过一个安装程序或安装脚本进行安装。这个过程通常会将应用程序的文件和依赖项复制到指定的目录&#xff0c;并进行一些配置和注册操作。免安装的应用程序则不需要…

Apache Airflow (八) :DAG任务依赖设置

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…

nginx学习(1)

一、下载安装NGINX&#xff1a; 先安装gcc-c编译器 yum install gcc-c yum install -y openssl openssl-devel&#xff08;1&#xff09;下载pcre-8.3.7.tar.gz 直接访问&#xff1a;http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz&#xff0c;就…

【Windows 开发环境配置——NVIDIA 篇】CUDA、cuDNN、TensorRT 三件套安装

CUDA 从CUDA Toolkit Archive下载相应版本的离线安装包&#xff0c;这里以11.7为例。 打开安装包&#xff0c;在安装选项选择自定义模式&#xff0c;点击下一步。 在自定义安装选项中&#xff0c;仅选择CUDA组件&#xff08;其中Nsight相关组件用于代码调试与性能分析&#xff…

JVM bash:jmap:未找到命令 解决

如果我们在使用JVM的jmap命令时遇到了"bash: jmap: 未找到命令"的错误&#xff0c;这可能是因为jmap命令没有在系统的可执行路径中。 要解决这个问题&#xff0c;可以尝试以下几种方法&#xff1a; 1. 检查Java安装&#xff1a;确保您已正确安装了Java Development …

stable diffusion十七种controlnet详细使用方法总结

个人网站&#xff1a;https://tianfeng.space 前言 最近不知道发点什么&#xff0c;做个controlnet 使用方法总结好了&#xff0c;如果你们对所有controlnet用法&#xff0c;可能了解但是有点模糊&#xff0c;希望能对你们有用。 一、SD controlnet 我统一下其他参数&#…

大数据可视化是什么?

大数据可视化是将海量数据通过视觉方式呈现出来&#xff0c;以便于人们理解和分析数据的过程。它可以帮人们发现数据之间的关系、趋势和模式&#xff0c;并制定更明智的决策。大数据可视化通常通过图形、图表、地图和仪表盘等视觉元素来呈现数据。这些元素具有直观、易理解的特…

【Proteus仿真】【51单片机】拔河游戏设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用按键、LED、动态数码管模块等。 主要功能&#xff1a; 系统运行后&#xff0c;指示灯处于中间位置&#xff0c;数码管显示得分0&#xff0c;当按下…

RT-DETR算法优化改进:Inner-IoU基于辅助边框的IoU损失,高效结合 GIoU, DIoU, CIoU,SIoU 等 | 2023.11

本文改进:Inner-IoU引入尺度因子 ratio 控制辅助边框的尺度大小用于计算损失,并与现有的基于 IoU ( GIoU, DIoU, CIoU,SIoU )损失进行有效结合 推荐指数:5颗星 新颖指数:5颗星 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/category_12497375…

可逆矩阵的性质

如果矩阵A可逆&#xff0c;那么它的逆矩阵也可逆&#xff0c;并且如果矩阵A可逆&#xff0c;假设是一个不为0的数&#xff0c;那么也可逆&#xff0c;并且如果矩阵A和都可逆&#xff0c;而且它们的阶数也相同&#xff0c;那么它们的乘积也是可逆的&#xff0c;并且如果矩阵A可逆…

腾讯云轻量级服务器和云服务器什么区别?轻量服务器是干什么用的

随着互联网的迅速发展&#xff0c;服务器成为了许多人必备的工具。然而&#xff0c;面对众多的服务器选择&#xff0c;我们常常会陷入纠结之中。在这篇文章中&#xff0c;我们将探讨轻量服务器和标准云服务器的区别&#xff0c;帮助您选择最适合自己需求的服务器。 腾讯云双十…

软件工程师参加技术峰会,带来的价值,你想象不到!

参加技术大会是软件开发人员了解行业最新技术和未来发展趋势的重要途径。 在技术大会上&#xff0c;来自世界各地的专家、学者和企业代表会分享他们的最新研究成果、技术创新和趋势分析。这对于软件开发人员来说&#xff0c;是一个宝贵的学习机会&#xff0c;可以帮助他们拓宽…

树莓派Ubuntu20.04设置静态IP后无法联网的问题及解决

一、问题描述 在使用虚拟机进行ssh远程连接时&#xff0c;需要知道目标机Ubuntu系统的用户名和IP地址&#xff0c;若IP地址是动态的&#xff0c;则每次远程连接前都需要接上显示器查看IP信息&#xff0c;很繁琐&#xff0c;所以需要设置静态的IP。 二、设置步骤 首先&#x…

深入了解Java 8 新特性:lambda表达式进阶

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概7000多字&#xff0c;预计阅读时间长需要10分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&#…