Календарь SyncFusion не отображается
Я смотрел видео о Syncfusion Calendar, и хотя он работал как независимый виджет, он никогда не работал, когда мы пытались реализовать его для нашего приложения. Это дает нам либо пустой экран, либо только отображение панели приложений и 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 и в том месте, куда я его помещаю. Как это исправить?
2 ответа
Основываясь на фрагменте кода, мы проверили упомянутую проблему « Календарь не отображается », и она работала нормально, как и ожидалось с нашей стороны. Мы приложили фрагмент кода для того же.
Фрагмент кода:
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();
}
}
Я понял, что мне чего-то не хватает в приложении, а именно 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, так что теперь все хорошо!