A scrollable time chart in Flutter.

Overview

time_chart

pub package

An amazing time chart in Flutter.

Chart Types

TimeChart AmountChart

Getting Started

1 - Depend on it

Add it to your package's pubspec.yaml file

dependencies:
  time_chart: ^0.1.0-nullsafety.1

2 - Install it

Install packages from the command line

flutter packages get

3 - Usage

Just input your DateTimeRange list to data: argument. The list must be sorted. First data is latest, last data is oldest. And set the ViewMode.

Example

import 'package:flutter/material.dart';
import 'package:time_chart/time_chart.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {

  // Data must be sorted.
  final data = [
    DateTimeRange(
      start: DateTime(2021,2,24,23,15),
      end: DateTime(2021,2,25,7,30),
    ),
    DateTimeRange(
      start: DateTime(2021,2,22,1,55),
      end: DateTime(2021,2,22,9,12),
    ),
    DateTimeRange(
      start: DateTime(2021,2,20,0,25),
      end: DateTime(2021,2,20,7,34),
    ),
    DateTimeRange(
      start: DateTime(2021,2,17,21,23),
      end: DateTime(2021,2,18,4,52),
    ),
    DateTimeRange(
      start: DateTime(2021,2,13,6,32),
      end: DateTime(2021,2,13,13,12),
    ),
    DateTimeRange(
      start: DateTime(2021,2,1,9,32),
      end: DateTime(2021,2,1,15,22),
    ),
    DateTimeRange(
      start: DateTime(2021,1,22,12,10),
      end: DateTime(2021,1,22,16,20),
    ),
  ];

  @override
  Widget build(BuildContext context) {
    final sizedBox = const SizedBox(height: 16);

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Time chart example app')),
        body: SingleChildScrollView(
          child: Padding(
            padding: const EdgeInsets.all(16.0),
            child: Column(
              children: [
                const Text('Weekly time chart'),
                TimeChart(
                  data: data,
                  viewMode: ViewMode.weekly,
                ),
                sizedBox,
                const Text('Monthly time chart'),
                TimeChart(
                  data: data,
                  viewMode: ViewMode.monthly,
                ),
                sizedBox,
                const Text('Weekly amount chart'),
                TimeChart(
                  data: data,
                  chartType: ChartType.amount,
                  viewMode: ViewMode.weekly,
                  barColor: Colors.deepPurple,
                ),
                sizedBox,
                const Text('Monthly amount chart'),
                TimeChart(
                  data: data,
                  chartType: ChartType.amount,
                  viewMode: ViewMode.monthly,
                  barColor: Colors.deepPurple,
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

Supported languages

English Korean

You can also use korean language by Internationalizing Flutter apps.

Comments
  • changing View Mode

    changing View Mode

    When I try to change the ViewMode, errors occur in the design and the data is not displayed correctly, and I tried to add two widget and each of them with a different ViewMode, the same error occurs and the data is not displayed successfully ,

    bug 
    opened by Hesham-Dev-LY 6
  • Chart doesn't display on IOS Emulator(physical phone didn't check)

    Chart doesn't display on IOS Emulator(physical phone didn't check)

    Chart don't work on IOS emulator work on the example presented in README.

    Error Log:

    ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
    The following assertion was thrown building CanvasTouchDetector(dirty, state:
    _CanvasTouchDetectorState#ffa39):
    Incorrect GestureDetector arguments.
    Having both a pan gesture recognizer and a scale gesture recognizer is redundant; scale is a
    superset of pan.
    Just use the scale gesture recognizer.
    
    The relevant error-causing widget was:
      CanvasTouchDetector
      CanvasTouchDetector:file:///Users/shaygettu/development/flutter_sdk/flutter/.pub-cache/hosted/pub.dartlang.org/time_chart-0.3.3/lib/src/chart.dart:470:28
    
    When the exception was thrown, this was the stack:
    #0      new GestureDetector.<anonymous closure> (package:flutter/src/widgets/gesture_detector.dart:245:14)
    #1      new GestureDetector (package:flutter/src/widgets/gesture_detector.dart:263:9)
    #2      _CanvasTouchDetectorState.build (package:touchable/src/canvas_touch_detector.dart:38:16)
    #3      StatefulElement.build (package:flutter/src/widgets/framework.dart:4870:27)
    #4      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4754:15)
    #5      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928:11)
    #6      Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
    #7      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735:5)
    #8      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4919:11)
    #9      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729:5)
    ...     Normal element mounting (91 frames)
    #100    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790:14)
    #101    MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6422:36)
    #102    MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6433:32)
    ...     Normal element mounting (7 frames)
    #109    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790:14)
    #110    MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6422:36)
    #111    MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6433:32)
    ...     Normal element mounting (32 frames)
    #143    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790:14)
    #144    Element.updateChild (package:flutter/src/widgets/framework.dart:3540:18)
    #145    _LayoutBuilderElement._layout.layoutCallback (package:flutter/src/widgets/layout_builder.dart:138:18)
    #146    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2600:19)
    #147    _LayoutBuilderElement._layout (package:flutter/src/widgets/layout_builder.dart:156:12)
    #148    RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1997:59)
    #149    PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:918:15)
    #150    RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1997:14)
    #151    RenderConstrainedLayoutBuilder.rebuildIfNecessary (package:flutter/src/widgets/layout_builder.dart:230:7)
    #152    _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:319:5)
    #153    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #154    ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:56:11)
    #155    RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:829:43)
    #156    RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:931:32)
    #157    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #158    _RenderSingleChildViewport.performLayout (package:flutter/src/widgets/single_child_scroll_view.dart:504:14)
    #159    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #160    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
    #161    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #162    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
    #163    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #164    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
    #165    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #166    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
    #167    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #168    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
    #169    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #170    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
    #171    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #172    ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:56:11)
    #173    RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:896:45)
    #174    RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:931:32)
    #175    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #176    MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:12)
    #177    _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1005:7)
    #178    MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:240:7)
    #179    RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:403:14)
    #180    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #181    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
    #182    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #183    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
    #184    _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1376:11)
    #185    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #186    ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:56:11)
    #187    RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:896:45)
    #188    RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:931:32)
    #189    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #190    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
    #191    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #192    RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:277:14)
    #193    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #194    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
    #195    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #196    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
    #197    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #198    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
    #199    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #200    ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:56:11)
    #201    RenderStack._computeSize (package:flutter/src/rendering/stack.dart:570:43)
    #202    RenderStack.performLayout (package:flutter/src/rendering/stack.dart:597:12)
    #203    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #204    _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:321:14)
    #205    RenderObject.layout (package:flutter/src/rendering/object.dart:1887:7)
    #206    RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
    #207    RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1731:7)
    #208    PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:887:18)
    #209    RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:497:19)
    #210    WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:883:13)
    #211    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:363:5)
    #212    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15)
    #213    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1081:9)
    #214    SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:995:5)
    #218    _invoke (dart:ui/hooks.dart:151:10)
    #219    PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:308:5)
    #220    _drawFrame (dart:ui/hooks.dart:115:31)
    (elided 3 frames from dart:async)
    
    Screen Shot 2022-04-29 at 0 32 14 bug 
    opened by ShaggyGettu 3
  • Resolve overflow and add disabling feature in tooltip

    Resolve overflow and add disabling feature in tooltip

    Hello Developers I am facing this problem (A RenderFlex overflowed by 8.0 pixels on the bottom.).

    Bellow is my code:

    TimeChart(
      data: controller.data,
      chartType: ChartType.amount,
      viewMode: ViewMode.weekly,
      barColor: Color(kPrimaryColor),
      height: Get.width,
      tooltipStart: "Opened",
      tooltipEnd: "Closed",
      tooltipDuration: Duration(seconds: 4),
    ),
    

    snapshot is here: image Kindly handle this issue ASAP and add a param shawTooltip(true/false).

    bug enhancement 
    opened by amjadjamali06 3
  • Failed to Process Time Difference in second

    Failed to Process Time Difference in second

    image

    The data list is reversed or not sorted. Check the data parameter. The first data must be newest data. 'package:time_chart/src/components/utils/time_data_processor.dart': Failed assertion: line 133 pos 16: 'dataList[i - 1].end.isAfter(dataList[i].end)'

    check the record 174 & 175(similar other records) , there is difference in seconds but i m getting the above error.

    invalid 
    opened by satyaprakashksingh 1
  • Update amount chart y labels

    Update amount chart y labels

    Fix #29

    This PR updates y labels of the Amount Chart. After this, it sets always the bottom hour to 0 hours. And it sets the topHour to one of the 4, 8, 12, ..., 24 hours appropriately.

    |before|after| |------|-------| | image | image |

    opened by jja08111 0
  • Limit the Y axis

    Limit the Y axis

    When the maximum amount is high, the Y axis looks like this: Bildschirmfoto 2022-05-26 um 16 05 34

    It would be nice if the steps on the Y axis would be limited, just like in the Apple Health app: IMG_3406

    enhancement 
    opened by UCetinkaya94 0
  • Version 0.3.0

    Version 0.3.0

    Fix #15

    • [Update] Added a defaultPivotHour parameter.
    • [Update] Change to use default value of viewMode.
    • [Bug] Fixed and simplified TimeDataProcessor.
    bug enhancement 
    opened by jja08111 0
Releases(v0.5.2)
Owner
Minseong Kim
Minseong Kim
Sliver bar chart - A package that supports Bar Chart in a Flutter Sliver

Sliver bar chart - A package that supports Bar Chart in a Flutter Sliver. This Package allows us to add Bar Chart in Sliver and sets a Bar Chart as a Header on Slivers Scroll.

MindInventory 19 Oct 11, 2022
A beautiful bezier line chart widget for flutter that is highly interactive and configurable.

Bezier Chart A beautiful bezier line chart widget for flutter that is highly interactive and configurable. Features Multi bezier lines Allow numbers a

Aeyrium 428 Dec 21, 2022
This project is used to introduce the use of flutter canvas, include draw chart, clip image's path and draw progress indicator.

flutter_canvas This project is used to introduce the use of flutter canvas, include draw chart, clip image's path and draw progress indicator. draw ch

YouXianMing 9 Oct 27, 2022
Maybe this is the best k chart in Flutter.Support drag,scale,long press,fling.And easy to use.

k_chart Maybe this is the best k chart in Flutter.Support drag,scale,long press,fling.And easy to use. display image gif Getting Started Install depen

OpenFlutter 342 Jan 9, 2023
Flutter chart library contains depth charts supporting various indicators and zooming

flutter_k_chart 介绍 一个仿火币的flutter图表库包含深度图,支持各种指标及放大缩小、平移等操作 webdemo演示 Demo v0.1.0:下载 APK 演示 简单用例 1.在 pubspec.yaml 中添加依赖 本项目数据来自火币openApi,火币的接口可能需要翻墙,接口

gwh 259 Dec 30, 2022
Animated line chart for flutter

fl_animated_linechart An animated chart library for flutter. Support for datetime axis Multiple y axis, supporting different units Highlight selection

null 51 Sep 25, 2022
Flutter Pie chart with animation

Pie Chart This Flutter package provides a Pie Chart Widget with cool animation. Live Demo: https://apgapg.github.io/pie_chart/ ?? Try LIVE Demo Live D

Ayush P Gupta 161 Dec 24, 2022
Basic radar chart for Flutter

flutter_radar_chart Animated radar chart for Flutter inspired by The Python Graph Gallery (https://python-graph-gallery.com/radar-chart/). Follow the

Dan Panaite 44 Dec 10, 2022
A simple radial chart for Flutter

A simple radial chart for Flutter

null 2 Jun 2, 2022
A simple candlestick chart for flutter. Supports smooth scroll and zoom

simple_candlestick_chart A simple candlestick chart for flutter. Supports smooth

7c00 14 Oct 17, 2022
Flutter heatmap calendar inspired by github contribution chart. [traditional mode / calendar mode]

Flutter Heatmap Flutter heatmap calendar inspired by github contribution chart.

Kim Seung Hwan 1 Dec 26, 2021
📆 Flutter heatmap calendar inspired by github contribution chart.

Flutter Heatmap Calendar Flutter Heatmap Calendar inspired by github contribution chart. Flutter Heatmap Calendar provides traditional contribution ch

Kim Seung Hwan 22 Jan 1, 2023
A powerful 🚀 Android chart view / graph view library, supporting line- bar- pie- radar- bubble- and candlestick charts as well as scaling, panning and animations.

⚡ A powerful & easy to use chart library for Android ⚡ Charts is the iOS version of this library Table of Contents Quick Start Gradle Maven Documentat

Philipp Jahoda 36k Dec 28, 2022
Stores and manages the data of your week expenses with a chart

personal_expenses_app A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you st

null 1 Dec 26, 2021
Charts Library for Flutter, written in Dart with Flutter.

Table of Contents New in the current release Illustration of the new "iterative auto layout" feature Autolayout step 1 Autolayout step 2 Autolayout st

Milan Zimmermann 225 Dec 25, 2022
Animated radial and pie charts for Flutter

Flutter Circular Chart A library for creating animated circular chart widgets with Flutter, inspired by Zero to One with Flutter. Overview Create easi

Victor Choueiri 387 Dec 26, 2022
Beautiful sparkline charts for Flutter

flutter_sparkline Beautiful sparkline charts for Flutter. Installation Install the latest version from pub. Quick Start Import the package, create a S

Victor Choueiri 255 Dec 21, 2022
Elegant OHLC Candlestick and Trade Volume charts for @Flutter

flutter_candlesticks Elegant OHLC Candlestick and Trade Volume charts for Flutter Usage Install for Flutter with pub. Property Description data Requir

Trent Piercy 402 Dec 21, 2022
A Flutter widget to use Apache ECharts (incubating) in a reactive way.

中文 [![pub](https://img.shields.io/pub/v/flutter_echarts.svg)](https://pub.dev/packages/flutter_echarts) A Flutter widget to use Apache ECharts in a re

LIN Chen 629 Dec 29, 2022