Skip to content

Commit

Permalink
Merge pull request #27 from OpenPecha/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
CodingWithTashi authored Nov 25, 2024
2 parents ce7a8d5 + 8010067 commit 4ff6f7a
Show file tree
Hide file tree
Showing 20 changed files with 96 additions and 33 deletions.
Binary file modified android/app/src/main/res/mipmap-hdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/mipmap-mdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/media/1711952623Losar-Derga.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 2 additions & 1 deletion lib/ui/screen/deities_detail_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:gompa_tour/ui/widget/gonap_qr_card.dart';
import 'package:gompa_tour/ui/widget/gonpa_app_bar.dart';
import 'package:gompa_tour/ui/widget/gonpa_cache_image.dart';

import '../../config/constant.dart';
import '../../states/deties_state.dart';
import '../widget/speaker_widget.dart';

Expand Down Expand Up @@ -73,7 +74,7 @@ class DeityDetailScreen extends ConsumerWidget {
),
if (selectedDeity.slug != null) ...[
const SizedBox(height: 16),
GonpaQRCard(slug: selectedDeity.slug!)
GonpaQRCard(qrData: kDetiesQrCodeBaseUrl + selectedDeity.slug!)
],
],
),
Expand Down
4 changes: 3 additions & 1 deletion lib/ui/screen/festival_detail_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import 'package:gompa_tour/ui/widget/gonap_qr_card.dart';
import 'package:gompa_tour/ui/widget/gonpa_app_bar.dart';
import 'package:gompa_tour/ui/widget/gonpa_cache_image.dart';

import '../../config/constant.dart';

class FestivalDetailScreen extends ConsumerWidget {
static const String routeName = '/festival-detail';
const FestivalDetailScreen({super.key});
Expand Down Expand Up @@ -68,7 +70,7 @@ class FestivalDetailScreen extends ConsumerWidget {
),
if (selectedFestival.slug != null) ...[
const SizedBox(height: 16),
GonpaQRCard(slug: selectedFestival.slug!),
GonpaQRCard(qrData: kEventQrCodeUrl + selectedFestival.slug!),
const SizedBox(height: 16),
],
],
Expand Down
2 changes: 1 addition & 1 deletion lib/ui/screen/home_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ class HomeScreen extends ConsumerWidget {
_getTitle(type, context),
style: const TextStyle(
color: Colors.white,
fontSize: 24,
fontSize: 22,
fontWeight: FontWeight.bold,
),
),
Expand Down
4 changes: 3 additions & 1 deletion lib/ui/screen/organization_detail_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'package:gompa_tour/ui/widget/gonpa_app_bar.dart';
import 'package:gompa_tour/ui/widget/gonpa_cache_image.dart';
import 'package:gompa_tour/ui/widget/location_card.dart';

