gskinnerTeam / flutter-wonderous-app

A showcase app for the Flutter SDK. Wonderous will educate and entertain as you uncover information about some of the most famous structures in the world.
MIT License
3.96k stars 930 forks source link

App stuck in onboarding, arrow to continue to the app is missing [XCode 15.1 RC] #155

Closed rzambroni closed 9 months ago

rzambroni commented 9 months ago

Summary: While testing XCode 15.1 RC We noticed that the app is not rendering the arrow that allows te user to finish the onboarding steps and get into the app. It also shows a warning and an error.

Replication steps

  1. Get latest version of Wonderous app (This is the log when this issue was created - commit https://github.com/gskinnerTeam/flutter-wonderous-app/commit/432becb17a38dbb6c995ea5aadfe99207f0ade74 (HEAD -> main, origin/main, origin/HEAD)
  2. Run Wonderous in the ios 17.2 simulator with Xcode 15.1 RC1.
  3. Navigate to the last step of the onboarding.

Expected Results: The user should be able to navigate out of the onboarding and into the first wonder. Actual Results: Navigation is not possible and the user is stuck on the onboarding.

Screenshots or Video: https://drive.google.com/file/d/1uXS_AQhdinPG1FHx28J9LGzxL03m0seY/view?usp=sharing

Logs ```console Warning: Error creating LLDB target at path '/Users/josefinadiz/Library/Developer/Xcode/DerivedData/Runner-dvabjmmhwocuqjcmyfiggzukgnem/Build/Products/Debug-iphonesimulator/Runner.app'- using an empty LLDB target which can cause slow memory reads from remote devices. objc[7879]: Class AKAlertImageURLProvider is implemented in both /Library/Developer/CoreSimulator/Volumes/iOS_21C62/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 17.2.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AuthKitUI.framework/AuthKitUI (0x14c39a628) and /Library/Developer/CoreSimulator/Volumes/iOS_21C62/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 17.2.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AuthKit.framework/AuthKit (0x133f239a0). One of the two will be used. Which one is undefined. [ERROR:flutter/shell/platform/darwin/graphics/FlutterDarwinContextMetalImpeller.mm(42)] Using the Impeller rendering backend. flutter: The Dart VM service is listening on http://127.0.0.1:51171/7XHZX79rjNE=/ flutter: bootstrap start... flutter: Navigate to: / flutter: Saving... flutter: Navigate to: /welcome flutter: Saving... ```
Flutter Doctor Output ```console Flutter (Channel stable, 3.16.2, on macOS 14.1.1 23B81 darwin-arm64, locale en-US) Flutter version 3.16.2 on channel stable at /Users/josefinadiz/Desktop/flutter/flutter Upstream repository https://github.com/flutter/flutter.git Framework revision 9e1c857886 (5 days ago), 2023-11-30 11:51:18 -0600 Engine revision cf7a9d0800 Dart version 3.2.2 DevTools version 2.28.3 [✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0) Android SDK at /Users/josefinadiz/Library/Android/sdk Platform android-34, build-tools 34.0.0 Java binary at: /opt/homebrew/opt/openjdk/bin/java Java version OpenJDK Runtime Environment Homebrew (build 20.0.1) All Android licenses accepted. [✓] Xcode - develop for iOS and macOS (Xcode 15.1) Xcode at /Applications/Xcode.app/Contents/Developer Build 15C65 CocoaPods version 1.12.1 [✓] Chrome - develop for the web Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome [✓] VS Code (version 1.84.2) VS Code at /Applications/Visual Studio Code.app/Contents Flutter extension version 3.78.0 [✓] Connected device (4 available) iPhone 13 de Josefina (mobile) • 00008110-0002751E2E90401E • ios • iOS 17.1.2 21B101 iPhone 15 (mobile) • D9487425-C333-4B4A-9BE0-87549BCE1CC6 • ios • com.apple.CoreSimulator.SimRuntime.iOS-17-2 (simulator) macOS (desktop) • macos • darwin-arm64 • macOS 14.1.1 23B81 darwin-arm64 Chrome (web) • chrome • web-javascript • Google Chrome 119.0.6045.199 [✓] Network resources All expected network resources are available. ```
SoorajBhooshan86 commented 9 months ago

The Issue seems to be in the file intro_screen.dart, There is a widget called PreviousNextNavigation which handles the introComplete Process.

The widget PreviousNextNavigation is actually returning the child in mobile platforms while in web it's another view which has some buttons.


 PreviousNextNavigation(
              maxWidth: 600,
              nextBtnColor: _isOnLastPage ? $styles.colors.accent1 : null,
              onPreviousPressed: _isOnFirstPage ? null : () => _incrementPage(-1),
              onNextPressed: () {
                if (_isOnLastPage) {
                  **__handleIntroCompletePressed();_**
                } else {
                  _incrementPage(1);
                }
              },
              child: Stack(
                children: [
                  // page view with title & description:
                  MergeSemantics(
                    child: Semantics(

In PreviousNextNavigation (The Widget returns child in Mobile Platforms)

  @override
  Widget build(BuildContext context) {
    **_if (PlatformInfo.isMobile) return widget.child;_**
    return Listener(
      onPointerSignal: widget.listenToMouseWheel ? _handleMouseScroll : null,
      child: FullscreenKeyboardListener(
        onKeyDown: _handleKeyDown,
        child: Stack(
          children: [
            widget.child,
            Center(
              child: SizedBox(
                width: widget.maxWidth ?? double.infinity,
                child: Padding(
                  padding: EdgeInsets.symmetric(horizontal: $styles.insets.sm),
                  child: Row(
                    children: [
                      CircleIconBtn(
                        icon: AppIcons.prev,
                        onPressed: widget.onPreviousPressed,
                        semanticLabel: 'Previous',
                        bgColor: widget.previousBtnColor,
                      ),
                      Spacer(),
                      CircleIconBtn(
                        icon: AppIcons.prev,
                        onPressed: widget.onNextPressed,
                        semanticLabel: 'Next',
                        flipIcon: true,
                        bgColor: widget.nextBtnColor,
                      )
                    ],
                  ),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }

The Child widgets is a stack and sadly there are no widgets that uses _handleIntroCompletePressed();

 child: Stack(
                children: [
                  // page view with title & description:
                  MergeSemantics(
                    child: Semantics(
                      onIncrease: () => _handleSemanticSwipe(1),
                      onDecrease: () => _handleSemanticSwipe(-1),
                      child: PageView(
                        controller: _pageController,
                        children: pages,
                        onPageChanged: (_) => AppHaptics.lightImpact(),
                      ),
                    ),
                  ),

                  IgnorePointer(
                    ignoringSemantics: false,
                    child: Column(children: [
                      Spacer(),

                      // logo:
                      Semantics(
                        header: true,
                        child: Container(
                          height: _logoHeight,
                          alignment: Alignment.center,
                          child: _WonderousLogo(),
                        ),
                      ),

                      // masked image:
                      SizedBox(
                        height: _imageSize,
                        width: _imageSize,
                        child: ValueListenableBuilder<int>(
                          valueListenable: _currentPage,
                          builder: (_, value, __) {
                            return AnimatedSwitcher(
                              duration: $styles.times.slow,
                              child: KeyedSubtree(
                                key: ValueKey(value), // so AnimatedSwitcher sees it as a different child.
                                child: _PageImage(data: pageData[value]),
                              ),
                            );
                          },
                        ),
                      ),

                      // placeholder gap for text:
                      Gap(_IntroScreenState._textHeight),

                      // page indicator:
                      Container(
                        height: _pageIndicatorHeight,
                        alignment: Alignment(0.0, 0),
                        child: AppPageIndicator(
                            count: pageData.length, controller: _pageController, color: $styles.colors.offWhite),
                      ),

                      Spacer(flex: 2),
                    ]),
                  ),

                  // Build a cpl overlays to hide the content when swiping on very wide screens
                  _buildHzGradientOverlay(left: true),
                  _buildHzGradientOverlay(),

                  // nav help text:
                  if (PlatformInfo.isMobile) ...[
                    BottomCenter(
                      child: Padding(
                        padding: EdgeInsets.only(bottom: $styles.insets.lg),
                        child: _buildNavText(context),
                      ),
                    ),
                  ]
                ],
              ),
esDotDev commented 9 months ago

Thanks for the report, this has been fixed in 91c8cb97