Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Page with SingleTickerProviderStateMixin cause unnecessary build #72908

Closed
6a209 opened this issue Dec 24, 2020 · 16 comments
Closed

Page with SingleTickerProviderStateMixin cause unnecessary build #72908

6a209 opened this issue Dec 24, 2020 · 16 comments
Labels
a: animation Animation APIs f: routes Navigator, Router, and related APIs. found in release: 1.26 Found to occur in 1.26 framework flutter/packages/flutter repository. See also f: labels. has reproducible steps The issue has been confirmed reproducible and is ready to work on P2 Important issues not at the top of the work list r: fixed Issue is closed as already fixed in a newer version

Comments

@6a209
Copy link

6a209 commented Dec 24, 2020

Here is my test code , pageA Navigator to pageB, _PageAState will call build

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: PageA(title: 'Flutter Demo Home Page'),
    );
  }
}

class PageA extends StatefulWidget {
  PageA({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _PageAState createState() => _PageAState();
}

class _PageAState extends State<PageA>
    with SingleTickerProviderStateMixin {

  TabController tabController;

  @override
  void initState() {
    super.initState();
    tabController = TabController(length: 2, vsync: this);
  }

  void toPageB() {
    tabController.animateTo(1);
    Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) {
      return PageB();
    }));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: TabBar(
          tabs: [
            Text(
              "Tab A",
              style: Theme.of(context).textTheme.bodyText1,
            ),
            Text(
              "Tab B",
              style: Theme.of(context).textTheme.bodyText1,
            )
          ],
          controller: tabController,
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: toPageB,
        child: Icon(Icons.add),
      ),
    );
  }
}

class PageB extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
        appBar: AppBar(
          title: Text("Page A"),
        ),
        body: Container(
          child: Center(
            child: Text("Page A"),
          ),
        ));
  }
}
@6a209 6a209 added the from: performance template Issues created via a performance issue template label Dec 24, 2020
@iapicca
Copy link
Contributor

iapicca commented Dec 24, 2020

@6a209
it seems like you are both pushing a new page AND animating the controller in the same function

 void toPageB() {
    tabController.animateTo(1);
    Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) {
      return PageB();
    }));
  }

the issue might be with your code rather than being a bug with flutter

@6a209 6a209 closed this as completed Dec 26, 2020
@6a209
Copy link
Author

6a209 commented Dec 26, 2020

@iapicca you can remove tabController.animateTo(1) the build function also call,if “tabController.animateTo(1)” will cause dependence page‘s state build i think is a bug。

@6a209 6a209 reopened this Dec 26, 2020
@6a209
Copy link
Author

6a209 commented Dec 26, 2020

i read the source code,it's because SingleTickerProviderStateMixin override didChangeDependencies()

@override
void didChangeDependencies() {
  if (_ticker != null) 
    _ticker.muted = !TickerMode.of(context);
  super.didChangeDependencies();
}

TickerMode.of()

  static bool of(BuildContext context) {
    final _EffectiveTickerMode? widget = context.dependOnInheritedWidgetOfExactType<_EffectiveTickerMode>();
    return widget?.enabled ?? true;
  }

_EffectiveTickerMode is a InheritedWidget, it's will add PageA's element to InheritedElement's _dependents
i think router navigator will make _EffectiveTickerMode's enable property change then notify _dependents update cause PageA build

@pedromassangocode
Copy link

pedromassangocode commented Dec 28, 2020

Hi @6a209
Is this causing any unexpected behavior in your project?

In Flutter there is no guarantees about how many times the build method will be called and this should not cause any side effect in your implementation.

@pedromassangocode pedromassangocode added in triage Presently being triaged by the triage team waiting for customer response The Flutter team cannot make further progress on this issue until the original reporter responds and removed from: performance template Issues created via a performance issue template labels Dec 28, 2020
@iapicca
Copy link
Contributor

iapicca commented Dec 28, 2020

In Flutter there is no guarantees about how many times the build method will called

@pedromassangocode
I'm not validating this specific issue, but I'm it's the first time I hear that,
can you tell me where is this documented?

@justinmc
Copy link
Contributor

CC @goderbauer

