diff --git a/.gradle/7.5/checksums/checksums.lock b/.gradle/7.5/checksums/checksums.lock new file mode 100644 index 00000000..8d85c4ca Binary files /dev/null and b/.gradle/7.5/checksums/checksums.lock differ diff --git a/.gradle/7.5/dependencies-accessors/dependencies-accessors.lock b/.gradle/7.5/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 00000000..7e20bd14 Binary files /dev/null and b/.gradle/7.5/dependencies-accessors/dependencies-accessors.lock differ diff --git a/.gradle/7.5/dependencies-accessors/gc.properties b/.gradle/7.5/dependencies-accessors/gc.properties new file mode 100644 index 00000000..e69de29b diff --git a/.gradle/7.5/executionHistory/executionHistory.lock b/.gradle/7.5/executionHistory/executionHistory.lock new file mode 100644 index 00000000..54a14acb Binary files /dev/null and b/.gradle/7.5/executionHistory/executionHistory.lock differ diff --git a/.gradle/7.5/fileChanges/last-build.bin b/.gradle/7.5/fileChanges/last-build.bin new file mode 100644 index 00000000..f76dd238 Binary files /dev/null and b/.gradle/7.5/fileChanges/last-build.bin differ diff --git a/.gradle/7.5/fileHashes/fileHashes.lock b/.gradle/7.5/fileHashes/fileHashes.lock new file mode 100644 index 00000000..344b52b7 Binary files /dev/null and b/.gradle/7.5/fileHashes/fileHashes.lock differ diff --git a/.gradle/7.5/gc.properties b/.gradle/7.5/gc.properties new file mode 100644 index 00000000..e69de29b diff --git a/.gradle/8.10/checksums/checksums.lock b/.gradle/8.10/checksums/checksums.lock new file mode 100644 index 00000000..72b4b59c Binary files /dev/null and b/.gradle/8.10/checksums/checksums.lock differ diff --git a/.gradle/8.10/dependencies-accessors/gc.properties b/.gradle/8.10/dependencies-accessors/gc.properties new file mode 100644 index 00000000..e69de29b diff --git a/.gradle/8.10/fileChanges/last-build.bin b/.gradle/8.10/fileChanges/last-build.bin new file mode 100644 index 00000000..f76dd238 Binary files /dev/null and b/.gradle/8.10/fileChanges/last-build.bin differ diff --git a/.gradle/8.10/fileHashes/fileHashes.lock b/.gradle/8.10/fileHashes/fileHashes.lock new file mode 100644 index 00000000..979b5df1 Binary files /dev/null and b/.gradle/8.10/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.10/gc.properties b/.gradle/8.10/gc.properties new file mode 100644 index 00000000..e69de29b diff --git a/.gradle/8.9/checksums/checksums.lock b/.gradle/8.9/checksums/checksums.lock new file mode 100644 index 00000000..73d9a62c Binary files /dev/null and b/.gradle/8.9/checksums/checksums.lock differ diff --git a/.gradle/8.9/checksums/md5-checksums.bin b/.gradle/8.9/checksums/md5-checksums.bin new file mode 100644 index 00000000..dc1bc089 Binary files /dev/null and b/.gradle/8.9/checksums/md5-checksums.bin differ diff --git a/.gradle/8.9/checksums/sha1-checksums.bin b/.gradle/8.9/checksums/sha1-checksums.bin new file mode 100644 index 00000000..04a545e9 Binary files /dev/null and b/.gradle/8.9/checksums/sha1-checksums.bin differ diff --git a/.gradle/8.9/dependencies-accessors/gc.properties b/.gradle/8.9/dependencies-accessors/gc.properties new file mode 100644 index 00000000..e69de29b diff --git a/.gradle/8.9/fileChanges/last-build.bin b/.gradle/8.9/fileChanges/last-build.bin new file mode 100644 index 00000000..f76dd238 Binary files /dev/null and b/.gradle/8.9/fileChanges/last-build.bin differ diff --git a/.gradle/8.9/fileHashes/fileHashes.lock b/.gradle/8.9/fileHashes/fileHashes.lock new file mode 100644 index 00000000..f3ab7007 Binary files /dev/null and b/.gradle/8.9/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.9/gc.properties b/.gradle/8.9/gc.properties new file mode 100644 index 00000000..e69de29b diff --git a/.gradle/9.2.0/checksums/checksums.lock b/.gradle/9.2.0/checksums/checksums.lock new file mode 100644 index 00000000..a9d0d7d7 Binary files /dev/null and b/.gradle/9.2.0/checksums/checksums.lock differ diff --git a/.gradle/9.2.0/fileChanges/last-build.bin b/.gradle/9.2.0/fileChanges/last-build.bin new file mode 100644 index 00000000..f76dd238 Binary files /dev/null and b/.gradle/9.2.0/fileChanges/last-build.bin differ diff --git a/.gradle/9.2.0/fileHashes/fileHashes.bin b/.gradle/9.2.0/fileHashes/fileHashes.bin new file mode 100644 index 00000000..a7b73027 Binary files /dev/null and b/.gradle/9.2.0/fileHashes/fileHashes.bin differ diff --git a/.gradle/9.2.0/fileHashes/fileHashes.lock b/.gradle/9.2.0/fileHashes/fileHashes.lock new file mode 100644 index 00000000..b747ae7d Binary files /dev/null and b/.gradle/9.2.0/fileHashes/fileHashes.lock differ diff --git a/.gradle/9.2.0/gc.properties b/.gradle/9.2.0/gc.properties new file mode 100644 index 00000000..e69de29b diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 989158c2..a56cbe47 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties index 47c8eb57..19d647f7 100644 --- a/.gradle/buildOutputCleanup/cache.properties +++ b/.gradle/buildOutputCleanup/cache.properties @@ -1,2 +1,2 @@ -#Fri May 15 12:45:26 IST 2026 -gradle.version=9.0-milestone-1 +#Sun May 31 01:17:24 IST 2026 +gradle.version=8.9 diff --git a/.gradle/nb-cache/OpSo-2003076190/project-info.ser b/.gradle/nb-cache/OpSo-2003076190/project-info.ser new file mode 100644 index 00000000..807e112d Binary files /dev/null and b/.gradle/nb-cache/OpSo-2003076190/project-info.ser differ diff --git a/.gradle/nb-cache/subprojects.ser b/.gradle/nb-cache/subprojects.ser new file mode 100644 index 00000000..9e65befe Binary files /dev/null and b/.gradle/nb-cache/subprojects.ser differ diff --git a/.gradle/nb-cache/trust/7098073862A8114C3A0C5B0E5D2DF4F86AB36BFA2AD766A33FE13BD26B5E63D8 b/.gradle/nb-cache/trust/7098073862A8114C3A0C5B0E5D2DF4F86AB36BFA2AD766A33FE13BD26B5E63D8 new file mode 100644 index 00000000..c8968772 --- /dev/null +++ b/.gradle/nb-cache/trust/7098073862A8114C3A0C5B0E5D2DF4F86AB36BFA2AD766A33FE13BD26B5E63D8 @@ -0,0 +1 @@ +A2DF3C4542A7B61A2FFEAD947CD707E0CB2A823993642ADF96BB673682E05965 diff --git a/lib/home_page.dart b/lib/home_page.dart index 13452339..d8c87dff 100644 --- a/lib/home_page.dart +++ b/lib/home_page.dart @@ -37,6 +37,27 @@ class HomePage extends StatefulWidget { } class _HomePageState extends State { + +String selectedCategory = 'All'; + +final List categories = [ + 'All', + 'Stipend', + 'Mentorship', + 'Beginner Friendly', + 'Community', +]; + +List get filteredPrograms { + if (selectedCategory == 'All') { + return programs; + } + + return programs + .where((program) => program.category == selectedCategory) + .toList(); +} + @override void initState() { showNotification(); @@ -78,69 +99,100 @@ class _HomePageState extends State { final List programs = [ Program( - title: 'Google Summer of Code', - imageAssetPath: 'assets/gsoc_logo.png', - ), - Program( - title: 'Google Season of Docs', - imageAssetPath: 'assets/Google_season_of_docs.png', - ), - Program( - title: 'FOSSASIA Codeheat', - imageAssetPath: 'assets/fossasia.png', - ), - Program( - title: 'Major League Hacking Fellowship', - imageAssetPath: 'assets/mlh_logo.jpg', - ), - Program( - title: 'Djangonaut Space', - imageAssetPath: 'assets/djangonaut.png', - ), - Program( - title: 'Summer of Bitcoin', - imageAssetPath: 'assets/summer_of_bitcoin_logo.png', - ), - Program( - title: 'Hyperledger', - imageAssetPath: 'assets/hyperledger.png', - ), - Program( - title: 'Linux Foundation', - imageAssetPath: 'assets/linux_foundation_logo.png', - ), - Program( - title: 'Hacktoberfest', - imageAssetPath: 'assets/hacktoberfest.png', - ), - Program( - title: 'Github Campus Expert', - imageAssetPath: 'assets/git_campus_logo.png', - ), - Program( - title: 'Outreachy', - imageAssetPath: 'assets/outreachy.png', - ), - Program( - title: 'GirlScript Summer of Code', - imageAssetPath: 'assets/girlscript_logo.png', - ), - Program( - title: 'Social Winter of Code', - imageAssetPath: 'assets/swoc.png', - ), - Program( - title: 'Season of KDE', - imageAssetPath: 'assets/sokde.png', - ), - Program( - title: 'Redox OS Summer of Code', - imageAssetPath: 'assets/redox.png', - ), - Program( - title: 'Open Summer of Code', - imageAssetPath: 'assets/open_summer_of_code.png', - ), + title: 'Google Summer of Code', + imageAssetPath: 'assets/gsoc_logo.png', + category: 'Stipend', +), + +Program( + title: 'Google Season of Docs', + imageAssetPath: 'assets/Google_season_of_docs.png', + category: 'Stipend', +), + +Program( + title: 'FOSSASIA Codeheat', + imageAssetPath: 'assets/fossasia.png', + category: 'Stipend', +), + +Program( + title: 'Major League Hacking Fellowship', + imageAssetPath: 'assets/mlh_logo.jpg', + category: 'Stipend', +), + +Program( + title: 'Djangonaut Space', + imageAssetPath: 'assets/djangonaut.png', + category: 'Mentorship', +), + +Program( + title: 'Summer of Bitcoin', + imageAssetPath: 'assets/summer_of_bitcoin_logo.png', + category: 'Stipend', +), + +Program( + title: 'Hyperledger', + imageAssetPath: 'assets/hyperledger.png', + category: 'Mentorship', +), + +Program( + title: 'Linux Foundation', + imageAssetPath: 'assets/linux_foundation_logo.png', + category: 'Mentorship', +), + +Program( + title: 'Hacktoberfest', + imageAssetPath: 'assets/hacktoberfest.png', + category: 'Beginner Friendly', +), + +Program( + title: 'Github Campus Expert', + imageAssetPath: 'assets/git_campus_logo.png', + category: 'Community', +), + +Program( + title: 'Outreachy', + imageAssetPath: 'assets/outreachy.png', + category: 'Stipend', +), + +Program( + title: 'GirlScript Summer of Code', + imageAssetPath: 'assets/girlscript_logo.png', + category: 'Beginner Friendly', +), + +Program( + title: 'Social Winter of Code', + imageAssetPath: 'assets/swoc.png', + category: 'Beginner Friendly', +), + +Program( + title: 'Season of KDE', + imageAssetPath: 'assets/sokde.png', + category: 'Mentorship', +), + +Program( + title: 'Redox OS Summer of Code', + imageAssetPath: 'assets/redox.png', + category: 'Mentorship', +), + +Program( + title: 'Open Summer of Code', + imageAssetPath: 'assets/open_summer_of_code.png', + category: 'Community', +), ]; Widget _buildDrawerCard({ @@ -600,7 +652,7 @@ class _HomePageState extends State { Icon(Icons.library_books, color: Colors.white, size: 14.sp), SizedBox(width: 8.w), Text( - '${programs.length} Programs', + '${filteredPrograms.length} Programs', style: TextStyle( color: Colors.white, fontSize: 12.sp, @@ -617,34 +669,90 @@ class _HomePageState extends State { ), ), ), - SliverPadding( - padding: EdgeInsets.all(16.w), - sliver: SliverGrid( - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 2, - crossAxisSpacing: 16.w, - mainAxisSpacing: 16.h, - childAspectRatio: 0.82, - ), - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) { - final program = programs[index]; - return ProgramOption( - title: program.title, - imageAssetPath: program.imageAssetPath, - onTap: () { - navigateToScreen(context, program); + SliverToBoxAdapter( + child: Padding( + padding: EdgeInsets.symmetric(vertical: 12.h), + child: SizedBox( + height: 45.h, + child: ListView.builder( + scrollDirection: Axis.horizontal, + padding: EdgeInsets.symmetric(horizontal: 16.w), + itemCount: categories.length, + itemBuilder: (context, index) { + final category = categories[index]; + final isSelected = selectedCategory == category; + + return Padding( + padding: EdgeInsets.only(right: 8.w), + child: ChoiceChip( + showCheckmark: false, + label: Text(category), + selected: selectedCategory == category, + onSelected: (_) { + setState(() { + selectedCategory = category; + }); + }, + + selectedColor: Colors.orange.shade400, + + backgroundColor: Theme.of(context).brightness == Brightness.dark + ? Colors.grey.shade900 + : Colors.white, + + side: BorderSide( + color: selectedCategory == category + ? Colors.orange.shade400 + : Colors.orange.shade300, + ), + + labelStyle: TextStyle( + color: selectedCategory == category + ? Colors.white + : Theme.of(context).brightness == Brightness.dark + ? Colors.white + : Colors.black87, + fontWeight: FontWeight.w600, + ), + + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + ) + ); }, - ); - }, - childCount: programs.length, + ), + ), ), ), - ), - ], - ), - ); - } + SliverPadding( + padding: EdgeInsets.all(16.w), + sliver: SliverGrid( + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + crossAxisSpacing: 16.w, + mainAxisSpacing: 16.h, + childAspectRatio: 0.82, + ), + delegate: SliverChildBuilderDelegate( + (BuildContext context, int index) { + final program = filteredPrograms[index]; + return ProgramOption( + title: program.title, + imageAssetPath: program.imageAssetPath, + onTap: () { + navigateToScreen(context, program); + }, + ); + }, + childCount: filteredPrograms.length, + ), + ), + ), + ], + ), + ); + } void navigateToScreen(BuildContext context, Program program) { switch (program.title) { @@ -892,70 +1000,101 @@ class ProgramOption extends StatelessWidget { class ProgramSearchDelegate extends SearchDelegate { final List programs = [ - Program( - title: 'Google Summer of Code', - imageAssetPath: 'assets/gsoc_logo.png', - ), - Program( - title: 'Google Season of Docs', - imageAssetPath: 'assets/Google_season_of_docs.png', - ), - Program( - title: 'FOSSASIA Codeheat', - imageAssetPath: 'assets/fossasia.png', - ), - Program( - title: 'Major League Hacking Fellowship', - imageAssetPath: 'assets/mlh_logo.jpg', - ), - Program( - title: 'Djangonaut Space', - imageAssetPath: 'assets/djangonaut.png', - ), - Program( - title: 'Hyperledger', - imageAssetPath: 'assets/hyperledger.png', - ), - Program( - title: 'Summer of Bitcoin', - imageAssetPath: 'assets/summer_of_bitcoin_logo.png', - ), - Program( - title: 'Hacktoberfest', - imageAssetPath: 'assets/hacktoberfest.png', - ), - Program( - title: 'Github Campus Expert', - imageAssetPath: 'assets/git_campus_logo.png', - ), - Program( - title: 'Redox OS Summer of Code', - imageAssetPath: 'assets/redox.png', - ), - Program( - title: 'Linux Foundation', - imageAssetPath: 'assets/linux_foundation_logo.png', - ), - Program( - title: 'Outreachy', - imageAssetPath: 'assets/outreachy.png', - ), - Program( - title: 'GirlScript Summer of Code', - imageAssetPath: 'assets/girlscript_logo.png', - ), - Program( - title: 'Social Winter of Code', - imageAssetPath: 'assets/swoc.png', - ), - Program( - title: 'Season of KDE', - imageAssetPath: 'assets/sokde.png', - ), - Program( - title: 'Open Summer of Code', - imageAssetPath: 'assets/open_summer_of_code.png', - ), + Program( + title: 'Google Summer of Code', + imageAssetPath: 'assets/gsoc_logo.png', + category: 'Stipend', +), + +Program( + title: 'Google Season of Docs', + imageAssetPath: 'assets/Google_season_of_docs.png', + category: 'Stipend', +), + +Program( + title: 'FOSSASIA Codeheat', + imageAssetPath: 'assets/fossasia.png', + category: 'Stipend', +), + +Program( + title: 'Major League Hacking Fellowship', + imageAssetPath: 'assets/mlh_logo.jpg', + category: 'Stipend', +), + +Program( + title: 'Djangonaut Space', + imageAssetPath: 'assets/djangonaut.png', + category: 'Mentorship', +), + +Program( + title: 'Summer of Bitcoin', + imageAssetPath: 'assets/summer_of_bitcoin_logo.png', + category: 'Stipend', +), + +Program( + title: 'Hyperledger', + imageAssetPath: 'assets/hyperledger.png', + category: 'Mentorship', +), + +Program( + title: 'Linux Foundation', + imageAssetPath: 'assets/linux_foundation_logo.png', + category: 'Mentorship', +), + +Program( + title: 'Hacktoberfest', + imageAssetPath: 'assets/hacktoberfest.png', + category: 'Beginner Friendly', +), + +Program( + title: 'Github Campus Expert', + imageAssetPath: 'assets/git_campus_logo.png', + category: 'Community', +), + +Program( + title: 'Outreachy', + imageAssetPath: 'assets/outreachy.png', + category: 'Stipend', +), + +Program( + title: 'GirlScript Summer of Code', + imageAssetPath: 'assets/girlscript_logo.png', + category: 'Beginner Friendly', +), + +Program( + title: 'Social Winter of Code', + imageAssetPath: 'assets/swoc.png', + category: 'Beginner Friendly', +), + +Program( + title: 'Season of KDE', + imageAssetPath: 'assets/sokde.png', + category: 'Mentorship', +), + +Program( + title: 'Redox OS Summer of Code', + imageAssetPath: 'assets/redox.png', + category: 'Mentorship', +), + +Program( + title: 'Open Summer of Code', + imageAssetPath: 'assets/open_summer_of_code.png', + category: 'Community', +), ]; @override @@ -1167,9 +1306,11 @@ class ProgramSearchDelegate extends SearchDelegate { class Program { final String title; final String imageAssetPath; + final String category; Program({ required this.title, required this.imageAssetPath, + required this.category, }); } \ No newline at end of file