simple_timetable 0.0.6 copy "simple_timetable: ^0.0.6" to clipboard
simple_timetable: ^0.0.6 copied to clipboard

outdated

Simple timetable

example/lib/main.dart

import 'dart:convert';
import 'package:example/models/event.dart';
import 'package:example/models/table_query.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:simple_timetable/simple_timetable.dart';
import 'package:intl/intl.dart';
import 'package:dart_date/dart_date.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Simple timetable',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  DateTime _month = DateTime.now();
  DateTime _initDate = DateTime.now();
  List<Event<TimeTableEvent>> _events = [];

  @override
  void initState() {
    super.initState();
    TableQuery query = getQuery();
    getData(query);
  }

  Future<List<TimeTableEvent>> _getTimetable([String query]) async {
    var dataString = await rootBundle.loadString('assets/data.json');
    var data = json.decode(dataString);
    List<TimeTableEvent> _events = (data['events'] as List)
        .map((item) => TimeTableEvent.fromJson(item))
        .toList();
    return _events;
  }

  void getData(TableQuery query) async {
    List<TimeTableEvent> data = await _getTimetable(query.params);
    List<Event<TimeTableEvent>> _data = data
        .map((item) => Event<TimeTableEvent>(
              date: item.startDate,
              start: Date.parse(item.data.eventStart),
              end: Date.parse(item.data.eventEnd),
              payload: item,
            ))
        .toList();
    setState(() {
      _events.addAll(_data);
    });
  }

  TableQuery getQuery({DateTime start, DateTime end}) {
    String _pattern = 'yyyy-MM-dd';
    DateTime _start = start ?? Date.startOfToday;
    DateTime _end = end ?? _start.addDays(6);
    String _startString = DateFormat(_pattern).format(_start);
    String _endString = DateFormat(_pattern).format(_end);
    String _query = 'start=$_startString&end=$_endString';
    return TableQuery(params: _query, start: _start, end: _end);
  }

  _onPressed([DateTime start, DateTime end]) async {
    setState(() {
      _initDate = DateTime.now().addMonths(1);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(_month != null ? '$_month' : '')),
      body: SimpleTimetable(
        onChange: (DateTime date, TimetableDirection dir) {
          print('On change date: $date');
          print('On change direction: $dir');
          setState(() {
            _month = date;
          });
        },
        initialDate: _initDate.startOfDay,
        dayStart: 8,
        dayEnd: 24,
        events: _events,
        buildCard: (Event<TimeTableEvent> event, bool isPast) {
          return GestureDetector(
            onTap: () {
              print(event.payload.data.title);
            },
            child: Container(
              decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(4),
                color: Colors.blue[200],
              ),
              child: Column(
                children: [
                  Text(
                    '$isPast',
                    maxLines: 1,
                  ),
                ],
              ),
            ),
          );
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _onPressed,
      ),
    );
  }
}
23
likes
0
points
83
downloads

Publisher

unverified uploader

Weekly Downloads

Simple timetable

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

dart_date, flutter, intl

More

Packages that depend on simple_timetable