Calendar recurrence widget

Hello i am developing a task manager app using the sfcalendar, and i want to know if it´s possible to set recurrence appointment where every recurrence can a have a diffrent start and end time.
Thanks in advance

8 Replies 1 reply marked as answer

SS SaiGanesh Sakthivel Syncfusion Team April 12, 2021 03:50 AM UTC

Hi Andrew,

Thank you for contacting syncfusion support.

#Regarding Calendar Recurrence widget
 
We have checked your query and the requirement is not clear, can you provide additional information about your requirement. Please refer below for appointments and recurrence in SfCalendar 
 
 
 
We hope that this helps you. Please let us know if you need further assistance. 
 
Regards,
SaiGanesh Sakthivel
 



IR Indumathi Ravichandran Syncfusion Team April 13, 2021 11:02 AM UTC

Hi Andrew, 
 
Thank you for the update. 
 
We have logged the feature request for “Providing id and recurrence id support for appointments in the Flutter Event Calendar (SfCalendar)” and using this feature you can achieve your requirement. We will implement this feature in our upcoming 2021 Volume 1 SP release, which is expected to be rolled out by mid of May 2021 and let you know once the release rolled out. We appreciate your patience until then. 
 
Now you can track the current status of this bug report by using the below feedback link.  
 
Feedback link: 
 
We hope that this helps you. Please let us know if you need further assistance. 
 
Regards, 
Indumathi R 



AE Andrew Ebare April 13, 2021 11:06 AM UTC

First of all thanks for your help

I am building a task manager for some companies. the move from one place to another every day to do their  jobs, but every week they go to the same places and repeat the job, in this case cleaning every week they clean the same places but they don´t always start at the same time.

i want them not only to create recurring appointement, but to be able to state when they started the job and when it was finished every week.

So my question is , How can i edit just a single day of the recurrence appointment and put it back in the recurrence? my first guess was to take the selected day out of the recurrence pattern, edit it and insert it in the selected day Index. but some how the recurrence changes entirely.




AE Andrew Ebare April 14, 2021 12:50 PM UTC

Thanks for fixing that problem, 
 
And i am having some problems uploading the appointment from the custom appointment editor into firestore, and then render the appointment from firestore into my home widget where i have the sfcalendar.

can you please help me on that? especially retrieving the appoitments, i really don´t know how to proceed on that 
thanks in advance.



IR Indumathi Ravichandran Syncfusion Team April 15, 2021 11:59 AM UTC

Hi Andrew, 
 
Thank you for the update. 
 
Regarding Query: Render the appointment from firestore into my home widget where i have the sfcalendar. 
 
We have a KB document for render the appointment from the Firestore to SfCalendar widget. Also using this KB document you can add the appointment to Firebase database.  Please find the KB from the following link. 
 
 
We hope that this helps you. Please let us know if you need further assistance. 
 
Regards, 
Indumathi R  



AE Andrew Ebare April 20, 2021 02:26 PM UTC

Hello i recieved an email saying that the recurrence issue have been solved but i still don't know how to implement the solucion, how can i use the recurrenceid property?

regards


AE Andrew Ebare April 20, 2021 02:57 PM UTC

I have seen the implementation of reading information from firebase but i still don't know how to add the information to the calendar.

This is my code:
class _HomepageState extends State<Homepage> {
 final FirebaseAuth _auth =FirebaseAuth.instance;
  
 bool isloggedin = false;
  User user;
  List<Meeting> appointments;
 DocumentReference companyid;
 String email= "";
 String name = "-";
 dynamic data;
 DateTime selectedDate;
 
void initState() {
 getDataFromDatabase();
}
//Here i am getting the list of meetings i stored in cloud firestore
 getDataFromDatabase()async{
   await databaseReference.collection("companies")
    .doc(company)
    .collection("tasks")
    .get()
    .then((QuerySnapshot querySnapshot) => {
       querySnapshot.docs.forEach((doc) {
         var showData = doc.data();
         Map<dynamicdynamic> values = showData;
         List<dynamic> key = values.keys.toList();
         if (values != null) {
        for (int i = 0; i < key.length; i++) {
          ///////////////
         String fromwhen= data["from"];
         String towhen = data["to"];
          data = values[key[i]];
          meetings = <Meeting>[];
           meetings.add(Meeting(
           eventName: data["name"],
           street: data["street"],
           from: DateFormat('dd/MM/yyyy HH:mm:ss').parse(fromwhen),
           to: DateFormat('dd/MM/yyyy HH:mm:ss').parse(towhen),
           isAllDay: data["isAllDay"], 

         ));
        }
       }})
    });
  
 }
   
     

