0

我观看了一个关于 Syncfusion 日历的视频,虽然它作为一个独立的小部件工作,但当我们尝试为我们的应用程序实现它时,它就无法正常工作。它给我们带来了一个空白屏幕或 Appbar 和 FloatingActionButton 只出现。我怎样才能让它可见?

请注意,我们没有将此小部件作为主页,并且必须可以从仪表板本身访问。

class CalendarTeacherPage extends StatefulWidget {
  const CalendarTeacherPage({Key? key}) : super(key: key);

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

class _CalendarTeacherPageState extends State<CalendarTeacherPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(child: const CalendarWidget()),
      appBar: AppBar(
        title: const Text('Calendar'),
        centerTitle: true,
      ),
      floatingActionButton: FloatingActionButton(
        child: const Icon(Icons.add, color: Colors.white),
        backgroundColor: Colors.red,
        onPressed: () => Navigator.of(context).push(
          MaterialPageRoute(builder: (context) => const EventEditingPage()),
        ),
      ),
    );
  }
}

这个是为我们的 CalendarWidget 准备的,我们认为它存在错误。

class CalendarWidget extends StatelessWidget {
  const CalendarWidget({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final events = Provider.of<EventProvider>(context).events;

    return SfCalendar(
      view: CalendarView.schedule,
      dataSource: EventDataSource(events),
      initialSelectedDate: DateTime.now(),
      cellBorderColor: Colors.transparent,
      onLongPress: (details) {
        final provider = Provider.of<EventProvider>(context, listen: true);

        provider.setDate(details.date!);
        showModalBottomSheet(
          context: context,
          builder: (context) => const TasksWidget(),
        );
      },
    );
  }
}

将此代码从作为主要小部件的 SfCalendar 迁移到它作为我们仪表板的一部分已被证明是困难的,我只知道问题出在 SfCalendar 中以及我将其放置在哪里。我该如何解决?

4

2 回答 2

1

根据代码片段,我们检查了上述问题“<strong>Calendar not rendering”,它工作正常,正如我们预期的那样。我们附上了相同的代码片段。

代码片段:

import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_calendar/calendar.dart';

void main() {
  return runApp(const Calendar());
}

class Calendar extends StatefulWidget {
  const Calendar({Key? key}) : super(key: key);

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

class CalendarState
    extends State<Calendar> {



  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
          floatingActionButton: FloatingActionButton(
            child: const Icon(Icons.add),
            onPressed: () {},
          ),
          appBar: AppBar(
            title: const Text('text'),
          ),
          body: const CalendarPage()),
    );
  }
}

class CalendarPage extends StatelessWidget {
  const CalendarPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return SfCalendar();
  }
}
于 2021-11-24T07:17:18.497 回答
0

我意识到我在应用程序中遗漏了一些东西,那就是 ChangeNotifier。通过将代码更改为...

class CalendarTeacher extends StatefulWidget {
  const CalendarTeacher({Key? key}) : super(key: key);

  @override
  State<CalendarTeacher> createState() => _CalendarTeacher();
}

class _CalendarTeacher extends State<CalendarTeacher> {
  @override
  Widget build(BuildContext context) => ChangeNotifierProvider(
        create: (context) => EventProvider(),
        child: Scaffold(
          appBar: AppBar(
            title: const Text("Calendar"),
            centerTitle: true,
          ),
          body: CalendarWidget(),
          floatingActionButton: FloatingActionButton(
            child: Icon(Icons.add, color: Colors.white),
            backgroundColor: Colors.red,
            onPressed: () => Navigator.of(context).push(
              MaterialPageRoute(builder: (context) => const EventEditingPage()),
            ),
          ),
        ),
      );
}

从某种意义上说,我完全忘记了 EventProvider,所以现在一切都很好!

于 2021-11-26T08:52:56.380 回答