Code Monkey home page Code Monkey logo

Comments (10)

Cavin6080 avatar Cavin6080 commented on May 24, 2024 1

Sure

from auto_route_library.

Milad-Akarie avatar Milad-Akarie commented on May 24, 2024 1

first make BottomNavigationBarScreen stateFull,
create your block inside the BottomNavigationBarScreen.state normally like myBlock = MyBlock()..runSomething();
pass the instance you created to any route
HomeRoute(myBlock: myBlock);
insdie HomeScreen you need to define a parameter that accepts MyBlock ofcourse.
lastly provide the bloc instance as a value inside HomeScreen
BlockProvider.value(value: myBlock, child: ....)

from auto_route_library.

cavin-7span avatar cavin-7span commented on May 24, 2024

I'm also getting another issue with this, whenever I use context.pushRoute(const HomeRoute()) The CategoriesCubit calling getCategoriesList() function

from auto_route_library.

Milad-Akarie avatar Milad-Akarie commented on May 24, 2024

@cavin-7span First of all can you wrap AutoRouter inside of the widget instead of extending it?

  @override
  Widget build(BuildContext context) {
    return BlockProvider(
      create: ...,
      child: AutoRouter(),
    );
  }

from auto_route_library.

cavin-7span avatar cavin-7span commented on May 24, 2024

I did the changes as you suggested:

@RoutePage()
class HomeCategoryProviderPage extends StatelessWidget {
  const HomeCategoryProviderPage({super.key});

  @override
  Widget build(BuildContext context) {
    return BlocProvider(
      create: (context) => CategoriesCubit(
        categoriesRepository: const CategoriesRepository(),
      )..getCategoriesList(),
      child: const AutoRouter(),
    );
  }

But still the getCategoriesList() is calling 2 times. First when it loads the Home Screen, and the second time is when I click on second tab in the Bottom Navigation Bar

from auto_route_library.

Milad-Akarie avatar Milad-Akarie commented on May 24, 2024

@cavin-7span not sure what the issue is, it looks like HomeCategoryProviderPage is losing state for some reason, could you create a simple repo that repreduces the issue?

from auto_route_library.

Cavin6080 avatar Cavin6080 commented on May 24, 2024

@Milad-Akarie
Here's the link of the Repository with the reproducible code for the same: https://github.com/Cavin6080/auto-route-issue-with-global-bloc

from auto_route_library.

Cavin6080 avatar Cavin6080 commented on May 24, 2024

@Milad-Akarie Here's the link of the Repository with the reproducible code for the same: https://github.com/Cavin6080/auto-route-issue-with-global-bloc

Hey @Milad-Akarie,
Is there any update on it?

from auto_route_library.

Milad-Akarie avatar Milad-Akarie commented on May 24, 2024

Hey @cavin-7span your setup loads two different stacks, it's normal your bloc gets initiated twice.
this is how your graph looks like

- BottomNavigationbarRoute
       - HomeCategoryProviderRoute / HomeRoute 
       - HomeCategoryProviderRoute / ProfileRoute
       - ExploreRoute

as you can see HomeCategoryProviderRoute exists in two different locations in the graph, and it's being created in each location.

the only valid setup for your use case is to have BottomNavigationbarRoute provide the bloc so it's accessed in all tabs and remove HomeCategoryProviderRoute

edit: you can also create your bloc inside BottomNavigationbaScreen and provide it as a value to the tabs that needs it.

from auto_route_library.

Cavin6080 avatar Cavin6080 commented on May 24, 2024

Hey @Milad-Akarie,

Here's my BottomNavigationBar screen's UI:

@RoutePage()
class BottomNavigationBarScreen extends StatelessWidget {
  const BottomNavigationBarScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return AutoTabsRouter(
      homeIndex: 0,
      routes: const [
        HomeRoute(),
        CategoriesRoute(),
        CartRoute(),
        AccountRoute(),
      ],
      transitionBuilder: (context, child, animation) => FadeTransition(
        opacity: animation,
        // the passed child is technically our animated selected-tab page
        child: child,
      ),
      builder: (context, child) {
        // obtain the scoped TabsRouter controller using context
        final tabsRouter = AutoTabsRouter.of(context);
        final activeIndex = tabsRouter.activeIndex;
        // Here we're building our Scaffold inside of AutoTabsRouter
        // to access the tabsRouter controller provided in this context
        return Scaffold(
          resizeToAvoidBottomInset: true,
          body: child,
          bottomNavigationBar: AppBottomNavigationBar(
            destinations: [
              NavigationDestination(
                selectedIcon: Icon(
                  Icons.home,
                  color: context.color.primary,
                ),
                icon: Icon(Icons.home_outlined, color: context.colorScheme.darkGrey),
                label: context.t.home,
              ),
              NavigationDestination(
                selectedIcon: Icon(
                  Icons.category,
                  color: context.color.primary,
                ),
                icon: Icon(Icons.category_outlined, color: context.colorScheme.darkGrey),
                label: context.t.categories,
              ),
              NavigationDestination(
                selectedIcon: Icon(
                  Icons.shopping_cart,
                  color: context.color.primary,
                ),
                icon: Icon(Icons.shopping_cart_outlined, color: context.colorScheme.darkGrey),
                label: context.t.cart,
              ),
              NavigationDestination(
                selectedIcon: Icon(
                  Icons.person,
                  color: context.color.primary,
                ),
                icon: Icon(Icons.person_outline_rounded, color: context.colorScheme.darkGrey),
                label: context.t.account,
              ),
            ],
            onDestinationSelected: tabsRouter.setActiveIndex,
            selectedIndex: activeIndex,
          ),
        );
      },
    );
  }
}

Could you please let me know how can I pass one bloc to only 2 routes?(In my case, to HomeRoute and CategoryRoute)

from auto_route_library.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.