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.
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.
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.
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.0flutter doctor -v