wahyz_bootstrap 0.0.4 copy "wahyz_bootstrap: ^0.0.4" to clipboard
wahyz_bootstrap: ^0.0.4 copied to clipboard

Bootstrap for WahyzDAD

example/lib/main.dart

import 'package:example/firebase_options.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';

import 'package:wahyz_bootstrap/domain/models/base/model_registry.dart';
import 'package:wahyz_bootstrap/domain/models/concrete_model_factory/firestore_user_factory.dart';
import 'package:wahyz_bootstrap/domain/models/concrete_model_factory/reservation_factory.dart';
import 'package:wahyz_bootstrap/domain/models/firestore_user.dart';
import 'package:wahyz_bootstrap/domain/models/reservation.dart';

import 'constants/constants.dart';

import 'domain/models/concrete_model_factory/ksmer_factory.dart';

import 'domain/models/concrete_model_factory/vehicle_factory.dart';
import 'domain/models/ksmer.dart';

import 'domain/models/vehicle.dart';
import 'utils/go_router_provider.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );

  // final initFuture = MobileAds.instance.initialize();
  // final adState = AdState(initFuture);

  runApp(const ProviderScope(
    child: MyApp(),
  ));
}

class MyApp extends HookConsumerWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context, WidgetRef ref) {
    // ref.watch(baseModelRegistryProvider.notifier)
    ref.watch(baseModelGeneralRegistryProvider.notifier)
      ..register<Reservation>(
        factory: ref.watch(reservationFactoryProvider.notifier),
      )
      // ..register<Reservation<Ksmer>>(
      //   factory: ref.watch(reservationFactoryProvider<Ksmer>().notifier),
      // )
      ..register<Ksmer>(
        factory: ref.watch(ksmerFactoryProvider.notifier),
      )
      ..register<Vehicle>(
        factory: ref.watch(vehicleFactoryProvider.notifier),
      )
      ..register<FirestoreUser>(
        factory: ref.watch(firestoreUserFactoryProvider.notifier),
      );
    final goRouter = ref.watch(goRouterProvider);

    // list up all goRouter routes
    debugPrint("[[goRouter]]: ${goRouter.configuration.routes}");

    return _EagerInitialization(
      child: MaterialApp.router(
        debugShowCheckedModeBanner: false,
        title: 'KSM Omniverse App',
        routerConfig: goRouter,
        theme: ThemeData(
          colorScheme: ColorScheme.fromSeed(seedColor: seedColor),
          useMaterial3: true,
        ),
      ),
    );
  }
}

class _EagerInitialization extends ConsumerWidget {
  // bootstrap the app by eagerly initializing providers
  const _EagerInitialization({required this.child});
  final Widget child;

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    // Eagerly initialize providers by watching them.
    // By using "watch", the provider will stay alive and not be disposed.

    debugPrint(
        // "[[baseModelRegistryProvider]]: ${ref.watch(baseModelRegistryProvider)}");
        "[[baseModelRegistryProvider]]: ${ref.watch(baseModelGeneralRegistryProvider)}");

    return child;
  }
}