Skip to content

Exception duplicate key in the MaterialApp.router widget #684

@Errechydy

Description

@Errechydy

I tried to add some basic implementation of onboarding using Beamer but i got into Duplicate key in the MaterialApp.router widget exception, the following is a simple demo:

import 'package:beamer/beamer.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  Beamer.setPathUrlStrategy();

  final hasSeenOnboarding = false; // This should come from Shared Preferences

  final routerDelegate = BeamerDelegate(
    initialPath: hasSeenOnboarding == false ? "/onboarding" : '/',
    locationBuilder: RoutesLocationBuilder(
      routes: {
        '/onboarding': (context, state, data) => OnboardingScreen(),
        '*': (context, state, data) => HomeScreen(),
      },
    ).call,
  );

  runApp(
    MaterialApp.router(
      debugShowCheckedModeBanner: false,
      routerDelegate: routerDelegate,
      routeInformationParser: BeamerParser(),
      backButtonDispatcher: BeamerBackButtonDispatcher(
        delegate: routerDelegate,
      ),
    ),
  );
}

class OnboardingScreen extends StatelessWidget {
  const OnboardingScreen({
    super.key,
  });

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Onboarding Screen"),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          children: [
            Text('This is the onboarding screen'),
            ElevatedButton(
              onPressed: () async {
                context.beamToReplacementNamed('/');
              },
              child: Text('Finish'),
            ),
          ],
        ),
      ),
    );
  }
}

class HomeScreen extends StatelessWidget {
  const HomeScreen({
    super.key,
  });

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Home Screen"),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          children: [
            Text('This is the home screen'),
          ],
        ),
      ),
    );
  }
}

And this is the exception i got:



Exception has occurred.
DartError: Assertion failed: file:/Development/flutter/packages/flutter/lib/src/widgets/navigator.dart:4165:14
!pageKeyToOldEntry.containsKey(page.key)
is not true
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 288:3     throw_
dart-sdk/lib/_internal/js_dev_runtime/private/profile.dart 110:39               assertFailed
packages/flutter/src/widgets/navigator.dart 4165:49                             [_updatePages]
packages/flutter/src/widgets/navigator.dart 3944:7                              didUpdateWidget
packages/flutter/src/widgets/framework.dart 5803:55                             update
packages/flutter/src/widgets/framework.dart 3941:14                             updateChild
packages/flutter/src/widgets/framework.dart 5656:16                             performRebuild
packages/flutter/src/widgets/framework.dart 5347:7                              rebuild
packages/flutter/src/widgets/framework.dart 5707:5                              update
packages/flutter/src/widgets/framework.dart 3941:14                             updateChild
packages/flutter/src/widgets/framework.dart 5656:16                             performRebuild
packages/flutter/src/widgets/framework.dart 5347:7                              rebuild
packages/flutter/src/widgets/framework.dart 5707:5                              update
packages/flutter/src/widgets/framework.dart 3941:14                             updateChild
packages/flutter/src/widgets/framework.dart 5656:16                             performRebuild
packages/flutter/src/widgets/framework.dart 5347:7                              rebuild
packages/flutter/src/widgets/framework.dart 5960:5                              update
packages/flutter/src/widgets/framework.dart 3941:14                             updateChild
packages/flutter/src/widgets/framework.dart 5656:16                             performRebuild
packages/flutter/src/widgets/framework.dart 5347:7                              rebuild
packages/flutter/src/widgets/framework.dart 5960:5                              update
packages/flutter/src/widgets/framework.dart 3941:14                             updateChild
packages/flutter/src/widgets/framework.dart 5656:16                             performRebuild
packages/flutter/src/widgets/framework.dart 5794:11                             performRebuild
packages/flutter/src/widgets/framework.dart 5347:7                              rebuild
packages/flutter/src/widgets/framework.dart 2694:14                             [_tryRebuild]
packages/flutter/src/widgets/framework.dart 2753:11                             [_flushDirtyElements]
packages/flutter/src/widgets/framework.dart 3048:17                             buildScope
packages/flutter/src/widgets/binding.dart 1176:9                                drawFrame
packages/flutter/src/rendering/binding.dart 475:5                               [_handlePersistentFrameCallback]
packages/flutter/src/scheduler/binding.dart 1397:7                              [_invokeFrameCallback]
packages/flutter/src/scheduler/binding.dart 1318:9                              handleDrawFrame
packages/flutter/src/scheduler/binding.dart 1176:5                              [_handleDrawFrame]
lib/_engine/engine/platform_dispatcher.dart 1408:5                              invoke
lib/_engine/engine/platform_dispatcher.dart 310:5                               invokeOnDrawFrame
lib/_engine/engine/initialization.dart 187:36                                   <fn>
dart-sdk/lib/_internal/js_dev_runtime/patch/js_allow_interop_patch.dart 212:27  _callDartFunctionFast1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions