Comments (10)
Sure
from auto_route_library.
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.
I'm also getting another issue with this, whenever I use context.pushRoute(const HomeRoute())
The CategoriesCubit
calling getCategoriesList()
function
from auto_route_library.
@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.
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.
@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.
@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.
@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.
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.
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)
- Redirect on arg parsing fail HOT 5
- Back button on Android closes App on Sub route
- Implement Persist Navigation State Feature
- Back navigation blank issue still persists in 8.1.1 HOT 1
- removeWhere removes the wrong route HOT 1
- PopScope not working on web browser back button HOT 1
- How to add new Nested Navigation Tab dynamically?
- Deeplink getting called multiple times HOT 12
- Child pages are not rendered after exiting a nested initial page with the back gesture and launching from the Android launcher. HOT 9
- Regression on StackRouter.popAndPushAll()
- Cannot reload route with callback parameter HOT 1
- [BUG] deeplinkBuilder is not called
- Codegen can't find widgets, they need to be imported into the app_router file HOT 1
- Inconsistent ReevaluateListenable Behavior on Web vs. Android
- didPop & didPopNext not called
- IOS swipe back make TextField not focus when tab on TextField when app build with flutter 3.22 HOT 2
- CustomRoute() transition gets overridden by defaultRouteType
- Handling of back navigation in nested routes, ignored PopScope HOT 2
- pushing to same screen issue
- New Xcode error out of the blue HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from auto_route_library.