1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- import 'package:flutter/material.dart';
- import 'package:flutter_riverpod/flutter_riverpod.dart';
- import 'package:flutter_cache_manager/flutter_cache_manager.dart';
- import 'package:veloe_kemono_party_flutter/app_layout.dart';
- import 'package:veloe_kemono_party_flutter/kemono_client.dart';
- import 'package:veloe_kemono_party_flutter/models/creator.dart';
- import 'package:veloe_kemono_party_flutter/models/nav_item.dart';
- import 'package:veloe_kemono_party_flutter/models/post.dart';
- import 'package:veloe_kemono_party_flutter/pages/home_screen.dart';
- import 'package:veloe_kemono_party_flutter/pages/posts_screen.dart';
- import 'package:veloe_kemono_party_flutter/posts_notifier.dart';
- // Providers
- final searchQueryProvider = StateProvider<String>((ref) => '');
- final selectedCreatorProvider = StateProvider<Creator?>((ref) => null);
- final postsPageProvider = StateProvider<int>((ref) => 0);
- final kemonoClientProvider = Provider<KemonoClient>((ref) => KemonoClient());
- final creatorsProvider = FutureProvider<List<Creator>>((ref) async {
- final query = ref.watch(searchQueryProvider);
- final client = ref.read(kemonoClientProvider);
- final creators = await client.getCreators();
-
- return creators.where((creator) =>
- creator.name.toLowerCase().contains(query.toLowerCase()) ||
- creator.service.toLowerCase().contains(query.toLowerCase())
- ).toList();
- });
- final postsProvider = StateNotifierProvider.autoDispose
- .family<PostsNotifier, AsyncValue<List<Post>>, (String, String, String)>((ref, args) {
- final (creatorId, service, query) = args;
- return PostsNotifier(
- creatorId: creatorId,
- service: service,
- query: query,
- client: ref.read(kemonoClientProvider),
- );
- });
- // Image Caching
- final imageCacheManager = CacheManager(
- Config(
- 'kemono_images',
- stalePeriod: const Duration(days: 30),
- maxNrOfCacheObjects: 1024,
- fileService: HttpFileService(),
- ),
- );
- // Main Application
- void main() => runApp(
- const ProviderScope(
- child: MaterialApp(
- home: AppLayout(
- navItems: [
- NavItem(
- label: 'Home',
- icon: Icons.home,
- page: HomeScreen(),
- ),
- NavItem(
- label: 'Global Feed (Rukis)',
- icon: Icons.public,
- page: PostsScreen( creatorId:'82522', service: 'patreon', withAppBar: false,),
- ),
- NavItem(
- label: 'Settings',
- icon: Icons.settings,
- page: Placeholder(), // Replace with actual SettingsScreen
- ),
- ],
- ),
- ),
- ),
- );
|