@justinmc justinmc added a: animation Animation APIs framework flutter/packages/flutter repository. See also f: labels. labels Dec 28, 2020
@6a209
Copy link
Author

6a209 commented Dec 29, 2020

Hi @pedromassangocode, My App Index Page‘s state with the SingleTickerProviderStateMixin, I found is has jank when navigator to other page, i use timeline tools found the page's state rebuild when navigator。 Index page is complex so it's build take many time

@no-response no-response bot removed the waiting for customer response The Flutter team cannot make further progress on this issue until the original reporter responds label Dec 29, 2020
@pedromassangocode
Copy link

Hi @6a209
I've updated your code do reproduce the issue better, I just added print() to print the pages once you navigate to it. To reproduce the issue just press the FAB button, it will navigate to PageB then press the back button, you should see "Page A" printed twice.

This may have the same cause as #64444 - #64444 (comment).

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: PageA(title: 'Flutter Demo Home Page'),
    );
  }
}

class PageA extends StatefulWidget {
  PageA({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _PageAState createState() => _PageAState();
}

class _PageAState extends State<PageA>
    with SingleTickerProviderStateMixin {

  TabController tabController;

  @override
  void initState() {
    super.initState();
    tabController = TabController(length: 2, vsync: this);
  }

  void toPageB() {
    //tabController.animateTo(1);
    Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) {
      return PageB();
    }));
  }

  @override
  Widget build(BuildContext context) {
    print("Page A");
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: TabBar(
          tabs: [
            Text(
              "Tab A",
              style: Theme.of(context).textTheme.bodyText1,
            ),
            Text(
              "Tab B",
              style: Theme.of(context).textTheme.bodyText1,
            )
          ],
          controller: tabController,
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: toPageB,
        child: Icon(Icons.add),
      ),
    );
  }
}

class PageB extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    print("Page B");
    return Scaffold(
        appBar: AppBar(
          title: Text("Page A"),
        ),
        body: Container(
          child: Center(
            child: Text("Page A"),
          ),
        ));
  }
}
flutter doctor -v
/Users/pedromassango/dev/SDKs/flutter_master/bin/flutter doctor --verbose
[✓] Flutter (Channel master, 1.26.0-2.0.pre.145, on Mac OS X 10.15.7 19H2 darwin-x64, locale en)
    • Flutter version 1.26.0-2.0.pre.145 at /Users/pedromassango/dev/SDKs/flutter_master
    • Framework revision 38fe7e2b1c (5 hours ago), 2020-12-28 21:39:03 -0500
    • Engine revision 892034dc6a
    • Dart version 2.12.0 (build 2.12.0-179.0.dev)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at /Users/pedromassango/Library/Android/sdk
    • Platform android-30, build-tools 30.0.2
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[!] Xcode - develop for iOS and macOS (Xcode 12.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.1, Build version 12A7403
    ! CocoaPods 1.9.3 out of date (1.10.0 is recommended).
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To upgrade see https://guides.cocoapods.org/using/getting-started.html#installation for instructions.

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

[✓] Android Studio (version 4.1)
    • 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 1.8.0_242-release-1644-b3-6915495)

[✓] IntelliJ IDEA Community Edition (version 2020.3)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 52.1.5
    • Dart plugin version 203.5981.152

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

[✓] Connected device (3 available)
    • Redmi 5 Plus (mobile) • 0258ff700005 • android-arm64  • Android 8.1.0 (API 27)
    • macOS (desktop)       • macos        • darwin-x64     • Mac OS X 10.15.7 19H2 darwin-x64
    • Chrome (web)          • chrome       • web-javascript • Google Chrome 87.0.4280.88

! Doctor found issues in 1 category.
Process finished with exit code 0

@iapicca see https://api.flutter.dev/flutter/widgets/State/build.html it says:

This method can potentially be called in every frame and should not have any side effects beyond building a widget.

@pedromassangocode pedromassangocode added found in release: 1.26 Found to occur in 1.26 has reproducible steps The issue has been confirmed reproducible and is ready to work on and removed in triage Presently being triaged by the triage team labels Dec 29, 2020
@iapicca
Copy link
Contributor

iapicca commented Dec 29, 2020

In Flutter there is no guarantees about how many times the build method will called

