From 3e2862a5c736b7aafdce985795796bd66ba64b68 Mon Sep 17 00:00:00 2001 From: Deekshith Vijaykumar Date: Thu, 3 Oct 2024 10:10:47 +0900 Subject: [PATCH] GSC screen scroll fix --- lib/main.dart | 5 +- .../google_summer_of_code_screen.dart | 237 +++++++----------- 2 files changed, 99 insertions(+), 143 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 7f441ae..3d76cb1 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:opso/landing_page.dart'; import 'package:opso/programs%20screen/fossasia.dart'; import 'package:opso/programs%20screen/girl_script.dart'; import 'package:opso/programs%20screen/github_campus.dart'; @@ -51,7 +50,7 @@ class OpSoApp extends StatelessWidget { "/social_winter_of_code": (context) => const SWOCScreen(), "/season_of_sokde": (context) => const SeasonOfKDE(), "/google_summer_of_code": (context) => - GoogleSummerOfCodeScreen(), + const GoogleSummerOfCodeScreen(), "/google_season_of_docs": (context) => GoogleSeasonOfDocsScreen(), "/summer_of_bitcoin": (context) => const SummerOfBitcoin(), @@ -76,4 +75,4 @@ class OpSoApp extends StatelessWidget { ); }); } -} \ No newline at end of file +} diff --git a/lib/programs screen/google_summer_of_code_screen.dart b/lib/programs screen/google_summer_of_code_screen.dart index a9cba72..c166ce8 100644 --- a/lib/programs screen/google_summer_of_code_screen.dart +++ b/lib/programs screen/google_summer_of_code_screen.dart @@ -1,25 +1,21 @@ -import 'dart:ffi'; - -import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:opso/modals/book_mark_model.dart'; import 'package:opso/programs_info_pages/gsoc_info.dart'; import 'package:opso/widgets/gsoc/GsocProjectWidget.dart'; -import 'package:url_launcher/url_launcher.dart'; import 'package:multi_select_flutter/multi_select_flutter.dart'; import '../modals/GSoC/Gsoc.dart'; import '../services/ApiService.dart'; -import '../widgets/SearchandFilterWidget.dart'; import '../widgets/year_button.dart'; - class GoogleSummerOfCodeScreen extends StatefulWidget { + const GoogleSummerOfCodeScreen({super.key}); + @override State createState() => _GoogleSummerOfCodeScreenState(); } - class _GoogleSummerOfCodeScreenState extends State { bool _isRefreshing = false; bool isBookmarked = true; @@ -54,9 +50,6 @@ class _GoogleSummerOfCodeScreenState extends State { List selectedOrganizations = []; late Future _dataFetchFuture; - - - @override void initState() { super.initState(); @@ -72,8 +65,6 @@ class _GoogleSummerOfCodeScreenState extends State { }); } - - Future getProjectData() async { ApiService apiService = ApiService(); try { @@ -82,9 +73,6 @@ class _GoogleSummerOfCodeScreenState extends State { Gsoc orgData2023 = await apiService.getOrgByYear('2023'); Gsoc orgData2024 = await apiService.getOrgByYear('2024'); - - - setState(() { gsoc2021 = orgData2021.organizations ?? []; gsoc2022 = orgData2022.organizations ?? []; @@ -94,59 +82,46 @@ class _GoogleSummerOfCodeScreenState extends State { allOrganizations = [...orgList.map((org) => org.name!).toSet()]; }); } catch (e) { - print('Error: $e'); + if (kDebugMode) { + print('Error: $e'); + } } } - - - void filterProjects() { orgList = _getOrganizationsByYear(selectedYear); - if(selectedLanguages.length>=2){ + if (selectedLanguages.length >= 2) { selectedLanguages.removeAt(0); } - if(selectedOrganizations.length>=2){ + if (selectedOrganizations.length >= 2) { selectedOrganizations.removeAt(0); } if (!selectedLanguages.contains('All')) { - orgList = orgList.where((project) => - selectedLanguages.every((language) => project.technologies?.contains(language) == true) - ).toList(); + orgList = orgList + .where((project) => selectedLanguages.every( + (language) => project.technologies.contains(language) == true)) + .toList(); } - - - - - if (!selectedOrganizations.contains('All')) { orgList = orgList .where((project) => selectedOrganizations.contains(project.name)) .toList(); } - - // Update organization filter based on selected languages allOrganizations = [ ..._getOrganizationsByYear(selectedYear) .where((org) => - selectedLanguages.contains('All') || - org.technologies?.any(selectedLanguages.contains) == true) - .map((org) => org.name!) + selectedLanguages.contains('All') || + org.technologies.any(selectedLanguages.contains) == true) + .map((org) => org.name) .toSet() ]; - - - setState(() {}); } - - - List _getOrganizationsByYear(int year) { switch (year) { case 2021: @@ -162,9 +137,6 @@ class _GoogleSummerOfCodeScreenState extends State { } } - - - Future _refresh() async { setState(() { _isRefreshing = true; @@ -179,9 +151,6 @@ class _GoogleSummerOfCodeScreenState extends State { }); } - - - // Add this method to the _GoogleSummerOfCodeScreenState class void search(String searchText) { setState(() { @@ -191,32 +160,25 @@ class _GoogleSummerOfCodeScreenState extends State { } else { orgList = _getOrganizationsByYear(selectedYear) .where((element) => - element.name - ?.toLowerCase() - .contains(searchText.toLowerCase()) == - true) + element.name.toLowerCase().contains(searchText.toLowerCase()) == + true) .toList(); } }); } - - - @override Widget build(BuildContext context) { var height = MediaQuery.of(context).size.height; var width = MediaQuery.of(context).size.width; - - - return RefreshIndicator( onRefresh: _refresh, child: Scaffold( - appBar: AppBar( + appBar: AppBar( title: const Text('Google Summer of Code'), - actions: [IconButton( + actions: [ + IconButton( icon: (isBookmarked) ? const Icon(Icons.bookmark_add_rounded) : const Icon(Icons.bookmark_add_outlined), @@ -232,22 +194,28 @@ class _GoogleSummerOfCodeScreenState extends State { ), ); if (isBookmarked) { - print("Adding"); + if (kDebugMode) { + print("Adding"); + } HandleBookmark.addBookmark(currentProject, currentPage); } else { - print("Deleting"); + if (kDebugMode) { + print("Deleting"); + } HandleBookmark.deleteBookmark(currentProject); } }, ), IconButton( - icon: const Icon(Icons.info_outline), - onPressed: () { - Navigator.push( - context, - MaterialPageRoute(builder: (context) => const GSOCInfo()), ); - }, - ),], + icon: const Icon(Icons.info_outline), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) => const GSOCInfo()), + ); + }, + ), + ], ), body: FutureBuilder( future: _dataFetchFuture, @@ -260,7 +228,7 @@ class _GoogleSummerOfCodeScreenState extends State { return SingleChildScrollView( child: Padding( padding: - const EdgeInsets.symmetric(horizontal: 46, vertical: 16), + const EdgeInsets.symmetric(horizontal: 46, vertical: 16), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ @@ -312,7 +280,7 @@ class _GoogleSummerOfCodeScreenState extends State { child: GridView( physics: const NeverScrollableScrollPhysics(), gridDelegate: - const SliverGridDelegateWithFixedCrossAxisCount( + const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 2, childAspectRatio: 1.5 / 0.6, crossAxisSpacing: 15, @@ -391,8 +359,10 @@ class _GoogleSummerOfCodeScreenState extends State { onConfirm: (results) { setState(() { selectedLanguages = - results.isNotEmpty ? results : []; - print(selectedLanguages); + results.isNotEmpty ? results : []; + if (kDebugMode) { + print(selectedLanguages); + } filterProjects(); }); }, @@ -400,65 +370,64 @@ class _GoogleSummerOfCodeScreenState extends State { const SizedBox(height: 20), orgList.isEmpty ? _isRefreshing - ? Column( - children: const [ - Center( - child: Column( - children: [ - CircularProgressIndicator(), - SizedBox(height: 10), - Text('Refreshing...'), - ], - ) - ), - SizedBox(height: 20), - ], - ) - : Column( - children: [ - const Center(child: Text('No projects found')), - const SizedBox(height: 20), - TextButton( - onPressed: () { - _refresh(); - }, - child: const Text('Refresh'), - ), - ], - ) - : Container( - height: height, - child: ListView.builder( - itemCount: orgList.length, - itemBuilder: (context, index) { - return Padding( - padding: const EdgeInsets.symmetric(vertical: 10), - child: Container( - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(20), - boxShadow: [ - BoxShadow( - color: Colors.grey.withOpacity(0.5), - spreadRadius: 2, - blurRadius: 5, - offset: Offset(0, 3), // changes position of shadow + ? const Column( + children: [ + Center( + child: Column( + children: [ + CircularProgressIndicator(), + SizedBox(height: 10), + Text('Refreshing...'), + ], + )), + SizedBox(height: 20), + ], + ) + : Column( + children: [ + const Center( + child: Text('No projects found')), + const SizedBox(height: 20), + TextButton( + onPressed: () { + _refresh(); + }, + child: const Text('Refresh'), ), ], - ), - child: GsocProjectWidget( - index: index + 1, - modal: orgList[index], - height: height * 0.2, - width: width, - ), - ), - ); - }, - ), - ), - - + ) + : ListView.builder( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemCount: orgList.length, + itemBuilder: (context, index) { + return Padding( + padding: + const EdgeInsets.symmetric(vertical: 10), + child: Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.5), + spreadRadius: 2, + blurRadius: 5, + offset: const Offset(0, + 3), // changes position of shadow + ), + ], + ), + child: GsocProjectWidget( + index: index + 1, + modal: orgList[index], + height: height * 0.2, + width: width, + ), + ), + ); + }, + ), ], ), ), @@ -470,9 +439,6 @@ class _GoogleSummerOfCodeScreenState extends State { ); } - - - Widget _buildMultiSelectField({ required List items, required List selectedValues, @@ -496,12 +462,3 @@ class _GoogleSummerOfCodeScreenState extends State { ); } } - - - - -void main() { - runApp(MaterialApp( - home: GoogleSummerOfCodeScreen(), - )); -} \ No newline at end of file