Reputation: 1844
I tried to add these () brackets (at line 29), still it is showing me an error. (I saw it here)
And also for those ! marks, it is showing me these warnings - The '!' will have no effect because the receiver can't be null.
And if I remove any of them, it is giving me an error. I also tried to add ? null check operator for routeBuilders
, still it was showing me null-safety error.
Here is my code -
import 'package:flutter/material.dart';
import 'package:flutter_instagram_clone_final/Screens/nav/widgets/widgets.dart';
import 'package:flutter_instagram_clone_final/Screens/screens.dart';
import 'package:flutter_instagram_clone_final/config/custom_router.dart';
import 'package:flutter_instagram_clone_final/enums/bottom_nav_item.dart';
class TabNavigator extends StatelessWidget {
static const String tabNavigatorRoot = '/';
final GlobalKey<NavigatorState> navigatorKey;
final BottomNavItem item;
const TabNavigator({
Key? key,
required this.navigatorKey,
required this.item,
}) : super(key: key);
@override
Widget build(BuildContext context) {
final routeBuilders = _routeBuilders();
return Navigator(
key: navigatorKey,
initialRoute: tabNavigatorRoot,
onGenerateInitialRoutes: (_, initialRoute) {
return [
MaterialPageRoute(
settings: RouteSettings(name: tabNavigatorRoot),
builder: (context) => _routeBuilders!,
)
];
},
onGenerateRoute: CustomRouter.onGenerateNestedRoute,
);
}
Map<String, WidgetBuilder> _routeBuilders() {
return {tabNavigatorRoot: (context) => _getScreen(context, item)};
}
Widget _getScreen(BuildContext context, BottomNavItem item) {
switch (item) {
case BottomNavItem.feed:
return FeedScreen();
case BottomNavItem.search:
return SearchScreen();
case BottomNavItem.create:
return CreatePostScreen();
case BottomNavItem.notifications:
return NotificationScreen();
case BottomNavItem.profile:
return ProfileScreen();
default:
return Scaffold();
}
}
}
Upvotes: 0
Views: 517
Reputation: 1844
Actually, I figured out the solution. It was just writing Map in declaration of routebuilders -
final Map routeBuilders = _routeBuilders();
Upvotes: 2
Reputation: 1103
In your code, _routeBuilders is a function
Map<String, WidgetBuilder> _routeBuilders() {
return {tabNavigatorRoot: (context) => _getScreen(context, item)};
}
And that's what you're trying to use "[]" on here:
MaterialPageRoute(
settings: RouteSettings(name: tabNavigatorRoot),
builder: (context) => _routeBuilders!,
)
I see that you've defined:
final routeBuilders = _routeBuilders();
So maybe this is what you meant to type:
MaterialPageRoute(
settings: RouteSettings(name: tabNavigatorRoot),
builder: (context) => routeBuilders[initialRoute](context),
)
(Note that the underscore before routeBuilders has been removed).
Upvotes: 3