diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 0152341..2605b86 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -24,6 +24,13 @@ + + + + + + + + LSApplicationQueriesSchemes + + sms + tel + CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName diff --git a/lib/Screens/OmUI/main_screen.dart b/lib/Screens/OmUI/main_screen.dart index 4fa7546..8ee9634 100644 --- a/lib/Screens/OmUI/main_screen.dart +++ b/lib/Screens/OmUI/main_screen.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:gdsc_ui_design/Screens/OmUI/HomePage.dart'; import 'package:gdsc_ui_design/Screens/OmUI/MembersPage.dart'; import 'package:gdsc_ui_design/Screens/OmUI/RegisteredPage.dart'; +import 'package:gdsc_ui_design/Screens/OmUI/sponsors_page.dart'; import 'package:gdsc_ui_design/utils/app_styles.dart'; import 'package:gdsc_ui_design/utils/size_config.dart'; import 'package:hidden_drawer_menu/hidden_drawer_menu.dart'; @@ -53,6 +54,14 @@ class _MainScreenState extends State { selectedStyle: kRalewayMedium), PrizePage(), ), + ScreenHiddenDrawer( + ItemHiddenMenu( + name: 'Sponsors', + baseStyle: kRalewayMedium, + colorLineSelected: kBlue, + selectedStyle: kRalewayMedium), + SponserPage(), + ), ]; } diff --git a/lib/Screens/OmUI/sponsors_page.dart b/lib/Screens/OmUI/sponsors_page.dart new file mode 100644 index 0000000..7c56274 --- /dev/null +++ b/lib/Screens/OmUI/sponsors_page.dart @@ -0,0 +1,257 @@ +import 'package:flutter/material.dart'; +import 'package:gdsc_ui_design/utils/app_styles.dart'; +// import 'package:url_launcher/url_launcher.dart'; + +import 'package:http/http.dart' as http; +import 'dart:convert'; + +import '../../utils/size_config.dart'; + +class Sponsor { + final String name; + final String description; + final String logoUrl; + final String website; + final List rewards; + + Sponsor({ + required this.name, + required this.description, + required this.logoUrl, + required this.website, + required this.rewards, + }); +} + +class SponserPage extends StatefulWidget { + const SponserPage({super.key}); + + @override + State createState() => _SponserPageState(); +} + +class _SponserPageState extends State { + Future> fetchData() async { + final response = await http.get( + Uri.parse('https://du-hacks-apis.vercel.app/api/v2/sponsors'), + ); + + if (response.statusCode == 200) { + final jsonData = json.decode(response.body); + final dataList = jsonData['data']; + + return dataList + .map((data) => Sponsor( + name: data['name'], + description: data['description'], + logoUrl: data['logoUrl'], + website: data['website'], + rewards: List.from(data['rewards']), + )) + .toList(); + } else { + throw Exception('Failed to load sponsors: ${response.statusCode}'); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: FutureBuilder>( + future: fetchData(), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return const Center( + child: CircularProgressIndicator(), // Show a loading indicator + ); + } else if (snapshot.hasError) { + return Center( + child: Text('Error: ${snapshot.error}'), + ); + } else { + final sponsors = snapshot.data; + + return ListView.builder( + itemCount: sponsors!.length, + itemBuilder: (context, index) { + final sponsor = sponsors[index]; + + return SponsorCard(sponsor: sponsor); + }, + ); + } + }, + ), + ); + } +} + +class SponsorCard extends StatefulWidget { + const SponsorCard({super.key, required this.sponsor}); + final Sponsor sponsor; + + @override + State createState() => _SponsorCardState(); +} + +class _SponsorCardState extends State { + bool isExpanded = false; + + @override + Widget build(BuildContext context) { + return Card( + elevation: 5, + margin: const EdgeInsets.all(16.0), + child: ClipRRect( + borderRadius: BorderRadius.circular(10.0), + child: InkWell( + onTap: () { + setState(() { + isExpanded = !isExpanded; + }); + }, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + // color: Color.fromARGB(255, 138, 167, 243), + decoration: const BoxDecoration( + gradient: LinearGradient( + begin: + Alignment.topCenter, // Align the gradient from the top + end: Alignment.bottomCenter, // To the bottom + colors: [ + Color.fromARGB(255, 254, 254, 255), + Color.fromARGB(255, 94, 139, 252), + ], // Add your two desired colors + ), + ), + padding: const EdgeInsets.all(16.0), + child: Row( + children: [ + const CircleAvatar( + backgroundImage: NetworkImage( + // widget.sponsor.logoUrl + "https://altcoinsbox.com/wp-content/uploads/2023/03/matic-logo-350x350.webp", + ), + radius: 50, // Increased image size + ), + const SizedBox(width: 16.0), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.sponsor.name, + style: kRalewaySemibold.copyWith( + fontSize: SizeConfig.blockSizeHorizontal! * 7, + ), + ), + const SizedBox(height: 8.0), + Text( + widget.sponsor.description, + style: kRalewaySemibold.copyWith( + fontSize: SizeConfig.blockSizeHorizontal! * 4, + ), + ), + ], + ), + ), + ], + ), + ), + AnimatedContainer( + duration: const Duration(milliseconds: 500), + height: isExpanded ? null : 0, + child: isExpanded + ? Container( + width: double.infinity, + decoration: const BoxDecoration( + gradient: LinearGradient( + begin: Alignment + .topCenter, // Align the gradient from the top + end: Alignment.bottomCenter, // To the bottom + colors: [ + Color.fromARGB(255, 99, 142, 250), + Color.fromARGB(255, 94, 138, 248), + Color.fromARGB(255, 94, 138, 248), + Color.fromARGB(255, 89, 135, 251), + Color.fromARGB(255, 55, 111, 253), + ], + ), + ), + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + const Text( + 'Rewards:', + style: TextStyle( + fontSize: 22, // Increased font size + fontWeight: FontWeight.bold, + color: Colors.white, + ), + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: widget.sponsor.rewards + .map((reward) => Text( + reward, + textAlign: TextAlign.left, + style: kRalewaySemibold.copyWith( + fontSize: + SizeConfig.blockSizeHorizontal! * + 4.5, + ), + )) + .toList(), + ), + const SizedBox(height: 20), + ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: + const Color.fromARGB(255, 7, 47, 125)), + onPressed: () { + print(widget.sponsor.website); + _launchURL(widget.sponsor.website); + }, + // onPressed: _launchURL(widget.sponsor.website), + child: Text( + 'Visit Website', + style: kRalewaySemibold.copyWith( + fontSize: + SizeConfig.blockSizeHorizontal! * 3.5, + ), + ), + ), + ], + ), + ) + : null, + ), + ], + ), + ), + ), + ); + } + + // Future _launchURL(String url) async { + // print(url); + // // ADD Launcher Code Here + // if (await canLaunchUrl(uri!)) { + // await launchUrl(Uri.parse(url)); + // } else { + // throw 'Could not launch $url'; + // } + + // } + Future _launchURL(String url) async { + // final Uri? uri = Uri.tryParse(url); + // print(uri); + // if (!await launchUrl(uri!)) { + // throw Exception('Could not launch $uri'); + // } + } +} diff --git a/lib/main.dart b/lib/main.dart index ef48d72..da952a3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -18,4 +18,8 @@ void main() { debugShowCheckedModeBanner: false, home: SplaceScreen(), )); + + + + } diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index e71a16d..f6f23bf 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,6 +6,10 @@ #include "generated_plugin_registrant.h" +#include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); } diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 2e1de87..f16b4c3 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + url_launcher_linux ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index e777c67..a1cdfd0 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,7 +6,9 @@ import FlutterMacOS import Foundation import path_provider_foundation +import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/pubspec.lock b/pubspec.lock index 2ec4ad9..28f4ab7 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -91,6 +91,11 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" google_fonts: dependency: "direct main" description: @@ -108,7 +113,7 @@ packages: source: hosted version: "3.0.1" http: - dependency: transitive + dependency: "direct main" description: name: http sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525" @@ -288,6 +293,70 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: "47e208a6711459d813ba18af120d9663c20bdf6985d6ad39fe165d2538378d27" + url: "https://pub.dev" + source: hosted + version: "6.1.14" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: b04af59516ab45762b2ca6da40fa830d72d0f6045cd97744450b73493fa76330 + url: "https://pub.dev" + source: hosted + version: "6.1.0" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "7c65021d5dee51813d652357bc65b8dd4a6177082a9966bc8ba6ee477baa795f" + url: "https://pub.dev" + source: hosted + version: "6.1.5" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: b651aad005e0cb06a01dbd84b428a301916dc75f0e7ea6165f80057fee2d8e8e + url: "https://pub.dev" + source: hosted + version: "3.0.6" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: b55486791f666e62e0e8ff825e58a023fd6b1f71c49926483f1128d3bbd8fe88 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "95465b39f83bfe95fcb9d174829d6476216f2d548b79c38ab2506e0458787618" + url: "https://pub.dev" + source: hosted + version: "2.1.5" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "2942294a500b4fa0b918685aff406773ba0a4cd34b7f42198742a94083020ce5" + url: "https://pub.dev" + source: hosted + version: "2.0.20" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "95fef3129dc7cfaba2bc3d5ba2e16063bb561fc6d78e63eee16162bc70029069" + url: "https://pub.dev" + source: hosted + version: "3.0.8" vector_math: dependency: transitive description: @@ -321,5 +390,5 @@ packages: source: hosted version: "1.0.3" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" - flutter: ">=3.7.0" + dart: ">=3.1.0 <4.0.0" + flutter: ">=3.13.0" diff --git a/pubspec.yaml b/pubspec.yaml index d77308e..79decd1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -28,29 +28,21 @@ environment: # the latest version available on pub.dev. To see which dependencies have newer # versions available, run `flutter pub outdated`. dependencies: + cupertino_icons: ^1.0.2 flutter: sdk: flutter - - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^1.0.2 google_fonts: ^5.1.0 hidden_drawer_menu: ^3.0.1 + http: ^1.1.0 + url_launcher: ^6.1.14 dev_dependencies: + flutter_lints: ^2.0.0 flutter_test: sdk: flutter - # The "flutter_lints" package below contains a set of recommended lints to - # encourage good coding practices. The lint set provided by the package is - # activated in the `analysis_options.yaml` file located at the root of your - # package. See that file for information about deactivating specific lint - # rules and activating additional ones. - flutter_lints: ^2.0.0 - # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec - # The following section is specific to Flutter packages. flutter: # The following line ensures that the Material Icons font is @@ -66,13 +58,10 @@ flutter: - assets/images/third-prize-trophy.jpg # - images/a_dot_burr.jpeg # - images/a_dot_ham.jpeg - # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware - # For details regarding adding assets from package dependencies, see # https://flutter.dev/assets-and-images/#from-packages - # To add custom fonts to your application, add a fonts section here, # in this "flutter" section. Each entry in this list should have a # "family" key with the font family name, and a "fonts" key with a diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 8b6d468..4f78848 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,6 +6,9 @@ #include "generated_plugin_registrant.h" +#include void RegisterPlugins(flutter::PluginRegistry* registry) { + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); } diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index b93c4c3..88b22e5 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + url_launcher_windows ) list(APPEND FLUTTER_FFI_PLUGIN_LIST