  @override
  Widget build([BuildContext context]) {

   return Scaffold(
     
      body: Container(
           
            child:  getEventCalendar( _events, calendarTapped)),

    );
  }


     SfCalendar getEventCalendar(
      [
      CalendarDataSource _calendarDataSource,
      CalendarTapCallback calendarTapCallback]) {
        
    return SfCalendar(
        view: CalendarView.month,
          allowedViews: <CalendarView>[
                      CalendarView.schedule,
                      CalendarView.month,
                      CalendarView.week
                    ],
        dataSource: _calendarDataSource,
        onTap: calendarTapCallback,
        initialDisplayDate: DateTime(DateTime.now().year, DateTime.now().month,
            DateTime.now().day, 000),
        todayHighlightColor: Colors.lightGreenAccent[700],
        firstDayOfWeek: 1,
        initialSelectedDate: DateTime(DateTime.now().year, DateTime.now().month,
            DateTime.now().day, 000),
        monthViewSettings: MonthViewSettings(
            showAgenda: true,
            agendaItemHeight: 70,
            dayFormat: 'EEE',
          ),
          scheduleViewMonthHeaderBuilder: scheduleViewHeaderBuilder,
           timeSlotViewSettings: TimeSlotViewSettings(
            minimumAppointmentDuration: const Duration(minutes: 60)));
  }

  List<Meeting> _getCalendarDataSource() {

 
_colorCollection = <Color>[];
    _colorCollection.add(const Color(0xFF85461E));
    _colorCollection.add(const Color(0xFFD20100));
    _colorCollection.add(const Color(0xFFFC571D));
    _colorCollection.add(const Color(0xFFFFEB3B));
    _colorCollection.add(const Color(0xFF0F8644));
    _colorCollection.add(const Color(0xFF3D4FB5));
    _colorCollection.add(const Color(0xFF8B1FA9));
    _colorCollection.add(const Color(0xFFFF00FF));


    _colorNames = <String>[];
    _colorNames.add('Braun');
    _colorNames.add('Rot');
    _colorNames.add('Orange');
    _colorNames.add('Gelb');
    _colorNames.add('Grün');
    _colorNames.add('Blau');
    _colorNames.add('Lila');
    _colorNames.add('Pink');


  meetings.add(Meeting(
      id: "2334",
      eventName: "Nube",
      street: "street",
      from: DateTime(202141711),
      to: DateTime(202141712),
      background: _colorCollection[1],
      isAllDay: false,
      
      observation: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.",
      fotoUrl: []
  ));
  meetings.add(Meeting(
      id: "2335",
      eventName: 'Brand',
      street: "Brandstraße",
      from: DateTime(202042010),
      to: DateTime(202042012),
      background: _colorCollection[2],
      isAllDay: true,
      recurrenceRule: 'FREQ=DAILY;INTERVAL=10;',
      observation: "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).",
      fotoUrl: [],
  ));
   meetings.add(Meeting(
      id: "233",
      eventName: 'NewYorker',
      street: "Aquisplaza",
      from: DateTime(202112410),
      to: DateTime(202112412),
      background: _colorCollection[3],
      isAllDay: false,
      recurrenceRule: 'FREQ=WEEKLY;BYDAY=FR;INTERVAL=1;',
      observation: "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).",
      fotoUrl: [],
  ));

  return meetings;
}

}



i don't know I tried passing  another parameter in the body that retrieves the appointment from the database but it didn't work. 

I will really appreciate it if anyone can help me with this



IR Indumathi Ravichandran Syncfusion Team April 21, 2021 12:12 PM UTC

Hi Andrew, 
 
Thank you for the update. 
 
Regarding Query: how can i use the recurrenceid property? 
 
We have logged the feature request for “Providing id and recurrence id support for appointments in the Flutter Event Calendar (SfCalendar)”. We will implement this feature in our upcoming 2021 Volume 2 release, which is expected to be rolled out by end of June 2021 and let you know once the release rolled out. We appreciate your patience until then.  
  
Now you can track the current status of this bug report by using the below feedback link.   
  
Feedback link:  
 
Regarding Query: I have seen the implementation of reading information from firebase but i still don't know how to add the information to the calendar. 
 
We have prepared the sample for load the appointments from firebase and changes are reflected in calendar UI with resources and add the appointments through button click callback and reflect it in Firebase. Please find the sample from the following link. 
 
Sample link: 
 
Refer the following link for create project in firebase and check the changes.  
 
 
Also please find the documentations link for listeners. 
 
 
We hope that this helps you. Please let us know if you need further assistance. 
 
Regards, 
Indumathi R 


Marked as answer
Loader.
Up arrow icon