Flutter 日历组件:左右滑动切换日期
Widget build(BuildContext context) {
widthx = MediaQuery.of(context).size.width;
return MaterialApp(
theme: ThemeData.light(),
darkTheme: ThemeData.dark(),
home: Container(
child: Column(
children: [
getwindow(context),
Expanded(
child: Scaffold(
bottomNavigationBar: Container(
//圆角
width: MediaQuery.of(context).size.width / 2,
child: BottomSheetBar(
controller: bottomSheetBarController,
color: //透明
Colors.white,
isDismissable: false,
locked: false,
height: Global.bottombarheight,
expandedBuilder: (scrollController) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: QRCode(),
);
},
collapsed: SalomonBottomBar(
currentIndex: 0,
onTap: (i) {
// setState(() => _currentIndex = i);
},
items: [
/// Home
SalomonBottomBarItem(
icon: Icon(Icons.home),
title: Text('此处上滑显示图书馆二维码'),
selectedColor: Global.home_currentcolor,
),
],
),
body: Scaffold(
appBar: CalendarAgenda(
controller: _calendarAgendaControllerAppBar,
initialDate: DateTime.now(),
appbar: true,
calendarLogo: getcalanderlogopngx(),
selectedDayLogo:
getlogopngx(), //使用ImageProvider<Object>加载IMage类型的logopic
backgroundColor: Global.home_currentcolor,
firstDate: Global.calendar_first_day,
lastDate: Global.calendar_last_day,
locale: 'zh_CN',
selectedDateColor: Colors.green.shade900,
fullCalendarScroll: FullCalendarScroll.vertical,
fullCalendarDay: WeekDay.long,
dateColor: Colors.white,
calendarEventColor: Global.home_currentcolor,
events: [DateTime.now().subtract(Duration(days: 0))],
onDateSelected: (date) {
hItems(date);
},
),
body: GestureDetector(
onHorizontalDragEnd: (details) {
if (details.velocity.pixelsPerSecond.dx < 0) {
_calendarAgendaControllerAppBar.nextPage();
} else if (details.velocity.pixelsPerSecond.dx > 0) {
_calendarAgendaControllerAppBar.previousPage();
}
},
child: SideMenu(
background: Global.home_currentcolor,
key: _sideMenuKey,
menu: SingleChildScrollView(
padding: const EdgeInsets.symmetric(vertical: 50.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.only(left: 16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Lottie.asset('assets/score_detail.json'),
SizedBox(height: 16.0),
TextButton(
onPressed: () =>
Global().getrecently(context),
child: Text(
shijian(),
style: TextStyle(color: Colors.white),
),
),
SizedBox(height: 20.0),
],
),
),
ListTile(
leading: const Icon(Icons.cached,
size: 20.0, color: Colors.white),
title: Text(
'查看成绩',
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold),
),
onTap: () => Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => scorepage(),
),
),
),
ListTile(
leading: const Icon(Icons.score_outlined,
size: 20.0, color: Colors.white),
title: Text(
'chatgpt(可连续对话)',
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold),
),
onTap: () {
Navigator.of(context).pop(); //关闭侧边栏
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => chat_gpt()));
}),
ListTile(
leading: const Icon(Icons.book_online,
size: 20.0, color: Colors.white),
title: Text(
'一键评教',
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold),
),
onTap: () {
Navigator.of(context).pop(); //关闭侧边栏
Global()
.No_perception_login()
.then((value) => null);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => pingjiao()));
},
),
ListTile(
leading: const Icon(Icons.book_online,
size: 20.0, color: Colors.white),
title: Text(
'请假历史',
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold),
),
onTap: () {
Navigator.of(context).pop(); //关闭侧边栏
Global()
.No_perception_login()
.then((value) => null);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => qingjia()));
},
),
ListTile(
leading: const Icon(Icons.colorize,
size: 20.0, color: Colors.white),
title: Text(
'调个色',
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold),
),
onTap: () {
showDialog(
context: context,
builder: (context) {
return MaterialApp(
theme: ThemeData.light(),
darkTheme: ThemeData.dark(),
home: AlertDialog(
title: Text('选择当前页颜色'),
content: SingleChildScrollView(
child: ColorPicker(
pickerColor:
Global.home_currentcolor,
onColorChanged: changeColor,
colorPickerWidth: 300.0,
pickerAreaHeightPercent: 0.7,
enableAlpha: false,
displayThumbColor: true,
showLabel: true,
paletteType: PaletteType.hsv,
pickerAreaBorderRadius:
const BorderRadius.only(
topLeft:
const Radius.circular(
2.0),
topRight:
const Radius.circular(
2.0),
),
),
),
actions: <Widget>[
TextButton(
child: const Text('确定'),
onPressed: () async {
setState(() => Global
.home_currentcolor =
Global.home_pickcolor);
getApplicationDocumentsDirectory()
.then((value) {
File file = File(
value.path +
'/color.txt');
//判断文件是否存在
if (file.existsSync()) {
//存在则写入
file.writeAsString(Global
.home_currentcolor
.value
.toString());
} else {
//不存在则创建文件并写入
file.createSync();
file.writeAsString(Global
.home_currentcolor
.value
.toString());
}
});
Navigator.of(context).pop();
},
),
],
));
});
},
),
ListTile(
leading: const Icon(Icons.score_outlined,
size: 20.0, color: Colors.white),
title: Text(
'查看学习通已批完的考试但未发布的成绩',
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold),
),
onTap: () {
Navigator.of(context).pop(); //关闭侧边栏
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
chaoxinglogin()));
}),
ListTile(
leading: const Icon(Icons.cached,
size: 20.0, color: Colors.white),
title: Text(
'重新登入',
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold),
),
onTap: () {
deleteFile();
AchievementView(context,
title: "成功!",
subTitle: "已清除课程和成绩缓存,请退出app重新登录",
//onTab: _onTabAchievement,
icon: Icon(
Icons.insert_emoticon,
color: Colors.white,
),
//typeAnimationContent: AnimationTypeAchievement.fadeSlideToUp,
//borderRadius: 5.0,
color: Colors.green,
//textStyleTitle: TextStyle(),
//textStyleSubTitle: TextStyle(),
//alignment: Alignment.topCenter,
duration: Duration(seconds: 3),
isCircle: true, listener: (status) {
print(status);
}) ..show();
},
),
ListTile(
leading: const Icon(Icons.settings,
size: 20.0, color: Colors.white),
title: Text(
'关于&设置',
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold),
),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => about()),
);
},
),
],
),
),
type: SideMenuType.slideNRotate,
onChange: (_isOpened) {
if (isOpened) {
Global.bottombarheight = 60;
} else {
Global.bottombarheight = 0;
}
setState(() => isOpened = _isOpened);
},
child: IgnorePointer(
ignoring: isOpened,
child: Scaffold(
appBar: AppBar(
backgroundColor: Global.home_currentcolor,
title: Text(title),
centerTitle: true,
leading: IconButton(
icon: const Icon(Icons.menu),
onPressed: () {
toggleMenu();
},
),
actions: [
IconButton(
key: scoredetailbtn,
icon: Icon(Icons.score),
onPressed: () {
if (isdownload) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
scorepage()),
);
} else {
AchievementView(context,
title: "出错啦!",
subTitle:
'请确认现在是否学校在抢课或其他原因导致成绩下载超时',
//onTab: _onTabAchievement,
icon: Icon(
Icons.error,
color: Colors.white,
),
//typeAnimationContent: AnimationTypeAchievement.fadeSlideToUp,
//borderRadius: 5.0,
color: Colors.red,
//textStyleTitle: TextStyle(),
//textStyleSubTitle: TextStyle(),
//alignment: Alignment.topCenter,
duration: Duration(seconds: 3),
isCircle: true, listener: (status) {
print(status);
}) ..show();
}
},
),
]),
body: Container(
//padding靠左
child: Scaffold(
body: ListView(
children: dailycourse,
),
),
),
floatingActionButton: FloatingActionButton(
tooltip: '回到今天',
onPressed: () {
hItems(DateTime.now());
setState(() {
print('回到今天');
_calendarAgendaControllerAppBar
.goToDay(DateTime.now());
});
},
child: Text('回到
今天',
style: TextStyle(
color: Colors.white,
fontSize: 13,
)),
backgroundColor: Global.home_currentcolor,
),
),
)),
),
),
),
)),
],
),
),
);
}
原文地址: https://www.cveoy.top/t/topic/obSu 著作权归作者所有。请勿转载和采集!