Git Product home page Git Product logo

Comments (7)

FernandaMayumi avatar FernandaMayumi commented on July 18, 2024 1

I solved the problem earlier today, here it is:

import 'package:flutter/material.dart';
import 'package:flutter_week_view/flutter_week_view.dart';
import 'package:calendar_app/services/model.dart';
import 'package:calendar_app/services/events.dart';
import 'package:flutter/services.dart';
import 'package:calendar_app/services/day_events.dart';

class Day extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Dia'),
        backgroundColor: Colors.lightBlueAccent,
      ),
      body: _DemoDayView(),
    );
  }
}
class _DemoDayView extends StatefulWidget {
  @override
  __DemoDayViewState createState() => __DemoDayViewState();
}

class __DemoDayViewState extends State<_DemoDayView> {

  Model model = Model();
  List<FlutterWeekViewEvent> events = DayEvents.getDayEvents();
  List _selectedEvents;

  static DateTime now = DateTime.now();
  DateTime date = DateTime(now.year, now.month, now.day);
  Map<DateTime, List> _events = Events.getEvents();

  @override
  void initState() {
    super.initState();

    SystemChrome.setPreferredOrientations([//Disable Screen Rotation Orientation
      DeviceOrientation.portraitUp,
    ]);

    buildEvent();
  }

  void addEvent(FlutterWeekViewEvent event) {
    print(_selectedEvents);
    setState(() => events.add(event));
  }

  void buildEvent() {
    _selectedEvents = _events[date];
    _selectedEvents.map((event) =>
        setState(() => events.add(FlutterWeekViewEvent(
          title: event['name'].toString(),
          description: (event['confirm'])
              ? 'Confirmado'
              : 'Cancelado',
          start: date.add(Duration(hours: int.parse(
              event['time'].toString().substring(
                  0, 2)))),
          end: date.add(Duration(hours: int.parse(
              event['time'].toString().substring(
                  0, 2)) + 2)),
        ),
        ))
    ).toList();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: Row(
          children: <Widget>[
            Expanded(child: buildDay())
          ],
        ),
      ),
    );
  }

  Widget buildDay(){
    DateTime now = DateTime.now();
    return DayView(
      date: now,
      dayBarHeight: 50,
      dayBarBackgroundColor: Colors.white,
      dayBarTextStyle: const TextStyle(fontSize: 30),
      events: events,
    );
  }
}

from flutterweekview.

Skyost avatar Skyost commented on July 18, 2024

You can wrap your DayView or WeekView in a StatefulWidget and then refresh your events using setState.

from flutterweekview.

FernandaMayumi avatar FernandaMayumi commented on July 18, 2024

When I did as you suggested, printed only the first event of the day from a list map. Here's the code:

Widget buildEvent(){

DateTime now = DateTime.now();
DateTime date = DateTime(now.year, now.month, now.day);
_selectedEvents = _events[date];

return Expanded(
    child: Container(
        child:
        ListView(
            shrinkWrap: true,
            children: _selectedEvents.map((event) =>
               Container(
                child: DayView(
                  date: now,
                  inScrollableWidget: true,
                  scrollToCurrentTime: true,
                  events: [
                    FlutterWeekViewEvent(
                      title: event['name'].toString(),
                      description: (event['confirm'])
                          ? 'Confirmado'
                          : 'Cancelado',
                      start: date.add(Duration(hours: int.parse(
                          event['time'].toString().substring(
                              0, 2)))),
                      end: date.add(Duration(hours: int.parse(
                          event['time'].toString().substring(
                              0, 2)) + 2)),
                    ),
                          ],
                          currentTimeCircleColor: Colors.red,
                        ),
                      )
            ) .toList()
        )
    )
);

}

from flutterweekview.

Skyost avatar Skyost commented on July 18, 2024

Please post me your full widget code but if you want an idea of what you can do (untested) :

/// Your state.
class MyWidgetState extends State<MyWidget> {
  /// Events added to the widget.
  List<FlutterWeekView> events = [];

  @override
  Widget build(BuildContext context) => WeekView(
        dates: dates,
        events: events,
      );

