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

RangeError (length): Invalid value: Only valid value is 0: 1 on reducing label list size. #95

Open
imaduddinmd opened this issue Aug 22, 2024 · 0 comments

Comments

@imaduddinmd
Copy link

Describe the bug
When reducing the list size of the labels, I am getting a RangeError. I am not sure if I am doing something wrong or if this is an actual bug.

To Reproduce
Press on button to change the size of Label list.

bool showMoreLabels = true;
Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'showMoreLabels: $showMoreLabels',
            ),
            const SizedBox(height: 10.0,),
            TextButton(
              style: const ButtonStyle(
                backgroundColor: WidgetStatePropertyAll(Colors.blue),
                iconSize: WidgetStatePropertyAll(20.0),
              ),
              onPressed: () => {
                setState(() {
                  showMoreLabels = !showMoreLabels;
                })
              },
              child: const Text(
                'Press here to show more or less labels',
              ),
            ),
            const SizedBox(height: 20.0,),
            ToggleSwitch(
              minWidth: 100,
              initialLabelIndex: 0,
              totalSwitches: showMoreLabels ? 2 : 1,
              labels: showMoreLabels ? const ['MORE', 'LABELS'] : const ['LESS'],
              onToggle: (index) {
                if (kDebugMode) {
                  print('onToggle: $index');
                }
              },
            )
          ],
        )

This also happens when you try to reduce from n to (n-1 or more) labels. Increasing the label size work just fine.

The stacktrace is shown below.