@pedromassangocode
I'm not validating this specific issue, but I'm it's the first time I hear that,
can you tell me where is this documented?

@iapicca see https://api.flutter.dev/flutter/widgets/State/build.html it says:
This method can potentially be called in every frame and should not have any side effects beyond building a widget.

My understanding of the doc is that build can be call at any point in time not an undefined number of times,
regardless the method being unnecessarily called multiple times for the same situation
does have side effects, at least in terms of performance

@pedromassangocode
Copy link

pedromassangocode commented Dec 30, 2020

My understanding of the doc is that build can be call at any point in time not an undefined number of times

I meant we don't know how many times it will be called because of external dependencies while the app is running and that it should not cause any side-effect, if it does cause a side-effect then it is an issue either in Flutter or in user's code.

@iapicca sorry if I said it wrong, please see a more complete answer at https://stackoverflow.com/a/52249579.

@jyardin
Copy link

jyardin commented Mar 10, 2021

I can confirm this causes some performances issues in my app when navigating between heavy pages.

From what I understood, SingleTickerProviderStateMixin and TickerProviderStateMixin register to _EffectiveTickerMode.enabled property changes, to enable/disable the muted property on their ticker.
This is done with a call to TickerMode.of(context) in the didChangeDependencies method, which registers to the dependencies of the InheritedWidget and triggers a build each time the property changes. I'm not sure I understand why the rebuild is necessary though.

Maybe this could be done with a lighter dependency mechanism than InheritedWidget, one which does not trigger a rebuild?

@ilkercankaya
Copy link

ilkercankaya commented Mar 28, 2021

Having this issue on my app, I have a complex tree structure and it causes UI jank on page navigation because
TickerProviderStateMixins forces rebuild for every single widget that uses TickerProviderStateMixins :( checked my app with profiling mode and saw all the rebuilds adding up to a UI jank

@shadow1007
Copy link

I did answer the question in stackoverflow
but I thought people in here may be interested.

This is the solution I used before.

Change your Page A like

class PageA extends StatefulWidget {
  PageA({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _PageAState createState() => _PageAState();
}

class _PageAState extends State<PageA> {
  TabController tabController;

  // @override
  // void initState() {
  //   super.initState();
  //   tabController = TabController(length: 2, vsync: this);
  // }

  void toPageB() {
    tabController.animateTo(1);
    Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) {
      return PageB();
    }));
  }

  @override
  Widget build(BuildContext context) {
    print("Page A");
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: CustomTabBar(
          tabs: [
            Text(
              "Tab A",
              style: Theme.of(context).textTheme.bodyText1,
            ),
            Text(
              "Tab B",
              style: Theme.of(context).textTheme.bodyText1,
            )
          ],
          controller: (controller) {
            tabController = controller;
          },
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: toPageB,
        child: Icon(Icons.add),
      ),
    );
  }
}

And add a new class CustomTabBar

class CustomTabBar extends StatefulWidget {
  CustomTabBar({
    Key key,
    this.controller,
    this.tabs,
  }) : super(key: key);
  final Function(TabController) controller;
  final List<Widget> tabs;

  @override
  _CustomTabBarState createState() => _CustomTabBarState();
}

class _CustomTabBarState extends State<CustomTabBar>
    with SingleTickerProviderStateMixin {
  TabController tabController;
  @override
  void initState() {
    super.initState();
    tabController = TabController(length: widget?.tabs?.length ?? 0, vsync: this);
    if (widget.controller != null) {
      widget.controller(tabController);
    }
  }

  @override
  void dispose() {
    tabController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return TabBar(
      tabs: widget?.tabs ?? [],
      controller: tabController,
    );
  }
}

It should fix the issue that Page A rebuild

@ilkercankaya
Copy link

ilkercankaya commented Apr 2, 2021

@override
// ignore: must_call_super
void didChangeDependencies() {
}

as mentioned in #64444 by @6a209, we can override this method and ignore the super call to avoid rebuilds. Which also makes sense wrt @jyardin 's explanation. However, would this cause any problems with TickerProviderStateMixin mixins? Any help would be very appreciated.

@Piinks Piinks added P2 Important issues not at the top of the work list f: routes Navigator, Router, and related APIs. labels Jun 16, 2022
@danagbemava-nc
Copy link
Member

