modular icon indicating copy to clipboard operation
modular copied to clipboard

Modular 6.3 - flutter web - RouteNotFoundException

Open dtodt opened this issue 1 year ago • 1 comments

Describe the bug An app that has one screen (splash), works ok on iOS, but doesn't work on web builds, giving the exception below.

Console error
Launching lib/main.dart on Chrome in debug mode...
This app is linked to the debug service: ws://127.0.0.1:57368/EfjPx5Yag5E=/ws
Debug service listening on ws://127.0.0.1:57368/EfjPx5Yag5E=/ws
Connecting to VM Service at ws://127.0.0.1:57368/EfjPx5Yag5E=/ws
Error: RouteNotFoundException: Route (//) not found
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 294:49  throw_
packages/result_dart/src/result.dart 291:5                                    getOrThrow
packages/result_dart/src/async_result.dart 109:35                             <fn>
dart-sdk/lib/async/zone.dart 1661:54                                          runUnary
dart-sdk/lib/async/future_impl.dart 156:18                                    handleValue
dart-sdk/lib/async/future_impl.dart 840:44                                    handleValueCallback
dart-sdk/lib/async/future_impl.dart 869:13                                    _propagateToListeners
dart-sdk/lib/async/future_impl.dart 641:5                                     [_completeWithValue]
dart-sdk/lib/async/future_impl.dart 715:7                                     callback
dart-sdk/lib/async/schedule_microtask.dart 40:11                              _microtaskLoop
dart-sdk/lib/async/schedule_microtask.dart 49:5                               _startMicrotaskLoop
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 181:15           <fn>

Environment

flutter doctor -v
[✓] Flutter (Channel stable, 3.13.6, on macOS 13.5.2 22G91 darwin-arm64 (Rosetta), locale en-BR)
    • Flutter version 3.13.6 on channel stable at /Users/Daniel/.puro/envs/stable/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision ead455963c (10 days ago), 2023-09-26 18:28:17 -0700
    • Engine revision a794cf2681
    • Dart version 3.1.3
    • DevTools version 2.25.0

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
    • Android SDK at /Users/Daniel/Library/Android/sdk
    • Platform android-33, build-tools 33.0.1
    • ANDROID_HOME = /Users/Daniel/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b829.9-10027231)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 15.0)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 15A240d
    • CocoaPods version 1.13.0

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2022.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b829.9-10027231)

[✓] VS Code (version 1.83.0)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.74.0

[✓] Connected device (2 available)
    • iPhone 15 (mobile) • 13509834-3E87-412B-9AA9-B81EB39A3DF8 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-17-0 (simulator)
    • Chrome (web)       • chrome                               • web-javascript • Google Chrome 117.0.5938.149

[✓] Network resources
    • All expected network resources are available.

• No issues found!
pubspec.yaml
name: food
description: Food
publish_to: "none"
version: 0.0.1+1

environment:
  sdk: ">=3.1.2 <4.0.0"

dependencies:
  flutter:
    sdk: flutter

  asp: ^1.3.0
  cloud_firestore: ^4.9.3
  envied: ^0.3.0+3
  firebase_analytics: ^10.5.1
  firebase_app_check: ^0.2.0+1
  firebase_app_installations: ^0.2.3+7
  firebase_auth: ^4.10.1
  firebase_core: ^2.17.0
  firebase_crashlytics: ^3.3.7
  firebase_messaging: ^14.6.9
  firebase_performance: ^0.9.2+7
  firebase_remote_config: ^4.2.7
  firebase_storage: ^11.2.8
  flutter_modular: ^6.3.2
  google_fonts: ^6.1.0
  google_sign_in: ^6.1.5
  lottie: ^2.6.0
  result_dart: ^1.1.0
  sign_button: ^2.0.6
  upgrader: ^8.1.0

dev_dependencies:
  flutter_test:
    sdk: flutter

  build_runner: ^2.4.6
  envied_generator: ^0.3.0+3
  flutter_lints: ^2.0.3
  mocktail: ^1.0.1
  mocktail_image_network: ^1.0.0

flutter:
  uses-material-design: true

  assets:
    - assets/animations/

To Reproduce Create a new project, add modular and a page in a path different than /.

app_module.dart
import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:firebase_performance/firebase_performance.dart';
import 'package:flutter_modular/flutter_modular.dart';

import 'shared/pages/splash_page.dart';

class AppModule extends Module {
  @override
  void binds(Injector i) {
    i.addInstance<FirebaseAnalytics>(FirebaseAnalytics.instance);
    i.addInstance<FirebaseAuth>(FirebaseAuth.instance);
    i.addInstance<FirebaseCrashlytics>(FirebaseCrashlytics.instance);
    i.addInstance<FirebasePerformance>(FirebasePerformance.instance);
  }

  @override
  void routes(RouteManager r) {
    r.child('/splash', child: (_) => const SplashPage());
  }
}
app_widget.dart
import 'package:flutter/material.dart';
import 'package:flutter_modular/flutter_modular.dart';
import 'package:google_fonts/google_fonts.dart';

class AppWidget extends StatefulWidget {
  const AppWidget({super.key});

  @override
  State<AppWidget> createState() => _AppWidgetState();
}

class _AppWidgetState extends State<AppWidget> {
  @override
  Widget build(BuildContext context) {
    Modular.setInitialRoute('/splash');
    return MaterialApp.router(
      debugShowCheckedModeBanner: false,
      routerConfig: Modular.routerConfig,
      theme: ThemeData(
        appBarTheme: AppBarTheme(
          centerTitle: true,
          titleTextStyle: GoogleFonts.ubuntu(
            color: Colors.white,
            fontSize: 24.0,
          ),
        ),
        colorScheme: const ColorScheme.dark(),
        useMaterial3: true,
      ),
      title: '',
    );
  }
}

Expected behavior Should open the app and redirect to the initial route.

Obs: the app works when I don't change the initial path and provide the splash path like this: r.child('/', child: (_) => const SplashPage());

dtodt avatar Oct 07 '23 12:10 dtodt

Estou passando pelo mesmo problema e já tem uma issue #900 aberta indicando o mesmo problema no Modular.setInitialRoute

Para contornar esse problema utilizei um redirect nas rotas

r.redirect('/', to: '/splash/');

Acredito que não seja uma boa pratica, mas funcionou.

DevJHenrique avatar Oct 08 '23 00:10 DevJHenrique