import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
class BottomNavBar extends StatelessWidget {
const BottomNavBar({super.key});
@override
Widget build(BuildContext context) {
// Ensure router is initialized
return Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 47, 47, 47),
borderRadius: const BorderRadius.vertical(top: Radius.circular(40.0)),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.3),
spreadRadius: 1,
blurRadius: 10,
offset: const Offset(0, -3),
),
],
),
child: Padding(
padding: const EdgeInsets.only(bottom: 8.0),
child: SizedBox(
height: 60.0,
width: 345.0,
child: BottomAppBar(
color: Colors.transparent,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
IconButton(
icon: const Icon(Icons.home),
color: Colors.white,
onPressed: () {
GoRouter.of(context).go('/dashboard');
},
),
IconButton(
icon: const Icon(Icons.search),
color: Colors.white,
onPressed: () {
GoRouter.of(context).go('/search');
},
),
IconButton(
icon: const Icon(Icons.favorite),
color: Colors.white,
onPressed: () {
GoRouter.of(context).go('/favorites');
},
),
IconButton(
icon: const Icon(Icons.account_circle),
color: Colors.white,
onPressed: () {
GoRouter.of(context).go('/profile');
},
),
],
),
),
),
),
);
}
}
abstract class SkillWaveRouter {
static const initial = '/';
static const dashboard = '/dashboard';
static const profile = '/profile';
static const update_profile = '/update_profile';
static const search = '/search';
static const favorites = '/favorites';
}
import 'package:go_router/go_router.dart';
import 'package:myapp/feature/course/screens/dashboard_screen.dart';
import 'package:myapp/feature/favorite/favorite_screen.dart';
import 'package:myapp/feature/profile/profile.dart';
import 'package:myapp/feature/search/search_scree.dart';
import 'package:myapp/router/domain/model_router.dart';
final router = GoRouter(
initialLocation: SkillWaveRouter.initial,
routes: [
GoRoute(
path: SkillWaveRouter.initial,
builder: (context, state) => const DashboardScreen(),
),
GoRoute(
path: SkillWaveRouter.favorites,
builder: (context, state) => const FavoritesScreen(),
),
GoRoute(
path: SkillWaveRouter.search,
builder: (context, state) => const SearchScreen(),
),
GoRoute(
path: SkillWaveRouter.profile,
builder: (context, state) => ProfileScreen(),
),
],
);
══╡╞═══════════════════════════════════════════════════════════════════
js_primitives.dart:28 The following assertion was thrown while handling a gesture:
js_primitives.dart:28 Assertion failed:
js_primitives.dart:28 file:///home/user/.pub-cache/hosted/pub.dev/go_router-13.2.4/lib/src/router.dart:507:12
js_primitives.dart:28 inherited != null
js_primitives.dart:28 "No GoRouter found in context"
js_primitives.dart:28
js_primitives.dart:28 When the exception was thrown, this was the stack:
js_primitives.dart:28 dart-sdk/lib/\_internal/js_dev_runtime/private/ddc_runtime/errors.dart 296:3 throw\_
js_primitives.dart:28 dart-sdk/lib/\_internal/js_dev_runtime/private/ddc_runtime/errors.dart 29:3 assertFailed
js_primitives.dart:28 packages/go_router/src/route_data.dart.js 3466:38 of
js_primitives.dart:28 packages/myapp/feature/bottom_bar/bottom_bar.dart.js 346:39 \<fn\>
js_primitives.dart:28 packages/flutter/src/material/time.dart.js 74568:35 handleTap
js_primitives.dart:28 packages/flutter/src/gestures/recognizer.dart.js 325:18 invokeCallback
js_primitives.dart:28 packages/flutter/src/gestures/tap.dart.js 445:20 handleTapUp
js_primitives.dart:28 packages/flutter/src/gestures/tap.dart.js 240:12 \[\_checkUp\]
js_primitives.dart:28 packages/flutter/src/gestures/tap.dart.js 187:23 handlePrimaryPointer
js_primitives.dart:28 packages/flutter/src/gestures/recognizer.dart.js 576:16 handleEvent
js_primitives.dart:28 packages/flutter/src/gestures/pointer_router.dart.js 106:9 \[\_dispatch\]
js_primitives.dart:28 packages/flutter/src/gestures/pointer_router.dart.js 132:26 \<fn\>
js_primitives.dart:28 dart-sdk/lib/\_internal/js_dev_runtime/private/linked_hash_map.dart 21:7 forEach
js_primitives.dart:28 packages/flutter/src/gestures/pointer_router.dart.js 130:29 \[\_dispatchEventToRoutes\]
js_primitives.dart:28 packages/flutter/src/gestures/pointer_router.dart.js 125:37 route
js_primitives.dart:28 packages/flutter/src/gestures/binding.dart.js 444:26 handleEvent
js_primitives.dart:28 packages/flutter/src/gestures/binding.dart.js 432:24 dispatchEvent
js_primitives.dart:28 packages/flutter/src/widgets/widget_state.dart.js 102392:13 dispatchEvent
js_primitives.dart:28 packages/flutter/src/gestures/binding.dart.js 405:14 \[\_handlePointerEventImmediately\]
js_primitives.dart:28 packages/flutter/src/gestures/binding.dart.js 376:43 handlePointerEvent
js_primitives.dart:28 packages/flutter/src/gestures/binding.dart.js 365:14 \[\_flushPointerEventQueue\]
js_primitives.dart:28 packages/flutter/src/gestures/binding.dart.js 340:40 \[\_handlePointerDataPacket\]
js_primitives.dart:28 lib/\_engine/engine/platform_dispatcher.dart 1419:5 invoke1
js_primitives.dart:28 lib/\_engine/engine/platform_dispatcher.dart 333:5 invokeOnPointerDataPacket
js_primitives.dart:28 lib/\_engine/engine/pointer_binding.dart 398:30 \[\_sendToFramework\]
js_primitives.dart:28 lib/\_engine/engine/pointer_binding.dart 224:7 onPointerData
js_primitives.dart:28 lib/\_engine/engine/pointer_binding.dart 1001:20 \<fn\>
js_primitives.dart:28 lib/\_engine/engine/pointer_binding.dart 930:7 \<fn\>
js_primitives.dart:28 lib/\_engine/engine/pointer_binding.dart 531:9 loggedHandler
js_primitives.dart:28 dart-sdk/lib/\_internal/js_dev_runtime/private/ddc_runtime/operations.dart 426:37 \_checkAndCall
js_primitives.dart:28 dart-sdk/lib/\_internal/js_dev_runtime/private/ddc_runtime/operations.dart 431:39 dcall
js_primitives.dart:28
js_primitives.dart:28 Handler: "onTap"
js_primitives.dart:28 Recognizer:
js_primitives.dart:28 TapGestureRecognizer#bc7c3
js_primitives.dart:28 ════════════════════════════════════════════════════════════════════════════════════════════════════
js_primitives.dart:28 Another exception was thrown: Assertion failed: file:///home/user/.pub-cache/hosted/pub.dev/go_router-13.2.4/lib/src/router.dart:507:12
Gorouter 找不到上下文,因此在这里您可以简单地向 Gorouter 声明 GlobalKey 键,并使用该键的上下文在您的应用程序中导航,这将起作用。