Skip to content

Document implications of tracking widget creation, and use of --no-track-widget-creation flag #2171

Description

@2ZeroSix commented on Apr 30, 2020, 7:51 PM UTC:

using dart sdk shipped with flutter:

Flutter (Channel master, 1.18.0-9.0.pre.74, on Mac OS X 10.15.3 19D76,
    locale en-RU)
    • Flutter version 1.18.0-9.0.pre.74 at /Users/iam/development/flutter
    • Framework revision 0d452b8305 (42 minutes ago), 2020-04-30 11:20:14 -0700
    • Engine revision 2db3276573
    • Dart version 2.9.0 (build 2.9.0-3.0.dev 726d3c7725)

this code works differently only in debug build

import 'package:flutter/widgets.dart';

void main() {
  final generatedListOfConst = [
    ...{
      const SizedBox(),
      const SizedBox(),
    },
  ];
  print(generatedListOfConst);
}

expected (dev_compiler, aot, ...): [SizedBox]
actual (Dart VM): [SizedBox, SizedBox]

same result for any other Flutter widget in place of SizedBox, but for some reason it does work as expected for other objects

class EmptyWidget extends StatelessWidget {
  const EmptyWidget({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

class Empty {
  const Empty();
}

void main() {
  final generatedListOfConstWidgets = [
    ...{
      const EmptyWidget(),
      const EmptyWidget(),
    },
  ];
  print(generatedListOfConstWidgets);

  final generatedListOfConst = [
    ...{
      const Empty(),
      const Empty(),
    },
  ];
  print(generatedListOfConst);

  final generatedListOfStr = [
    ...{
      'a',
      'a',
    },
  ];
  print(generatedListOfStr);
}

Dart VM output:

[EmptyWidget, EmptyWidget]
[Instance of 'Empty']
[a]

This issue was moved by keertip from dart-lang/sdk#41728.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3issues we think are valid but not importantcost: highHigh engineering cost to implementdevtools-inspector-screen

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions