Skip to content

gzeinnumer/flutter_navigator_simple

Repository files navigation

flutter_navigator_simple

flutter_bloc: ^7.2.0
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_navigator_simple/cubit/page/page_cubit.dart';
import 'package:flutter_navigator_simple/cubit/page/page_state.dart';
import 'package:flutter_navigator_simple/view/menu_view.dart';
import 'package:flutter_navigator_simple/view/page_1_view.dart';
import 'package:flutter_navigator_simple/view/page_2_view.dart';
import 'package:flutter_navigator_simple/view/splash_screen_view.dart';

class AppNavigator extends StatelessWidget {
  const AppNavigator({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return BlocBuilder<PageCubit, PageState>(builder: (context, state) {
      return Navigator(
        pages: [
          if (state is PageSplashScreenState)
            const MaterialPage(child: SplashScreenView()),

          if(state is PageMenuState)
            const MaterialPage(child: MenuView()),

          if(state is PagePage1State)
            const MaterialPage(child: Page1View()),

          if(state is PagePage2State)
            const MaterialPage(child: Page2View()),
        ],
        onPopPage: (route, result) {
          return route.didPop(result);
        },
      );
    });
  }
}
  • splash_screen_view.dart
import 'package:flutter/material.dart';

class SplashScreenView extends StatelessWidget {
  const SplashScreenView({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("SplashScreen"),
      ),
      body: const Center(
        child: CircularProgressIndicator(),
      ),
    );
  }
}
  • menu_view.dart
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_navigator_simple/cubit/page/page_cubit.dart';
import 'package:flutter_navigator_simple/cubit/page/page_state.dart';

class MenuView extends StatelessWidget {
  const MenuView({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Menu"),
      ),
      body: Center(
        child: Column(
          children: [
            BlocBuilder<PageCubit, PageState>(builder: (context, state) {
              return ElevatedButton(
                child: const Text("Page 1"),
                onPressed: () {
                  context.read<PageCubit>().showPage1View();
                },
              );
            }),
            BlocBuilder<PageCubit, PageState>(builder: (context, state) {
              return ElevatedButton(
                child: const Text("page 2"),
                onPressed: () {
                  context.read<PageCubit>().showPage2View("Zein");
                },
              );
            }),
          ],
        ),
      ),
    );
  }
}
  • page_cubit.dart
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_navigator_simple/cubit/page/page_state.dart';
import 'package:flutter_navigator_simple/example_repo.dart';
import 'package:flutter_navigator_simple/view/page_2_view.dart';

class PageCubit extends Cubit<PageState> {
  final ExampleRepo exampleRepo;

  //sudah diwakilkan di bawah
  //// void showSplashScreenView() => emit(PageSplashScreenState());
  PageCubit({required this.exampleRepo}) : super(PageSplashScreenState()) {
    checkCurrentPageState();
  }

  void checkCurrentPageState() async {
    try {
      final name = await exampleRepo.exampleFunction("");
      if(name.isNotEmpty) {
        emit(PagePage2State(data: name));
      } else {
        emit(PageMenuState());
      }
    } on Exception {
      emit(PageSplashScreenState());
    }
  }

  void showSplashScreenView() => emit(PageSplashScreenState());

  void showMenuView() => emit(PageMenuState());

  void showPage1View() => emit(PagePage1State());

  void showPage2View(String str) => emit(PagePage2State(data: str));
}

Copyright 2022 M. Fadli Zein

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published