  /// Allows to get the dates we need for the WeekView widget.
  List<DateTime> get dates {
    List<DateTime> dates = [];
    for (FlutterWeekView event in events) {
      if (!dates.contains(event.start)) {
        dates.add(event.start);
      }

      if (!dates.contains(event.end)) {
        dates.add(event.end);
      }
    }

    return dates;
  }

  /// Adds an event to the list.
  void addEvent(WeekViewEvent event) {
    setState(() => events.add(event));
  }

  /// Removes an event from the list.
  void removeEvent(WeekViewEvent event) {
    setState(() => events.remove(event));
  }
}

Swap on the left or on the right to see other days.

from flutterweekview.

FernandaMayumi avatar FernandaMayumi commented on July 18, 2024

This code prints one event per day in multiple screens, instead of prints all events of the day in one screen. here's the code:

events.dart

class Events {
  static Map<DateTime, List> getEvents() {
    return {
      DateTime(2020, 2, 5): [
        {
          'name': 'Alex',
          'time': '08:00',
          'confirm': true},
      ],
DateTime(2020, 2, 6): [
        {'name': 'Ana', 'time': '08:00', 'confirm': true},
        {'name': 'Alan', 'time': '17:00', 'confirm': false},
      ]
}}}

day.dart

import 'package:flutter/material.dart';
import 'package:flutter_week_view/flutter_week_view.dart';
import 'package:calendar_app/services/model.dart';
import 'package:calendar_app/services/events.dart';
import 'package:flutter/services.dart';

class Day extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('day'),
      ),
      body: _DemoDayView(),
    );
  }
}
class _DemoDayView extends StatefulWidget {
  @override
  __DemoDayViewState createState() => __DemoDayViewState();
}

class __DemoDayViewState extends State<_DemoDayView> {

  Map<DateTime, List> _events = Events.getEvents();
  List _selectedEvents;

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      body: Row(
        children: <Widget>[
          buildEvent()
        ],
      ),
    );
  }

  Widget buildEvent(){

    DateTime now = DateTime.now();
    DateTime date = DateTime(now.year, now.month, now.day);
    _selectedEvents = _events[date];
    return Expanded(
        child: Container(
            child:
            ListView(
                shrinkWrap: true,
                children: _selectedEvents.map((event) =>
                   Container(
                    child: DayView(
                      date: now,
                      inScrollableWidget: true,
                      scrollToCurrentTime: true,
                      events: [
                        FlutterWeekViewEvent(
                          title: event['name'].toString(),
                          description: (event['confirm'])
                              ? 'Confirmado'
                              : 'Cancelado',
                          start: date.add(Duration(hours: int.parse(
                              event['time'].toString().substring(
                                  0, 2)))),
                          end: date.add(Duration(hours: int.parse(
                              event['time'].toString().substring(
                                  0, 2)) + 2)),
                        ),
                              ],
                              currentTimeCircleColor: Colors.red,
                            ),
                          )
                ) .toList()
            )
        )
    );
  }
}

from flutterweekview.

Skyost avatar Skyost commented on July 18, 2024

Oops, haven't tested it, nevermind. You should check only the year / month / day (instead of year / month / day / hour / minute). Something like this should work :

/// Your state.
class MyWidgetState extends State<MyWidget> {
  /// Events added to the widget.
  List<FlutterWeekView> events = [];

  @override
  Widget build(BuildContext context) => WeekView(
        dates: dates,
        events: events,
      );

  /// Allows to get the dates we need for the WeekView widget.
  List<DateTime> get dates {
    List<DateTime> dates = [];
    for (FlutterWeekView event in events) {
      DateTime start = dayMonthYear(event.start);
      DateTime end = dayMonthYear(event.end);
      if (!dates.contains(start)) {
        dates.add(start);
      }

      if (!dates.contains(end)) {
        dates.add(end);
      }
    }

    return dates;
  }

  /// Adds an event to the list.
  void addEvent(WeekViewEvent event) {
    setState(() => events.add(event));
  }

  /// Removes an event from the list.
  void removeEvent(WeekViewEvent event) {
    setState(() => events.remove(event));
  }

  /// Truncates the given date.
  DateTime dayMonthYear(DateTime date) => DateTime(date.year, date.month, date.day);
}

But you're not even using setState in your code ?

from flutterweekview.

Skyost avatar Skyost commented on July 18, 2024

Cool !

from flutterweekview.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.