timeline_widget 1.0.2 timeline_widget: ^1.0.2 copied to clipboard
Want to create beautiful timeline views in three formats (left, right, center) with customizable image, widgets, color, constraints etc? This timeline_widget pub is all you need!
timeline_widget #
Want to create beautiful timeline views in three formats (left, right, center) with customizable image, widgets, color, constraints etc? This timeline_widget pub is all you need!
Screenshots #
Usage #
To use this package :
- add the dependency to your [pubspec.yaml] file.
dependencies:
flutter:
sdk: flutter
timeline_widget:
How to use #
Left Aligned TimelineView
TimelineView(
align: TimelineAlign.leftAlign,
lineWidth: 4,
lineColor: Colors.deepOrange,
imageBorderColor: Colors.deepOrange,
image: [
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/pre-breakfast-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/breakfast-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/pre-lunch-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/lunch-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/evening-snack-image.png")),
Container(
padding: EdgeInsets.all(20),
child: Image.asset("assets/dinner-image.png")),
],
height: 150,
width: MediaQuery.of(context).size.width,
imageHeight: 50,
children: [
Container(
margin: EdgeInsets.fromLTRB(0, 0, 20, 0),
child: _widgetWeather(20, 71, 31)),
Container(
margin: EdgeInsets.fromLTRB(0, 0, 20, 0),
child: _widgetWeather(15, 75, 55)),
Container(
margin: EdgeInsets.fromLTRB(0, 0, 20, 0),
child: _widgetWeather(25, 73, 30)),
Container(
margin: EdgeInsets.fromLTRB(0, 0, 20, 0),
child: _widgetWeather(22, 65, 35)),
Container(
margin: EdgeInsets.fromLTRB(0, 0, 20, 0),
child: _widgetWeather(21, 55, 32)),
Container(
margin: EdgeInsets.fromLTRB(0, 0, 20, 0),
child: _widgetWeather(20, 65, 35)),
],
),
Centered TimelineView
TimelineViewCenter(
horizontalAxisAlignment: MainAxisAlignment.spaceEvenly,
lineWidth: 4,
lineColor: Colors.deepOrange,
imageBorderColor: Colors.deepOrange,
image: [
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/pre-breakfast-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/breakfast-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/pre-lunch-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/lunch-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/evening-snack-image.png")),
Container(
padding: EdgeInsets.all(20),
child: Image.asset("assets/dinner-image.png")),
],
height: 150,
width: MediaQuery.of(context).size.width,
imageHeight: 50,
rightChildren: [
_widgetWeather(20, 71, 31),
_widgetWeather(15, 75, 55),
_widgetWeather(25, 73, 30),
_widgetWeather(22, 65, 35),
_widgetWeather(21, 55, 32),
_widgetWeather(20, 65, 35),
],
leftChildren: [
Container(
color: Colors.deepOrangeAccent,
margin: EdgeInsets.fromLTRB(0, 10, 0, 0),
padding: EdgeInsets.all(5),
child: Text(
'Dawn',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
),
Container(
color: Colors.deepOrangeAccent,
margin: EdgeInsets.fromLTRB(0, 10, 0, 0),
padding: EdgeInsets.all(5),
child: Text(
'Morning',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
),
Container(
color: Colors.deepOrangeAccent,
margin: EdgeInsets.fromLTRB(0, 10, 0, 0),
padding: EdgeInsets.all(5),
child: Text(
'Noon',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
),
Container(
color: Colors.deepOrangeAccent,
margin: EdgeInsets.fromLTRB(0, 10, 0, 0),
padding: EdgeInsets.all(5),
child: Text(
'Afternoon',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
),
Container(
color: Colors.deepOrangeAccent,
margin: EdgeInsets.fromLTRB(0, 10, 0, 0),
padding: EdgeInsets.all(5),
child: Text(
'Evening',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
),
Container(
color: Colors.deepOrangeAccent,
margin: EdgeInsets.fromLTRB(0, 10, 0, 0),
padding: EdgeInsets.all(5),
child: Text(
'Dusk',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
),
],
),
Right Aligned TimelineView
TimelineView(
align: TimelineAlign.rightAlign,
lineWidth: 4,
lineColor: Colors.deepOrange,
imageBorderColor: Colors.deepOrange,
image: [
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/pre-breakfast-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/breakfast-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/pre-lunch-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/lunch-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/evening-snack-image.png")),
Container(
padding: EdgeInsets.all(20),
child: Image.asset("assets/dinner-image.png")),
],
height: 150,
width: MediaQuery.of(context).size.width,
imageHeight: 50,
children: [
Container(
margin: EdgeInsets.fromLTRB(20, 0, 0, 0),
child: _widgetWeather(20, 71, 31)),
Container(
margin: EdgeInsets.fromLTRB(20, 0, 0, 0),
child: _widgetWeather(15, 75, 55)),
Container(
margin: EdgeInsets.fromLTRB(20, 0, 0, 0),
child: _widgetWeather(25, 73, 30)),
Container(
margin: EdgeInsets.fromLTRB(20, 0, 0, 0),
child: _widgetWeather(22, 65, 35)),
Container(
margin: EdgeInsets.fromLTRB(20, 0, 0, 0),
child: _widgetWeather(21, 55, 32)),
Container(
margin: EdgeInsets.fromLTRB(20, 0, 0, 0),
child: _widgetWeather(20, 65, 35)),
],
),
License #
Copyright 2020 Jay Mehta and Vaidehi Vatsaraj
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Getting Started #
This project is a starting point for a Dart package, a library module containing code that can be shared easily across multiple Flutter or Dart projects.
For help getting started with Flutter, view our online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.
Example #
As time based...
import 'package:flutter/material.dart';
import 'package:timeline_widget/timeline_widget.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Timeline Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.deepOrange,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Timeline Demo Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 3,
child: Scaffold(
appBar: AppBar(
bottom: TabBar(
tabs: [
Tab(icon: Icon(Icons.arrow_forward)),
Tab(icon: Icon(Icons.arrow_downward)),
Tab(icon: Icon(Icons.arrow_back)),
],
),
title: Text(widget.title),
),
body: Container(
color: Color.fromARGB(255, 111, 0, 255),
child: TabBarView(
children: [
_timelineviewRight(),
_timelineviewCenter(),
_timelineviewLeft(),
],
),
)),
);
}
Widget _timelineviewLeft() {
return Container(
padding: EdgeInsets.fromLTRB(0, 0, 30, 0),
child: TimelineView(
align: TimelineAlign.leftAlign,
lineWidth: 4,
lineColor: Colors.deepOrange,
imageBorderColor: Colors.deepOrange,
image: [
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/pre-breakfast-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/breakfast-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/pre-lunch-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/lunch-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/evening-snack-image.png")),
Container(
padding: EdgeInsets.all(20),
child: Image.asset("assets/dinner-image.png")),
],
height: 150,
width: MediaQuery.of(context).size.width,
imageHeight: 50,
children: [
Container(
margin: EdgeInsets.fromLTRB(0, 0, 20, 0),
child: _widgetWeather(20, 71, 31)),
Container(
margin: EdgeInsets.fromLTRB(0, 0, 20, 0),
child: _widgetWeather(15, 75, 55)),
Container(
margin: EdgeInsets.fromLTRB(0, 0, 20, 0),
child: _widgetWeather(25, 73, 30)),
Container(
margin: EdgeInsets.fromLTRB(0, 0, 20, 0),
child: _widgetWeather(22, 65, 35)),
Container(
margin: EdgeInsets.fromLTRB(0, 0, 20, 0),
child: _widgetWeather(21, 55, 32)),
Container(
margin: EdgeInsets.fromLTRB(0, 0, 20, 0),
child: _widgetWeather(20, 65, 35)),
],
),
);
}
Widget _timelineviewRight() {
return Container(
padding: EdgeInsets.fromLTRB(30, 0, 0, 0),
child: TimelineView(
align: TimelineAlign.rightAlign,
lineWidth: 4,
lineColor: Colors.deepOrange,
imageBorderColor: Colors.deepOrange,
image: [
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/pre-breakfast-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/breakfast-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/pre-lunch-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/lunch-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/evening-snack-image.png")),
Container(
padding: EdgeInsets.all(20),
child: Image.asset("assets/dinner-image.png")),
],
height: 150,
width: MediaQuery.of(context).size.width,
imageHeight: 50,
children: [
Container(
margin: EdgeInsets.fromLTRB(20, 0, 0, 0),
child: _widgetWeather(20, 71, 31)),
Container(
margin: EdgeInsets.fromLTRB(20, 0, 0, 0),
child: _widgetWeather(15, 75, 55)),
Container(
margin: EdgeInsets.fromLTRB(20, 0, 0, 0),
child: _widgetWeather(25, 73, 30)),
Container(
margin: EdgeInsets.fromLTRB(20, 0, 0, 0),
child: _widgetWeather(22, 65, 35)),
Container(
margin: EdgeInsets.fromLTRB(20, 0, 0, 0),
child: _widgetWeather(21, 55, 32)),
Container(
margin: EdgeInsets.fromLTRB(20, 0, 0, 0),
child: _widgetWeather(20, 65, 35)),
],
),
);
}
Widget _timelineviewCenter() {
return TimelineViewCenter(
horizontalAxisAlignment: MainAxisAlignment.spaceEvenly,
lineWidth: 4,
lineColor: Colors.deepOrange,
imageBorderColor: Colors.deepOrange,
image: [
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/pre-breakfast-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/breakfast-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/pre-lunch-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/lunch-image.png")),
Container(
padding: EdgeInsets.all(15),
child: Image.asset("assets/evening-snack-image.png")),
Container(
padding: EdgeInsets.all(20),
child: Image.asset("assets/dinner-image.png")),
],
height: 150,
width: MediaQuery.of(context).size.width,
imageHeight: 50,
rightChildren: [
_widgetWeather(20, 71, 31),
_widgetWeather(15, 75, 55),
_widgetWeather(25, 73, 30),
_widgetWeather(22, 65, 35),
_widgetWeather(21, 55, 32),
_widgetWeather(20, 65, 35),
],
leftChildren: [
Container(
color: Colors.deepOrangeAccent,
margin: EdgeInsets.fromLTRB(0, 10, 0, 0),
padding: EdgeInsets.all(5),
child: Text(
'Dawn',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
),
Container(
color: Colors.deepOrangeAccent,
margin: EdgeInsets.fromLTRB(0, 10, 0, 0),
padding: EdgeInsets.all(5),
child: Text(
'Morning',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
),
Container(
color: Colors.deepOrangeAccent,
margin: EdgeInsets.fromLTRB(0, 10, 0, 0),
padding: EdgeInsets.all(5),
child: Text(
'Noon',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
),
Container(
color: Colors.deepOrangeAccent,
margin: EdgeInsets.fromLTRB(0, 10, 0, 0),
padding: EdgeInsets.all(5),
child: Text(
'Afternoon',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
),
Container(
color: Colors.deepOrangeAccent,
margin: EdgeInsets.fromLTRB(0, 10, 0, 0),
padding: EdgeInsets.all(5),
child: Text(
'Evening',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
),
Container(
color: Colors.deepOrangeAccent,
margin: EdgeInsets.fromLTRB(0, 10, 0, 0),
padding: EdgeInsets.all(5),
child: Text(
'Dusk',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
),
],
);
}
Widget _widgetWeather(int temp, int humidity, int wind) {
return Container(
constraints: BoxConstraints(
minHeight: MediaQuery.of(context).size.height * 0.25,
),
margin: EdgeInsets.all(20),
padding: EdgeInsets.fromLTRB(20, 10, 20, 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10.0),
boxShadow: [
BoxShadow(
color: Colors.grey,
spreadRadius: 1.0,
blurRadius: 30.0,
),
],
),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Text(
"Degrees: $temp°C",
maxLines: 2,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.center,
),
Text(
"Humidity: $humidity%",
maxLines: 2,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.center,
),
Text(
"Wind: $wind/h",
maxLines: 2,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.center,
)
],
),
);
}
}