import '../../config/constant.dart';
import '../widget/address_card.dart';
import '../widget/gonap_qr_card.dart';
import '../widget/speaker_widget.dart';
Expand Down Expand Up @@ -86,7 +87,8 @@ class OrganizationDetailScreen extends ConsumerWidget {
),
...[
const SizedBox(height: 16),
GonpaQRCard(slug: selectedOrganization.slug)
GonpaQRCard(
qrData: kOrganizationQrCodeUrl + selectedOrganization.slug)
],
],
),
Expand Down
6 changes: 3 additions & 3 deletions lib/ui/screen/organization_list_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ class _DetiesListScreenState extends ConsumerState<OrganizationListScreen> {
void initState() {
super.initState();
_scrollController.addListener(_onScroll);
_fetchDeties();
_fetchOrganization();
}

Future<void> _fetchDeties() async {
Future<void> _fetchOrganization() async {
if (_isLoading) return;
setState(() {
_isLoading = true;
Expand All @@ -44,7 +44,7 @@ class _DetiesListScreenState extends ConsumerState<OrganizationListScreen> {
void _onScroll() {
if (_scrollController.position.pixels ==
_scrollController.position.maxScrollExtent) {
_fetchDeties();
_fetchOrganization();
}
}

Expand Down
49 changes: 39 additions & 10 deletions lib/ui/screen/qr_screen.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:gompa_tour/states/festival_state.dart';
import 'package:gompa_tour/states/organization_state.dart';
import 'package:gompa_tour/ui/screen/deities_detail_screen.dart';
import 'package:gompa_tour/ui/screen/festival_detail_screen.dart';
import 'package:gompa_tour/ui/screen/organization_detail_screen.dart';
import 'package:gompa_tour/util/qr_extractor.dart';
import 'package:mobile_scanner/mobile_scanner.dart';

Expand Down Expand Up @@ -130,7 +133,9 @@ class _QrScreenState extends ConsumerState<QrScreen> {
if (deity != null) {
// Update selected deity and navigate
ref.read(selectedDeityProvider.notifier).state = deity;
_navigateToDeityDetail();
context.push(DeityDetailScreen.routeName).then((_) {
_resetScanner();
});
} else {
showGonpaSnackBar(context, 'Deity not found');
_resetScanner();
Expand All @@ -156,7 +161,9 @@ class _QrScreenState extends ConsumerState<QrScreen> {
if (org != null) {
// Update selected deity and navigate
ref.read(selectedOrganizationProvider.notifier).state = org;
_navigateToDeityDetail();
context.push(OrganizationDetailScreen.routeName).then((_) {
_resetScanner();
});
} else {
showGonpaSnackBar(context, 'org not found');
_resetScanner();
Expand All @@ -170,12 +177,6 @@ class _QrScreenState extends ConsumerState<QrScreen> {
}
}

void _navigateToDeityDetail() {
context.push(DeityDetailScreen.routeName).then((_) {
_resetScanner();
});
}

void _resetScanner() {
setState(() => isDetecting = false);
controller.start();
Expand All @@ -187,7 +188,35 @@ class _QrScreenState extends ConsumerState<QrScreen> {
super.dispose();
}

void _fetchEventDetails(String s) {
throw UnimplementedError();
Future<void> _fetchEventDetails(String slug) async {
try {
final event = await ref
.read(festivalNotifierProvider.notifier)
.fetchFestivalBySlug(slug);

// Dismiss loading dialog
Navigator.of(context).pop();

if (event != null) {
// Update selected deity and navigate
ref.read(selectedFestivalProvider.notifier).state = event;
_navigateToEventDetail();
} else {
showGonpaSnackBar(context, 'Event not found');
_resetScanner();
}
} catch (e) {
// Dismiss loading dialog
Navigator.of(context).pop();

showGonpaSnackBar(context, 'Error fetching Event details');
_resetScanner();
}
}

void _navigateToEventDetail() {
context.push(FestivalDetailScreen.routeName).then((_) {
_resetScanner();
});
}
}
9 changes: 4 additions & 5 deletions lib/ui/widget/gonap_qr_card.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@ import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:qr_flutter/qr_flutter.dart';

import '../../config/constant.dart';

class GonpaQRCard extends StatelessWidget {
final String slug;
const GonpaQRCard({super.key, required this.slug});
final String qrData;
const GonpaQRCard({super.key, required this.qrData});

@override
Widget build(BuildContext context) {
Expand All @@ -30,6 +28,7 @@ class GonpaQRCard extends StatelessWidget {
AppLocalizations.of(context)!.scanQrCode,
style: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
],
Expand All @@ -40,7 +39,7 @@ class GonpaQRCard extends StatelessWidget {
borderRadius: const BorderRadius.all(Radius.circular(8)),
child: QrImageView(
backgroundColor: Colors.white,
data: kDetiesQrCodeBaseUrl + slug,
data: qrData,
version: QrVersions.auto,
size: height / 6,
),
Expand Down
20 changes: 13 additions & 7 deletions lib/ui/widget/gonpa_cache_image.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,19 @@ class GonpaCacheImage extends StatelessWidget {
child: SizedBox(
width: 40, height: 40, child: CircularProgressIndicator())),
errorWidget: (context, _, error) {
// If the image URL is null or error occurs, load the asset image
return url == null
? Image.asset(
width: width,
height: height,
'assets/images/buddha.png') // Fallback asset image
: const Icon(Icons.error);
if (url != null && url!.contains('media/')) {
return Image.asset(
'assets/${url!}',
width: width,
height: height,
fit: fit,
errorBuilder: (context, _, __) {
return const Icon(Icons.error);
},
);
} else {
return const Icon(Icons.error);
}
},
);
}
Expand Down
2 changes: 1 addition & 1 deletion lib/ui/widget/location_card.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class LocationCard extends StatelessWidget {
Text(
AppLocalizations.of(context)!.location,
style: const TextStyle(
fontSize: 20,
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
Expand Down
1 change: 1 addition & 0 deletions lib/ui/widget/organization_card_item.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ class OrganizationCardItem extends ConsumerWidget {

@override
Widget build(BuildContext context, WidgetRef ref) {
print('OrganizationCardItem build:' + organization.pic);
return GestureDetector(
onTap: () {
ref.read(selectedOrganizationProvider.notifier).state = organization;
Expand Down
28 changes: 25 additions & 3 deletions lib/ui/widget/search_card_item.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,21 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:gompa_tour/helper/localization_helper.dart';
import 'package:gompa_tour/models/festival_model.dart';

import '../../models/deity_model.dart';
import '../../models/organization_model.dart';
import '../../states/deties_state.dart';
import '../../states/festival_state.dart';
import '../../states/organization_state.dart';
import '../screen/deities_detail_screen.dart';
import '../screen/festival_detail_screen.dart';
import '../screen/organization_detail_screen.dart';
import 'gonpa_cache_image.dart';

class SearchCardItem extends ConsumerWidget {
final dynamic searchableItem;

const SearchCardItem({super.key, required this.searchableItem});

@override
Expand All @@ -24,6 +28,10 @@ class SearchCardItem extends ConsumerWidget {
ref.read(selectedDeityProvider.notifier).state =
searchableItem as Deity;
context.push(DeityDetailScreen.routeName);
} else if (searchableItem is Festival) {
ref.read(selectedFestivalProvider.notifier).state =
searchableItem as Festival;
context.push(FestivalDetailScreen.routeName);
} else {
ref.read(selectedOrganizationProvider.notifier).state =
searchableItem as Organization;
Expand Down Expand Up @@ -98,9 +106,10 @@ class SearchCardItem extends ConsumerWidget {
),
),
child: Text(
searchableItem is Deity
? AppLocalizations.of(context)!.deity
: AppLocalizations.of(context)!.organization,
_getTitle(searchableItem, context),
style: TextStyle(
color: Theme.of(context).colorScheme.onPrimary,
),
),
)
],
Expand All @@ -110,4 +119,17 @@ class SearchCardItem extends ConsumerWidget {
),
);
}

String _getTitle(searchableItem, BuildContext context) {
String title = 'Unknown';

if (searchableItem is Deity) {
title = AppLocalizations.of(context)!.deity;
} else if (searchableItem is Festival) {
title = AppLocalizations.of(context)!.festival;
} else {
title = AppLocalizations.of(context)!.organization;
}
return title;
}
}
1 change: 1 addition & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ flutter:
assets:
- assets/images/
- assets/db/
- assets/media/

# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/to/resolution-aware-images
Expand Down

0 comments on commit 4ff6f7a

Please sign in to comment.