I can't seem to reproduce the issue using the code in #72908 (comment) along with the steps provided.

When I navigate to page B and return, Page A is not printed in my logs.

See the logs below. Page A is only printed when it is built.

I'll be closing this as fixed since I cannot reproduce the bug. If anyone still faces this issue on the latest versions of flutter, kindly file a new issue and provide the code sample along with detailed steps required to reproduce.

Thank you

logs
Launching lib/main.dart on Pixel 7 in debug mode...
Running Gradle task 'assembleDebug'...
✓  Built build/app/outputs/flutter-apk/app-debug.apk.
Installing build/app/outputs/flutter-apk/app-debug.apk...
Debug service listening on ws://127.0.0.1:58091/V73fGP8OoI4=/ws
Syncing files to device Pixel 7...
I/flutter (26559): Page A
I/flutter (26559): Page B
I/flutter (26559): Page B
I/com.example.t(26559): Background concurrent copying GC freed 110099(6431KB) AllocSpace objects, 3(60KB) LOS objects, 90% free, 2433KB/26MB, paused 414us,80us total 119.409ms
updated sample
import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const PageA(title: 'Flutter Demo Home Page'),
    );
  }
}

class PageA extends StatefulWidget {
  const PageA({Key? key, required this.title}) : super(key: key);
  final String title;

  @override
  State<PageA> createState() => _PageAState();
}

class _PageAState extends State<PageA> with SingleTickerProviderStateMixin {
  late TabController tabController;

  @override
  void initState() {
    super.initState();
    tabController = TabController(length: 2, vsync: this);
  }

  void toPageB() {
    //tabController.animateTo(1);
    Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) {
      return const PageB();
    }));
  }

  @override
  Widget build(BuildContext context) {
    print("Page A");
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: TabBar(
          tabs: [
            Text(
              "Tab A",
              style: Theme.of(context).textTheme.bodyText1,
            ),
            Text(
              "Tab B",
              style: Theme.of(context).textTheme.bodyText1,
            )
          ],
          controller: tabController,
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: toPageB,
        child: const Icon(Icons.add),
      ),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    print("Page B");
    return Scaffold(
      appBar: AppBar(
        title: const Text("Page A"),
      ),
      body: const Center(
        child: Text("Page A"),
      ),
    );
  }
}
flutter doctor -v
[✓] Flutter (Channel stable, 3.7.12, on macOS 13.3.1 22E261 darwin-arm64, locale en-GB)
    • Flutter version 3.7.12 on channel stable at /Users/nexus/dev/sdks/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 4d9e56e694 (7 days ago), 2023-04-17 21:47:46 -0400
    • Engine revision 1a65d409c7
    • Dart version 2.19.6
    • DevTools version 2.20.1

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/nexus/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0
    • Java binary at: /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/222.4459.24.2221.9862592/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b802.4-9586694)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.3)
    • Xcode at /Applications/Xcode-14.3.0.app/Contents/Developer
    • Build 14E222b
    • CocoaPods version 1.11.3

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

[✓] Android Studio (version 2022.1)
    • Android Studio at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/221.6008.13.2211.9619390/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 11.0.15+0-b2043.56-8887301)

[✓] Android Studio (version 2022.2)
    • Android Studio at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/222.4459.24.2221.9862592/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.6b802.4-9586694)

[✓] IntelliJ IDEA Ultimate Edition (version 2023.1)
    • IntelliJ at /Users/nexus/Applications/JetBrains Toolbox/IntelliJ IDEA Ultimate.app
    • Flutter plugin version 73.0.4
    • Dart plugin version 231.8109.91

[✓] IntelliJ IDEA Ultimate Edition (version 2023.1)
    • IntelliJ at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/231.8109.175/IntelliJ IDEA.app
    • 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

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

