Updating the function through provider in flutter

727 views Asked by At

I am adding an event in the calendar in a map,
Map<DateTime, List<EventStore>> _events ={};

Now When any date is selected in the calendar I want the events to show in the calendar, but In my case whenever any date is selected it does not show the event immediately but after reloading the app.
I have tried this for showing the events when any date is selected,
Down here is the sample code.

calender_and_event.dart

import 'package:conceptualschoolapp/Screens/Model/event_modifier.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:table_calendar/table_calendar.dart';

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  CalendarController _controller;

  @override
  void initState() {
    super.initState();
    _controller = CalendarController();
  }

  EventModifier eventModifierProvider;
  @override
  Widget build(BuildContext context) {
    eventModifierProvider = Provider.of<EventModifier>(context, listen: false);

    return Scaffold(
      body: SingleChildScrollView(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TableCalendar(
              onDaySelected: eventModifierProvider.whenSelectedDay,
            ),
            GestureDetector(
              onTap: () {
                _showAddDialog();
              },
            )
          ],
        ),
      ),
    );
  }

  _showAddDialog() async {
    await showDialog(
      context: context,
      builder: (context) => FlatButton(
        onPressed: eventModifierProvider.settingTheValue(
            controller: _controller.selectedDay),
      ),
    );
  }
}

on provider

  settingTheValue({controller}){
    selectedEvents =events[controller];
    notifyListeners();
  }
  whenSelectedDay(_date,_event){
    selectedEvents = _event.cast<EventStore>();
    notifyListeners();
  }

It feels as if I have done any mistake in working with parameters. I have tried using Date and event of onSelectedDay like above.
Here is the github repo of this, github repo
How can I show the events when any date is selected immediatly?

1

There are 1 answers

4
cas On

It looks like you are not adding the selected events to the TableCalendar widget. in your case this would be:

TableCalendar(
    events: eventModifierProvider.selectedEvents,
),