Revert "Rename everything filcnaplo-related to refilc"

This reverts commit d1a9625d93.
This commit is contained in:
Pearoo
2023-09-19 18:16:57 +02:00
parent d1a9625d93
commit 7b517b333a
669 changed files with 39481 additions and 39799 deletions

View File

@@ -0,0 +1,85 @@
import 'package:filcnaplo/theme/colors/colors.dart';
import 'package:flutter/material.dart';
class FilterBar extends StatelessWidget implements PreferredSizeWidget {
const FilterBar({
Key? key,
required this.items,
required this.controller,
this.onTap,
this.padding = const EdgeInsets.symmetric(horizontal: 24.0),
this.disableFading = false,
this.scrollable = true,
}) : assert(items.length == controller.length),
super(key: key);
final List<Widget> items;
final TabController controller;
final EdgeInsetsGeometry padding;
final Function(int)? onTap;
@override
final Size preferredSize = const Size.fromHeight(42.0);
final bool disableFading;
final bool scrollable;
@override
Widget build(BuildContext context) {
final tabbar = TabBar(
controller: controller,
isScrollable: scrollable,
physics: const BouncingScrollPhysics(),
// Label
labelStyle: Theme.of(context).textTheme.titleMedium!.copyWith(
fontWeight: FontWeight.w600,
fontSize: 15.0,
),
labelPadding: const EdgeInsets.symmetric(horizontal: 12, vertical: 3),
labelColor: Theme.of(context).colorScheme.secondary,
unselectedLabelColor: AppColors.of(context).text.withOpacity(0.65),
// Indicator
indicatorPadding: const EdgeInsets.symmetric(vertical: 8),
indicator: BoxDecoration(
color: Theme.of(context).colorScheme.secondary.withOpacity(0.25),
borderRadius: BorderRadius.circular(45.0),
),
overlayColor: MaterialStateProperty.all(const Color(0x00000000)),
// Tabs
padding: EdgeInsets.zero,
tabs: items,
onTap: onTap,
);
return Container(
width: MediaQuery.of(context).size.width,
height: 48.0,
padding: padding,
child: disableFading
? tabbar
: AnimatedBuilder(
animation: controller.animation!,
builder: (ctx, child) {
// avoid fading over selected tab
return ShaderMask(
shaderCallback: (Rect bounds) {
final Color bg = Theme.of(context).scaffoldBackgroundColor;
final double index = controller.animation!.value;
return LinearGradient(begin: Alignment.topLeft, end: Alignment.bottomRight, colors: [
index < 0.2 ? Colors.transparent : bg,
Colors.transparent,
Colors.transparent,
index > controller.length - 1.2 ? Colors.transparent : bg
], stops: const [
0,
0.1,
0.9,
1
]).createShader(bounds);
},
blendMode: BlendMode.dstOut,
child: child);
},
child: tabbar,
),
);
}
}

View File

@@ -0,0 +1,66 @@
import 'package:filcnaplo/theme/colors/colors.dart';
import 'package:flutter/material.dart';
class PanelButton extends StatelessWidget {
const PanelButton({
Key? key,
this.onPressed,
this.padding = const EdgeInsets.symmetric(horizontal: 14.0),
this.leading,
this.title,
this.trailing,
this.trailingDivider = false,
}) : super(key: key);
final void Function()? onPressed;
final EdgeInsetsGeometry padding;
final Widget? leading;
final Widget? title;
final Widget? trailing;
final bool trailingDivider;
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 12.0),
child: RawMaterialButton(
onPressed: onPressed,
padding: padding,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
child: ListTile(
leading: leading != null
? Theme(
data: Theme.of(context).copyWith(iconTheme: IconThemeData(color: Theme.of(context).colorScheme.secondary)),
child: leading!,
)
: null,
trailing: trailingDivider
? Row(
mainAxisSize: MainAxisSize.min,
children: [
Container(
margin: const EdgeInsets.only(right: 6.0),
width: 2.0,
height: 32.0,
decoration: BoxDecoration(
color: AppColors.of(context).text.withOpacity(.15),
borderRadius: BorderRadius.circular(45.0),
),
),
if (trailing != null) trailing!,
],
)
: trailing,
title: title != null
? DefaultTextStyle(
style: Theme.of(context).textTheme.titleMedium!.copyWith(fontWeight: FontWeight.w600, fontSize: 14.0),
child: title!,
)
: null,
contentPadding: EdgeInsets.zero,
visualDensity: VisualDensity.compact,
),
),
);
}
}

View File

@@ -0,0 +1,75 @@
import 'package:filcnaplo/models/user.dart';
import 'package:filcnaplo/utils/color.dart';
import 'package:flutter/material.dart';
import 'package:filcnaplo/theme/colors/colors.dart';
class ProfileImage extends StatelessWidget {
const ProfileImage({
Key? key,
this.name,
this.radius = 20.0,
this.role = Role.student,
this.backgroundColor,
}) : super(key: key);
final String? name;
final double radius;
final Role? role;
final Color? backgroundColor;
@override
Widget build(BuildContext context) {
Color color = ColorUtils.foregroundColor(backgroundColor ?? Theme.of(context).scaffoldBackgroundColor);
Color roleColor;
if (Theme.of(context).brightness == Brightness.light) {
roleColor = const Color(0xFF444444);
} else {
roleColor = const Color(0xFF555555);
}
return Stack(
alignment: Alignment.center,
children: [
Material(
clipBehavior: Clip.hardEdge,
shape: const CircleBorder(),
color: backgroundColor ?? AppColors.of(context).text.withOpacity(.15),
child: InkWell(
child: AnimatedContainer(
duration: const Duration(milliseconds: 200),
height: radius * 2,
width: radius * 2,
decoration: const BoxDecoration(
shape: BoxShape.circle,
),
child: name != null && (name?.trim().length ?? 0) > 0
? Center(
child: Text(
(name?.trim().length ?? 0) > 0 ? (name ?? "?").trim()[0] : "?",
style: TextStyle(
color: color,
fontWeight: FontWeight.w600,
fontSize: 18.0 * (radius / 20.0),
),
),
)
: Container(),
),
),
),
// Role indicator
if (role == Role.parent)
SizedBox(
height: radius * 2,
width: radius * 2,
child: Container(
alignment: Alignment.bottomRight,
child: Icon(Icons.shield, color: roleColor, size: radius / 1.3),
),
),
],
);
}
}

View File

@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
import 'package:filcnaplo_kreta_api/models/grade.dart';
import 'package:filcnaplo/ui/widgets/grade/grade_tile.dart';
class GradeViewable extends StatelessWidget {
const GradeViewable(this.grade, {Key? key}) : super(key: key);
final Grade grade;
@override
Widget build(BuildContext context) {
return GradeTile(grade);
}
}

View File

@@ -0,0 +1,19 @@
import 'package:filcnaplo_kreta_api/models/lesson.dart';
import 'package:filcnaplo/ui/widgets/lesson/lesson_tile.dart';
import 'package:flutter/material.dart';
class LessonViewable extends StatelessWidget {
const LessonViewable(this.lesson, {Key? key, this.swapDesc = false}) : super(key: key);
final Lesson lesson;
final bool swapDesc;
@override
Widget build(BuildContext context) {
final tile = LessonTile(lesson, swapDesc: swapDesc);
if (lesson.subject.id == '' || tile.lesson.isEmpty) return tile;
return tile;
}
}