通过flitter中的提供者更新功能

时间:2020-08-28 04:37:49

标签: flutter calendar flutter-provider state-management

我要在地图的日历中添加一个事件,
Map<DateTime, List<EventStore>> _events ={};

现在,当在日历中选择任何日期时,我希望事件在日历中显示,但是就我而言,无论何时选择任何日期,它都不会立即显示事件,而是在重新加载应用程序之后显示。
我已经尝试过在选择任何日期时显示事件,
下面是示例代码。

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),
      ),
    );
  }
}

在提供者上

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

感觉我在使用参数时好像犯了任何错误。我已经尝试过使用Date的{​​{1}}和event,如上。
这是github repo
的github回购 当立即选择任何日期时如何显示事件?

1 个答案:

答案 0 :(得分:-1)

您似乎没有将所选事件添加到TableCalendar小部件中。在您的情况下,它将是:

TableCalendar(
    events: eventModifierProvider.selectedEvents,
),