======== Exception caught by widgets library =======================================================
The following RangeError was thrown building ToggleSwitch(dependencies: [InheritedCupertinoTheme, MediaQuery, _InheritedTheme, _LocalizationsScope-[GlobalKey#2fbbf]], state: _ToggleSwitchState#94aed):
RangeError (length): Invalid value: Only valid value is 0: 1

The relevant error-causing widget was: 
  ToggleSwitch ToggleSwitch:file:///Users/imaduddin.mohammed/Downloads/toggle_switch_test/lib/main.dart:105:13
When the exception was thrown, this was the stack: 
#0      _Array.[] (dart:core-patch/array.dart)
#1      _ToggleSwitchState._switchItem (package:toggle_switch/toggle_switch.dart:402:41)
#2      _ToggleSwitchState.build.<anonymous closure> (package:toggle_switch/toggle_switch.dart:263:22)
#3      new _GrowableList.generate (dart:core-patch/growable_array.dart:136:28)
#4      _ToggleSwitchState.build (package:toggle_switch/toggle_switch.dart:253:26)
#5      StatefulElement.build (package:flutter/src/widgets/framework.dart:5729:27)
#6      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5617:15)
#7      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5780:11)
#8      Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#9      StatefulElement.update (package:flutter/src/widgets/framework.dart:5803:5)
#10     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#11     Element.updateChildren (package:flutter/src/widgets/framework.dart:4090:32)
#12     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:7060:17)
#13     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#14     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6907:14)
#15     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#16     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#17     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#18     StatelessElement.update (package:flutter/src/widgets/framework.dart:5693:5)
#19     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#20     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#21     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#22     StatelessElement.update (package:flutter/src/widgets/framework.dart:5693:5)
#23     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#24     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#25     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#26     ProxyElement.update (package:flutter/src/widgets/framework.dart:5946:5)
#27     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#28     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#29     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#30     ProxyElement.update (package:flutter/src/widgets/framework.dart:5946:5)
#31     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#32     Element.updateChildren (package:flutter/src/widgets/framework.dart:4090:32)
#33     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:7060:17)
#34     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#35     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#36     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#37     ProxyElement.update (package:flutter/src/widgets/framework.dart:5946:5)
#38     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#39     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#40     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5780:11)
#41     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#42     StatefulElement.update (package:flutter/src/widgets/framework.dart:5803:5)
#43     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#44     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#45     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5780:11)
#46     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#47     StatefulElement.update (package:flutter/src/widgets/framework.dart:5803:5)
#48     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#49     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#50     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#51     ProxyElement.update (package:flutter/src/widgets/framework.dart:5946:5)
#52     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#53     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#54     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5780:11)
#55     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#56     StatefulElement.update (package:flutter/src/widgets/framework.dart:5803:5)
#57     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#58     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6907:14)
#59     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#60     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#61     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#62     ProxyElement.update (package:flutter/src/widgets/framework.dart:5946:5)
#63     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#64     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6907:14)
#65     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#66     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#67     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5780:11)
#68     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#69     StatefulElement.update (package:flutter/src/widgets/framework.dart:5803:5)
#70     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#71     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#72     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5780:11)
#73     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#74     StatefulElement.update (package:flutter/src/widgets/framework.dart:5803:5)
#75     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#76     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#77     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#78     ProxyElement.update (package:flutter/src/widgets/framework.dart:5946:5)
#79     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#80     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#81     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#82     ProxyElement.update (package:flutter/src/widgets/framework.dart:5946:5)
#83     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#84     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#85     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#86     ProxyElement.update (package:flutter/src/widgets/framework.dart:5946:5)
#87     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#88     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#89     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5780:11)
#90     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#91     StatefulElement.update (package:flutter/src/widgets/framework.dart:5803:5)
#92     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#93     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#94     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#95     ProxyElement.update (package:flutter/src/widgets/framework.dart:5946:5)
#96     Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#97     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#98     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5780:11)
#99     Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#100    StatefulElement.update (package:flutter/src/widgets/framework.dart:5803:5)
#101    Element.updateChild (package:flutter/src/widgets/framework.dart:3941:15)
#102    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642:16)
#103    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5780:11)
#104    Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
#105    BuildScope._tryRebuild (package:flutter/src/widgets/framework.dart:2693:15)
#106    BuildScope._flushDirtyElements (package:flutter/src/widgets/framework.dart:2752:11)
#107    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:3048:18)
#108    WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1162:21)
#109    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:468:5)
#110    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1397:15)
#111    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1318:9)
#112    SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1176:5)
#113    _invoke (dart:ui/hooks.dart:312:13)
#114    PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:419:5)
#115    _drawFrame (dart:ui/hooks.dart:283:31)

Expected behaviour
The toggle switch to show just one option on clicking of the button.

Screenshots
I hope the video recording below can explain the problem better.

toggle_switch_bug_flutter.mp4

Additional information

  • toggle_switch ^2.3.0
  • flutter doctor -v
[✓] Flutter (Channel stable, 3.24.0, on macOS 14.6.1 23G93 darwin-arm64, locale en-AU)
    • Flutter version 3.24.0 on channel stable at /Users/imaduddin.mohammed/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 80c2e84975 (3 weeks ago), 2024-07-30 23:06:49 +0700
    • Engine revision b8800d88be
    • Dart version 3.5.0
    • DevTools version 2.37.2

[✓] Android toolchain - develop for Android devices (Android SDK version 35.0.0)
    • Android SDK at /Users/imaduddin.mohammed/Library/Android/sdk
    • Platform android-35, build-tools 35.0.0
    • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 17.0.11+0-17.0.11b1207.24-11852314)
    • All Android licenses accepted.

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

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

[✓] Android Studio (version 2024.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 17.0.11+0-17.0.11b1207.24-11852314)

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

[✓] Connected device (4 available)
    • SM T630 (mobile)                • R52X505VPXF           • android-arm64  • Android 14 (API 34)
    • macOS (desktop)                 • macos                 • darwin-arm64   • macOS 14.6.1 23G93 darwin-arm64
    • Mac Designed for iPad (desktop) • mac-designed-for-ipad • darwin         • macOS 14.6.1 23G93 darwin-arm64
    • Chrome (web)                    • chrome                • web-javascript • Google Chrome 128.0.6613.84

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

• No issues found!
  • I recently upgraded from Flutter 3.7.12, Dart 2.19.6 and toggle_switch ^1.4.0 and this issue was not present then.
  • This happens on both Android and iOS if that helps.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant