Skip to content

Commit a1da3ee

Browse files
committed
merges main into casper/hostel_change
2 parents ad5a7c1 + 95056c5 commit a1da3ee

35 files changed

Lines changed: 1307 additions & 517 deletions

android/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
3434

3535
android {
3636
namespace "in.ac.iitr.mdg.appetizer"
37-
compileSdkVersion 33
37+
compileSdkVersion 34
3838
ndkVersion flutter.ndkVersion
3939

4040
compileOptions {

assets/images/meal_card/Snacks.svg

Lines changed: 330 additions & 0 deletions
Loading

lib/data/constants/env_config.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ class EnvironmentConfig {
1515
);
1616

1717
static const String SENTRY_DSN = String.fromEnvironment('SENTRY_DSN');
18+
static const String MIXPANEL_PROJECT_KEY =
19+
String.fromEnvironment('MIXPANEL_PROJECT_KEY');
1820
}

lib/data/core/router/registry/paths.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ class AppPathsRegistry {
1717
static const String leavesAndRebate = 'leavesAndRebate';
1818
static const String feedback = 'feedback';
1919
static const String hostelChange = 'hostelChange';
20+
static const String resetPassword = 'resetPassword';
2021
}

lib/data/core/router/registry/routes.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ class AppRoutesRegistry {
5555
path: AppPathsRegistry.feedback,
5656
page: FeedbackRoute.page,
5757
),
58+
CustomRoute(
59+
path: AppPathsRegistry.resetPassword,
60+
page: ResetPasswordRoute.page,
61+
),
5862
CustomRoute(
5963
path: AppPathsRegistry.hostelChange,
6064
page: HostelChangeRoute.page,
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import 'package:appetizer/data/constants/env_config.dart';
2+
import 'package:mixpanel_flutter/mixpanel_flutter.dart';
3+
4+
class MixpanelManager {
5+
static Mixpanel? instance;
6+
7+
static Future<Mixpanel> init() async {
8+
instance ??= await Mixpanel.init(EnvironmentConfig.MIXPANEL_PROJECT_KEY,
9+
trackAutomaticEvents: true);
10+
return instance!;
11+
}
12+
}

lib/presentation/app/bloc/app_bloc.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'dart:async';
22
import 'package:appetizer/data/constants/constants.dart';
33
import 'package:appetizer/data/services/local/local_storage_service.dart';
4+
import 'package:appetizer/domain/amenity/mixpanel_service.dart';
45
import 'package:appetizer/domain/models/user/user.dart';
56
import 'package:appetizer/domain/repositories/leave/leave_repository.dart';
67
import 'package:appetizer/domain/repositories/user/user_repository.dart';
@@ -70,6 +71,8 @@ class AppBloc extends Bloc<AppEvent, AppState> {
7071

7172
FutureOr<void> _onNavigateToHome(
7273
NavigateToHomeScreen event, Emitter<AppState> emit) {
74+
assert(state.user != null);
75+
MixpanelManager.instance?.identify(state.user!.enrNo.toString());
7376
emit(state.copyWith(navigateTo: NavigateTo.showHomeScreen));
7477
}
7578

lib/presentation/bottom_navigator/bottom_navigator_screen.dart

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ import 'package:appetizer/data/core/router/intrinsic_router/intrinsic_router.gr.
22
import 'package:appetizer/domain/repositories/coupon_repository.dart';
33
import 'package:appetizer/domain/repositories/leave/leave_repository.dart';
44
import 'package:appetizer/domain/repositories/menu_repository.dart';
5-
import 'package:appetizer/presentation/app/bloc/app_bloc.dart';
65
import 'package:appetizer/domain/repositories/transaction_repositroy.dart';
7-
import 'package:appetizer/presentation/components/round_edge_container.dart';
86
import 'package:appetizer/domain/repositories/user/user_repository.dart';
97
import 'package:appetizer/presentation/leaves_and_rebate/bloc/leaves_and_rebate_bloc.dart';
108
import 'package:appetizer/presentation/profile/bloc/profile_page_bloc.dart';
@@ -63,26 +61,6 @@ class BottomNavigatorScreen extends StatelessWidget {
6361
return Scaffold(
6462
backgroundColor: Colors.white,
6563
body: child,
66-
floatingActionButton: Visibility(
67-
visible: tabRouter.activeIndex == 1,
68-
child: BlocSelector<AppBloc, AppState, bool>(
69-
selector: (appState) => appState.user!.isCheckedOut,
70-
builder: (context, isCheckedOut) {
71-
if (isCheckedOut) return const SizedBox();
72-
73-
return GestureDetector(
74-
onTap: () {
75-
context
76-
.read<AppBloc>()
77-
.add(const ToggleCheckOutStatusEvent());
78-
},
79-
child: const RoundEdgeTextOnlyContainer(text: "CHECK OUT"),
80-
);
81-
},
82-
),
83-
),
84-
floatingActionButtonLocation:
85-
FloatingActionButtonLocation.centerFloat,
8664
bottomNavigationBar: BottomNavigationBar(
8765
key: UniqueKey(),
8866
currentIndex: tabRouter.activeIndex,
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import 'package:appetizer/data/core/theme/dimensional/dimensional.dart';
2+
import 'package:appetizer/presentation/components/app_textfield.dart';
3+
import 'package:flutter/material.dart';
4+
import 'package:google_fonts/google_fonts.dart';
5+
6+
class AppFormField extends StatelessWidget {
7+
const AppFormField({
8+
super.key,
9+
required this.hintText,
10+
this.controller,
11+
this.onChanged,
12+
this.obscureText,
13+
this.suffix,
14+
this.border,
15+
required this.title,
16+
this.maxLength,
17+
this.maxLines,
18+
this.titleStyle,
19+
}) : assert(
20+
obscureText == null || suffix != null,
21+
'Suffix should be provided if obscureText is provided',
22+
),
23+
assert(
24+
controller != null || onChanged != null,
25+
'Either controller or onChanged should be provided',
26+
);
27+
28+
final String hintText;
29+
final TextEditingController? controller;
30+
final Function(String)? onChanged;
31+
final bool? obscureText;
32+
final Widget? suffix;
33+
final InputBorder? border;
34+
final String title;
35+
final int? maxLength;
36+
final int? maxLines;
37+
final TextStyle? titleStyle;
38+
39+
@override
40+
Widget build(BuildContext context) {
41+
return Column(
42+
crossAxisAlignment: CrossAxisAlignment.start,
43+
children: [
44+
Text(
45+
title,
46+
style: titleStyle ??
47+
GoogleFonts.notoSans(
48+
fontSize: 18.toAutoScaledFont,
49+
fontWeight: FontWeight.w600,
50+
),
51+
),
52+
SizedBox(
53+
height: title == "Description" ? 0 : 20.toAutoScaledHeight,
54+
),
55+
AppTextField(
56+
controller: controller,
57+
onChanged: onChanged,
58+
obscureText: obscureText,
59+
hintText: hintText,
60+
suffix: suffix,
61+
border: border,
62+
maxLength: maxLength,
63+
maxLines: maxLines,
64+
),
65+
],
66+
);
67+
}
68+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import 'package:appetizer/data/core/theme/dimensional/dimensional.dart';
2+
import 'package:flutter/material.dart';
3+
import 'package:google_fonts/google_fonts.dart';
4+
5+
class AppTextField extends StatelessWidget {
6+
const AppTextField({
7+
super.key,
8+
required this.hintText,
9+
this.controller,
10+
this.onChanged,
11+
this.obscureText,
12+
this.suffix,
13+
this.border,
14+
this.maxLength,
15+
this.maxLines,
16+
}) : assert(
17+
obscureText == null || suffix != null,
18+
'Suffix should be provided if obscureText is provided',
19+
),
20+
assert(
21+
controller != null || onChanged != null,
22+
'Either controller or onChanged should be provided',
23+
);
24+
25+
final String hintText;
26+
final TextEditingController? controller;
27+
final Function(String)? onChanged;
28+
final bool? obscureText;
29+
final Widget? suffix;
30+
final InputBorder? border;
31+
final int? maxLength;
32+
final int? maxLines;
33+
34+
@override
35+
Widget build(BuildContext context) {
36+
return TextField(
37+
controller: controller,
38+
onChanged: onChanged,
39+
obscureText: obscureText ?? false,
40+
decoration: InputDecoration(
41+
hintText: hintText,
42+
hintStyle: GoogleFonts.lato(
43+
fontSize: 12.toAutoScaledFont,
44+
color: const Color(0xFF111111),
45+
fontWeight: FontWeight.w600,
46+
),
47+
border: border ??
48+
OutlineInputBorder(
49+
borderSide: BorderSide(
50+
color: const Color(0xFF111111).withOpacity(0.25)),
51+
borderRadius: BorderRadius.circular(5),
52+
),
53+
contentPadding: EdgeInsets.symmetric(
54+
horizontal: 20.toAutoScaledWidth,
55+
vertical: 15.toAutoScaledHeight),
56+
suffixIcon: suffix),
57+
maxLength: maxLength,
58+
maxLines: maxLines ?? 1,
59+
);
60+
}
61+
}

0 commit comments

Comments
 (0)