forked from firka/student-legacy
85 lines
2.8 KiB
Dart
85 lines
2.8 KiB
Dart
import 'package:google_fonts/google_fonts.dart';
|
|
import 'package:provider/provider.dart';
|
|
import 'package:refilc/models/settings.dart';
|
|
import 'package:refilc/theme/colors/colors.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:refilc/utils/format.dart';
|
|
|
|
class DayTitle extends StatefulWidget {
|
|
const DayTitle({super.key, required this.dayTitle, required this.controller});
|
|
|
|
final String Function(int) dayTitle;
|
|
final TabController controller;
|
|
|
|
@override
|
|
State<DayTitle> createState() => _DayTitleState();
|
|
}
|
|
|
|
class _DayTitleState extends State<DayTitle> {
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
widget.controller.addListener(listener);
|
|
}
|
|
|
|
void listener() {
|
|
if (mounted) setState(() {});
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
widget.controller.removeListener(listener);
|
|
super.dispose();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
double width = MediaQuery.of(context).size.width;
|
|
|
|
return AnimatedBuilder(
|
|
animation: widget.controller.animation!,
|
|
builder: (context, _) {
|
|
double value = widget.controller.animation!.value;
|
|
|
|
return Transform.translate(
|
|
offset: Offset(-value * width / 1.5, 0),
|
|
child: Row(
|
|
children: List.generate(
|
|
widget.controller.length,
|
|
(index) {
|
|
double opacity = (value - index + 1).clamp(0, 1);
|
|
|
|
return SizedBox(
|
|
width: MediaQuery.of(context).size.width / 1.5,
|
|
child: Text(
|
|
widget.dayTitle(index).capital(),
|
|
style: Provider.of<SettingsProvider>(context)
|
|
.fontFamily !=
|
|
'' &&
|
|
Provider.of<SettingsProvider>(context)
|
|
.titleOnlyFont
|
|
? GoogleFonts.getFont(
|
|
Provider.of<SettingsProvider>(context).fontFamily,
|
|
textStyle: TextStyle(
|
|
color: AppColors.of(context)
|
|
.text
|
|
.withValues(alpha: opacity),
|
|
fontSize: 32.0,
|
|
fontWeight: FontWeight.bold),
|
|
)
|
|
: TextStyle(
|
|
color: AppColors.of(context)
|
|
.text
|
|
.withValues(alpha: opacity),
|
|
fontSize: 32.0,
|
|
fontWeight: FontWeight.bold),
|
|
),
|
|
);
|
|
},
|
|
),
|
|
),
|
|
);
|
|
});
|
|
}
|
|
}
|