main.dart 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_riverpod/flutter_riverpod.dart';
  3. import 'package:flutter_cache_manager/flutter_cache_manager.dart';
  4. import 'package:veloe_kemono_party_flutter/app_layout.dart';
  5. import 'package:veloe_kemono_party_flutter/kemono_client.dart';
  6. import 'package:veloe_kemono_party_flutter/models/creator.dart';
  7. import 'package:veloe_kemono_party_flutter/models/nav_item.dart';
  8. import 'package:veloe_kemono_party_flutter/models/post.dart';
  9. import 'package:veloe_kemono_party_flutter/pages/home_screen.dart';
  10. import 'package:veloe_kemono_party_flutter/pages/posts_screen.dart';
  11. import 'package:veloe_kemono_party_flutter/posts_notifier.dart';
  12. // Providers
  13. final searchQueryProvider = StateProvider<String>((ref) => '');
  14. final selectedCreatorProvider = StateProvider<Creator?>((ref) => null);
  15. final postsPageProvider = StateProvider<int>((ref) => 0);
  16. final kemonoClientProvider = Provider<KemonoClient>((ref) => KemonoClient());
  17. final creatorsProvider = FutureProvider<List<Creator>>((ref) async {
  18. final query = ref.watch(searchQueryProvider);
  19. final client = ref.read(kemonoClientProvider);
  20. final creators = await client.getCreators();
  21. return creators.where((creator) =>
  22. creator.name.toLowerCase().contains(query.toLowerCase()) ||
  23. creator.service.toLowerCase().contains(query.toLowerCase())
  24. ).toList();
  25. });
  26. final postsProvider = StateNotifierProvider.autoDispose
  27. .family<PostsNotifier, AsyncValue<List<Post>>, (String, String, String)>((ref, args) {
  28. final (creatorId, service, query) = args;
  29. return PostsNotifier(
  30. creatorId: creatorId,
  31. service: service,
  32. query: query,
  33. client: ref.read(kemonoClientProvider),
  34. );
  35. });
  36. // Image Caching
  37. final imageCacheManager = CacheManager(
  38. Config(
  39. 'kemono_images',
  40. stalePeriod: const Duration(days: 30),
  41. maxNrOfCacheObjects: 1024,
  42. fileService: HttpFileService(),
  43. ),
  44. );
  45. // Main Application
  46. void main() => runApp(
  47. const ProviderScope(
  48. child: MaterialApp(
  49. home: AppLayout(
  50. navItems: [
  51. NavItem(
  52. label: 'Home',
  53. icon: Icons.home,
  54. page: HomeScreen(),
  55. ),
  56. NavItem(
  57. label: 'Global Feed (Rukis)',
  58. icon: Icons.public,
  59. page: PostsScreen( creatorId:'82522', service: 'patreon', withAppBar: false,),
  60. ),
  61. NavItem(
  62. label: 'Settings',
  63. icon: Icons.settings,
  64. page: Placeholder(), // Replace with actual SettingsScreen
  65. ),
  66. ],
  67. ),
  68. ),
  69. ),
  70. );