[✓] Connected device (5 available)
    • Pixel 7 (mobile)    • adb-28291FDH2001SA-5Lv71w._adb-tls-connect._tcp. • android-arm64  • Android 13 (API 33)
    • M2007J20CG (mobile) • adb-5dd3be00-17AYzd._adb-tls-connect._tcp.       • android-arm64  • Android 12 (API 31)
    • Nexus (mobile)      • 00008020-001875E83A38002E                        • ios            • iOS 16.4.1 20E252
    • macOS (desktop)     • macos                                            • darwin-arm64   • macOS 13.3.1 22E261 darwin-arm64
    • Chrome (web)        • chrome                                           • web-javascript • Google Chrome 112.0.5615.137

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!
[!] Flutter (Channel master, 3.10.0-12.0.pre.29, on macOS 13.3.1 22E261 darwin-arm64, locale en-GB)
    • Flutter version 3.10.0-12.0.pre.29 on channel master at /Users/nexus/dev/sdks/flutters
    ! Warning: `flutter` on your path resolves to /Users/nexus/dev/sdks/flutter/bin/flutter, which is not inside your current Flutter SDK checkout at /Users/nexus/dev/sdks/flutters. Consider adding /Users/nexus/dev/sdks/flutters/bin to the front of your path.
    ! Warning: `dart` on your path resolves to /Users/nexus/dev/sdks/flutter/bin/dart, which is not inside your current Flutter SDK checkout at /Users/nexus/dev/sdks/flutters. Consider adding /Users/nexus/dev/sdks/flutters/bin to the front of your path.
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 60077ff979 (2 days ago), 2023-04-23 07:09:16 -0400
    • Engine revision fcf46af2d3
    • Dart version 3.1.0 (build 3.1.0-35.0.dev)
    • DevTools version 2.23.1
    • If those were intentional, you can disregard the above warnings; however it is recommended to use "git" directly to perform update checks and upgrades.

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/nexus/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0
    • Java binary at: /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/222.4459.24.2221.9862592/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b802.4-9586694)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.3)
    • Xcode at /Applications/Xcode-14.3.0.app/Contents/Developer
    • Build 14E222b
    • CocoaPods version 1.11.3

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

[✓] Android Studio (version 2022.1)
    • Android Studio at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/221.6008.13.2211.9619390/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 11.0.15+0-b2043.56-8887301)

[✓] Android Studio (version 2022.2)
    • Android Studio at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/222.4459.24.2221.9862592/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.6b802.4-9586694)

[✓] IntelliJ IDEA Ultimate Edition (version 2023.1)
    • IntelliJ at /Users/nexus/Applications/JetBrains Toolbox/IntelliJ IDEA Ultimate.app
    • Flutter plugin version 73.0.4
    • Dart plugin version 231.8109.91

[✓] IntelliJ IDEA Ultimate Edition (version 2023.1)
    • IntelliJ at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/231.8109.175/IntelliJ IDEA.app
    • 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

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

[✓] Connected device (5 available)
    • Pixel 7 (mobile)    • adb-28291FDH2001SA-5Lv71w._adb-tls-connect._tcp. • android-arm64  • Android 13 (API 33)
    • M2007J20CG (mobile) • adb-5dd3be00-17AYzd._adb-tls-connect._tcp.       • android-arm64  • Android 12 (API 31)
    • Nexus (mobile)      • 00008020-001875E83A38002E                        • ios            • iOS 16.4.1 20E252
    • macOS (desktop)     • macos                                            • darwin-arm64   • macOS 13.3.1 22E261 darwin-arm64
    • Chrome (web)        • chrome                                           • web-javascript • Google Chrome 112.0.5615.137
    ! Error: Nexus is busy: Fetching debug symbols for Nexus. Xcode will continue when Nexus is finished. (code -10)

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

! Doctor found issues in 1 category.

@danagbemava-nc danagbemava-nc added the r: fixed Issue is closed as already fixed in a newer version label Apr 25, 2023
@github-actions
Copy link

github-actions bot commented May 9, 2023

This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of flutter doctor -v and a minimal reproduction of the issue.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators May 9, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
a: animation Animation APIs f: routes Navigator, Router, and related APIs. found in release: 1.26 Found to occur in 1.26 framework flutter/packages/flutter repository. See also f: labels. has reproducible steps The issue has been confirmed reproducible and is ready to work on P2 Important issues not at the top of the work list r: fixed Issue is closed as already fixed in a newer version
Projects
None yet
Development

No branches or pull requests

9 participants