fbae_core 0.2.0
fbae_core: ^0.2.0 copied to clipboard
Flutter Base App Engine — pluggable infrastructure package.
import 'package:fbae_core/fbae_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:go_router/go_router.dart';
import 'core/token_store.dart';
import 'features/products/products_page.dart';
import 'features/search/search_page.dart';
import 'features/settings/settings_page.dart';
final _router = GoRouter(
initialLocation: '/products',
routes: FbaeRouter.buildRoutes(
config: TabConfig([
const TabItemConfig(
icon: Icon(Icons.shopping_bag),
label: 'Products',
initialLocation: '/products',
),
const TabItemConfig(
icon: Icon(Icons.search),
label: 'Search',
initialLocation: '/search',
),
const TabItemConfig(
icon: Icon(Icons.settings),
label: 'Settings',
initialLocation: '/settings',
),
]),
branches: [
StatefulShellBranch(routes: [
GoRoute(path: '/products', builder: (_, _) => const ProductsPage()),
]),
StatefulShellBranch(routes: [
GoRoute(path: '/search', builder: (_, _) => const SearchPage()),
]),
StatefulShellBranch(routes: [
GoRoute(path: '/settings', builder: (_, _) => const SettingsPage()),
]),
],
),
);
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
final tokenStore = TokenStore();
await FbaeCore.init(
config: FbaeConfig.dev(baseUrl: 'https://dummyjson.com'),
tokenProvider: tokenStore.tokenProvider,
onRefreshToken: tokenStore.refreshCallback,
);
await tokenStore.login();
runApp(const FbaeExampleApp());
}
class FbaeExampleApp extends StatelessWidget {
const FbaeExampleApp({super.key});
@override
Widget build(BuildContext context) {
return FbaeThemeProvider(
child: BlocBuilder<ThemeCubit, ThemeMode>(
builder: (context, themeMode) => MaterialApp.router(
title: 'fbae_core Example',
routerConfig: _router,
theme: FbaeTheme.build(colors: FbaeColors()),
darkTheme: FbaeTheme.build(
colors: FbaeColors(brightness: Brightness.dark),
),
themeMode: themeMode,
debugShowCheckedModeBanner: false,
),
),
);
}
}