Initial pull-down gesture for student ID

This commit is contained in:
2022-09-03 18:05:53 -04:00
parent 306defc6df
commit 95400d7ee2
6 changed files with 127 additions and 85 deletions

View File

@@ -1,3 +1,4 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:furman_now/src/routes/index.gr.dart';
import 'package:furman_now/src/utils/greeting.dart';
@@ -54,34 +55,48 @@ class HomeScreen extends StatelessWidget {
),
),
),
ScrollViewWithHeight(
child: Container(
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.vertical(top: Radius.circular(30)),
),
padding: const EdgeInsets.symmetric(vertical: 20),
margin: const EdgeInsets.only(top: 200),
width: double.infinity,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const HeaderWidget(
title: "Today's Events",
link: HeaderLink(text: "View more", href: EventsRoute()),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
child: EventsList(),
),
const HeaderWidget(title: "Food & Dining"),
const RestaurantsList(),
const HeaderWidget(title: "Transportation"),
const Padding(
padding: EdgeInsets.symmetric(horizontal: 20),
child: TransportationCard(),
),
],
NotificationListener<ScrollNotification>(
onNotification: (notification) {
if (notification is ScrollUpdateNotification) {
final offset = notification.metrics.pixels;
if (offset < 0) {
var offsetAmount = offset.abs();
if (offsetAmount > 50) {
context.router.navigate(const StudentIdRoute());
}
}
}
return true;
},
child: ScrollViewWithHeight(
child: Container(
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.vertical(top: Radius.circular(30)),
),
padding: const EdgeInsets.symmetric(vertical: 20),
margin: const EdgeInsets.only(top: 200),
width: double.infinity,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const HeaderWidget(
title: "Today's Events",
link: HeaderLink(text: "View more", href: EventsRoute()),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
child: EventsList(),
),
const HeaderWidget(title: "Food & Dining"),
const RestaurantsList(),
const HeaderWidget(title: "Transportation"),
const Padding(
padding: EdgeInsets.symmetric(horizontal: 20),
child: TransportationCard(),
),
],
),
),
),
),

View File

@@ -1,7 +1,9 @@
import 'dart:async';
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:barcode_widget/barcode_widget.dart';
import 'package:furman_now/src/routes/index.gr.dart';
import 'package:furman_now/src/services/get_app/barcode/barcode_service.dart';
import 'package:furman_now/src/utils/theme.dart';
@@ -26,6 +28,12 @@ class _StudentIdScreenState extends State<StudentIdScreen> {
);
}
@override
void dispose() {
super.dispose();
timer?.cancel();
}
void updateBarcode(Timer timer) {
setState(() {
barcodeNumber = BarcodeService.generateGetBarcode();
@@ -35,35 +43,45 @@ class _StudentIdScreenState extends State<StudentIdScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
color: const Color(0xffb7acc9),
child: SafeArea(
child: ListView(
padding: const EdgeInsets.all(40),
children: [
Text(
"Furman ID",
style: furmanTextStyle(const TextStyle(color: Color(0xff26183d), fontSize: 36, fontWeight: FontWeight.w800)),
),
const SizedBox(height: 200),
Container(
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(10)),
body: Listener(
onPointerMove: (details) {
int sensitivity = 8;
if (details.delta.dy > sensitivity) {
// Down Swipe
} else if (details.delta.dy < -sensitivity) {
context.router.navigate(const MainLayout());
}
},
child: Container(
color: const Color(0xffb7acc9),
child: SafeArea(
child: ListView(
padding: const EdgeInsets.all(40),
children: [
Text(
"Furman ID",
style: furmanTextStyle(const TextStyle(color: Color(0xff26183d), fontSize: 36, fontWeight: FontWeight.w800)),
),
// hack since the barcode has a weird intrinsic size for some reason
child: LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
return BarcodeWidget(
barcode: Barcode.pdf417(moduleHeight: 4),
data: barcodeNumber,
margin: const EdgeInsets.all(10),
height: constraints.maxWidth / 3,
);
},
const SizedBox(height: 200),
Container(
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(10)),
),
// hack since the barcode has a weird intrinsic size for some reason
child: LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
return BarcodeWidget(
barcode: Barcode.pdf417(moduleHeight: 4),
data: barcodeNumber,
margin: const EdgeInsets.all(10),
height: constraints.maxWidth / 3,
);
},
),
),
),
],
],
),
),
),
),