From 8ff4cce6c9bb2ce567e570e4fac1b7015e01f2b6 Mon Sep 17 00:00:00 2001 From: MaddinMade Date: Mon, 31 Jul 2023 13:47:54 +0200 Subject: [PATCH 1/8] minor fixes --- lib/src/widgets/animated_toggle_switch.dart | 2 +- test/gesture_test.dart | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/src/widgets/animated_toggle_switch.dart b/lib/src/widgets/animated_toggle_switch.dart index a19eb61..247f626 100644 --- a/lib/src/widgets/animated_toggle_switch.dart +++ b/lib/src/widgets/animated_toggle_switch.dart @@ -773,7 +773,7 @@ class AnimatedToggleSwitch extends StatelessWidget { Function()? onTap, this.minTouchTargetSize = 48.0, this.textDirection, - this.cursors = const ToggleCursors(), + this.cursors = const ToggleCursors(defaultCursor: SystemMouseCursors.click), EdgeInsetsGeometry textMargin = const EdgeInsets.symmetric(horizontal: 8.0), Offset animationOffset = const Offset(20.0, 0), bool clipAnimation = true, diff --git a/test/gesture_test.dart b/test/gesture_test.dart index 5e70886..2d65e28 100644 --- a/test/gesture_test.dart +++ b/test/gesture_test.dart @@ -26,8 +26,6 @@ void main() { final currentFinder = find.byKey(iconKey(current)); final nextFinder = find.byKey(iconKey(next)); - debugDumpApp(); - await tester.tap(currentFinder, warnIfMissed: false); verify(() => tapFunction()).called(1); From e1dbd1e5aa84d2b45460e8d64ac4ba9310f2b49b Mon Sep 17 00:00:00 2001 From: MaddinMade Date: Tue, 1 Aug 2023 10:29:25 +0200 Subject: [PATCH 2/8] optimizes handling of loading --- analysis_options.yaml | 3 +- example/lib/main.dart | 3 +- .../custom_animated_toggle_switch.dart | 40 ++++++++++++++----- test/gesture_test.dart | 1 - 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 9b1ed37..79733cb 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -6,4 +6,5 @@ analyzer: strict-raw-types: true linter: - rules: \ No newline at end of file + rules: + prefer_single_quotes: true \ No newline at end of file diff --git a/example/lib/main.dart b/example/lib/main.dart index f4c229a..3b6e0fc 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -375,8 +375,7 @@ class _MyHomePageState extends State { values: const [0, 1, 2, 3], onChanged: (i) => setState(() => value = i), iconBuilder: rollingIconBuilder, - separatorBuilder: (index) => - SizedBox.expand(child: ColoredBox(color: Colors.red)), + separatorBuilder: (index) => const VerticalDivider(), borderWidth: 4.5, style: ToggleStyle( indicatorColor: Colors.white, diff --git a/lib/src/widgets/custom_animated_toggle_switch.dart b/lib/src/widgets/custom_animated_toggle_switch.dart index 0e298a3..3a456fc 100644 --- a/lib/src/widgets/custom_animated_toggle_switch.dart +++ b/lib/src/widgets/custom_animated_toggle_switch.dart @@ -247,6 +247,9 @@ class _CustomAnimatedToggleSwitchState /// The current state of the movement of the indicator. late _AnimationInfo _animationInfo; + /// This list contains the last [Future]s returned by [widget.onTap] and [widget.onChanged]. + final List> _loadingFutures = []; + @override void initState() { super.initState(); @@ -321,41 +324,50 @@ class _CustomAnimatedToggleSwitchState if (oldWidget.animationCurve != widget.animationCurve) { _animation.curve = widget.animationCurve; } - if (oldWidget.active != widget.active && !widget.active) { - _onDragEnd(); + if (oldWidget.active && !widget.active) { + _cancelDrag(); } _checkValuePosition(); if (oldWidget.loading != widget.loading) { - if (widget.loading != null) _loading(widget.loading!); + _loading(widget.loading ?? _loadingFutures.isNotEmpty); } } bool get _isActive => widget.active && !_animationInfo.loading; + void _addLoadingFuture(Future future) { + _loadingFutures.add(future); + final futureLength = _loadingFutures.length; + if (widget.loading == null) _loading(true); + Future.wait(_loadingFutures).whenComplete(() { + // Check if new future is added since calling method + if (futureLength != _loadingFutures.length) return; + if (widget.loading == null) _loading(false); + _loadingFutures.clear(); + }); + } + void _onChanged(T value) { if (!_isActive) return; final result = widget.onChanged?.call(value); - if (result is Future && widget.loading == null) { - _loading(true); - result.whenComplete(() => _loading(false)); + if (result is Future) { + _addLoadingFuture(result); } } void _onTap() { if (!_isActive) return; final result = widget.onTap?.call(); - if (result is Future && widget.loading == null) { - _loading(true); - result.whenComplete(() => _loading(false)); + if (result is Future) { + _addLoadingFuture(result); } } void _loading(bool b) { if (b == _animationInfo.loading) return; if (_animationInfo.toggleMode == ToggleMode.dragged) { - _animationInfo = _animationInfo.none(); - _checkValuePosition(); + _cancelDrag(); } setState(() => _animationInfo = _animationInfo.setLoading(b)); } @@ -739,6 +751,12 @@ class _CustomAnimatedToggleSwitchState _checkValuePosition(); } + /// Cancels drag because of loading or inactivity + void _cancelDrag() { + _animationInfo = _animationInfo.none(); + _checkValuePosition(); + } + /// Returns the [TextDirection] of the widget. TextDirection _textDirectionOf(BuildContext context) => widget.textDirection ?? diff --git a/test/gesture_test.dart b/test/gesture_test.dart index 2d65e28..1ca690a 100644 --- a/test/gesture_test.dart +++ b/test/gesture_test.dart @@ -1,5 +1,4 @@ import 'package:animated_toggle_switch/animated_toggle_switch.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; From 97513cbd77286df105000d4b027d2bfa6506c1ff Mon Sep 17 00:00:00 2001 From: MaddinMade Date: Tue, 1 Aug 2023 20:49:29 +0200 Subject: [PATCH 3/8] adds CrazySwitch example --- example/lib/crazy_switch.dart | 76 +++++++++++++++++++++ example/lib/main.dart | 124 ++++++++++++++++++++-------------- 2 files changed, 150 insertions(+), 50 deletions(-) create mode 100644 example/lib/crazy_switch.dart diff --git a/example/lib/crazy_switch.dart b/example/lib/crazy_switch.dart new file mode 100644 index 0000000..453460d --- /dev/null +++ b/example/lib/crazy_switch.dart @@ -0,0 +1,76 @@ +// This switch is inspired by https://github.com/pedromassango/crazy-switch + +import 'package:animated_toggle_switch/animated_toggle_switch.dart'; +import 'package:flutter/material.dart'; + +class CrazySwitch extends StatefulWidget { + const CrazySwitch({super.key}); + + @override + State createState() => _CrazySwitchState(); +} + +class _CrazySwitchState extends State { + bool current = false; + + @override + Widget build(BuildContext context) { + const red = Color(0xFFFD0821); + const green = Color(0xFF46E82E); + const borderWidth = 10.0; + const height = 58.0; + const innerIndicatorSize = height - 4 * borderWidth; + + return CustomAnimatedToggleSwitch( + current: current, + dif: 24.0, + values: [false, true], + animationDuration: const Duration(milliseconds: 350), + animationCurve: Curves.bounceOut, + iconBuilder: (context, local, global) => const SizedBox(), + onChanged: (b) => setState(() => current = b), + height: height, + indicatorSize: Size.square(height), + foregroundIndicatorBuilder: (context, global) { + final color = Color.lerp(red, green, global.position)!; + return Padding( + padding: EdgeInsets.all(borderWidth), + child: DecoratedBox( + decoration: + BoxDecoration(color: Colors.white, shape: BoxShape.circle), + child: Container( + margin: const EdgeInsets.all(borderWidth), + child: Center( + child: Container( + width: innerIndicatorSize * 0.4 + + global.position * innerIndicatorSize * 0.6, + height: innerIndicatorSize, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20.0), + color: color, + )), + ), + ), + ), + ); + }, + wrapperBuilder: (context, global, child) { + final color = Color.lerp(red, green, global.position)!; + return DecoratedBox( + decoration: BoxDecoration( + color: color, + borderRadius: BorderRadius.circular(50.0), + boxShadow: [ + BoxShadow( + color: color.withOpacity(0.7), + blurRadius: 12.0, + offset: const Offset(0.0, 8.0), + ), + ], + ), + child: child, + ); + }, + ); + } +} diff --git a/example/lib/main.dart b/example/lib/main.dart index 3b6e0fc..2c72f0f 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,6 +1,7 @@ import 'dart:math'; import 'package:animated_toggle_switch/animated_toggle_switch.dart'; +import 'package:example/crazy_switch.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -126,6 +127,56 @@ class _MyHomePageState extends State { child: Text('Off', style: TextStyle(color: Colors.white))), ), + SizedBox(height: 16.0), + DefaultTextStyle.merge( + style: const TextStyle( + color: Colors.white, + fontSize: 18.0, + fontWeight: FontWeight.bold), + child: IconTheme.merge( + data: IconThemeData(color: Colors.white), + child: AnimatedToggleSwitch.dual( + current: positive, + first: false, + second: true, + dif: 45.0, + animationDuration: const Duration(milliseconds: 600), + style: ToggleStyle( + borderColor: Colors.transparent, + indicatorColor: Colors.white, + backgroundColor: Colors.black, + ), + customStyleBuilder: (context, local, global) { + if (global.position <= 0.0) + return ToggleStyle(backgroundColor: Colors.red[800]); + return ToggleStyle( + backgroundGradient: LinearGradient( + colors: [green, Colors.red[800]!], + stops: [ + global.position - + (1 - 2 * max(0, global.position - 0.5)) * 0.2, + global.position + + max(0, 2 * (global.position - 0.5)) * 0.2, + ], + )); + }, + borderWidth: 6.0, + height: 60.0, + loadingIconBuilder: (context, global) => + CupertinoActivityIndicator( + color: Color.lerp( + Colors.red[800], green, global.position)), + onChanged: (b) => setState(() => positive = b), + iconBuilder: (value) => value + ? Icon(Icons.power_outlined, color: green, size: 32.0) + : Icon(Icons.power_settings_new_rounded, + color: Colors.red[800], size: 32.0), + textBuilder: (value) => value + ? Center(child: Text('Active')) + : Center(child: Text('Inactive')), + ), + ), + ), Padding( padding: const EdgeInsets.all(8.0), child: Text( @@ -176,7 +227,13 @@ class _MyHomePageState extends State { ), ), ), - SizedBox(height: 16.0), + Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + 'Switch inspired by package lite_rolling_switch', + textAlign: TextAlign.center, + ), + ), DefaultTextStyle.merge( style: const TextStyle( color: Colors.white, @@ -218,56 +275,17 @@ class _MyHomePageState extends State { ), ), ), - SizedBox(height: 16.0), - DefaultTextStyle.merge( - style: const TextStyle( - color: Colors.white, - fontSize: 18.0, - fontWeight: FontWeight.bold), - child: IconTheme.merge( - data: IconThemeData(color: Colors.white), - child: AnimatedToggleSwitch.dual( - current: positive, - first: false, - second: true, - dif: 45.0, - animationDuration: const Duration(milliseconds: 600), - style: ToggleStyle( - borderColor: Colors.transparent, - indicatorColor: Colors.white, - backgroundColor: Colors.black, - ), - customStyleBuilder: (context, local, global) { - if (global.position <= 0.0) - return ToggleStyle(backgroundColor: Colors.red[800]); - return ToggleStyle( - backgroundGradient: LinearGradient( - colors: [green, Colors.red[800]!], - stops: [ - global.position - - (1 - 2 * max(0, global.position - 0.5)) * 0.2, - global.position + - max(0, 2 * (global.position - 0.5)) * 0.2, - ], - )); - }, - borderWidth: 6.0, - height: 60.0, - loadingIconBuilder: (context, global) => - CupertinoActivityIndicator( - color: Color.lerp( - Colors.red[800], green, global.position)), - onChanged: (b) => setState(() => positive = b), - iconBuilder: (value) => value - ? Icon(Icons.power_outlined, color: green, size: 32.0) - : Icon(Icons.power_settings_new_rounded, - color: Colors.red[800], size: 32.0), - textBuilder: (value) => value - ? Center(child: Text('Active')) - : Center(child: Text('Inactive')), - ), + Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + 'Switch inspired by CrazySwitch (https://github.com/pedromassango/crazy-switch)', + textAlign: TextAlign.center, ), ), + Padding( + padding: const EdgeInsets.only(top: 8.0, bottom: 16.0), + child: const CrazySwitch(), + ), Padding( padding: const EdgeInsets.all(8.0), child: Text( @@ -501,7 +519,13 @@ class _MyHomePageState extends State { return Future.delayed(Duration(seconds: 3)); }, ), - SizedBox(height: 16.0), + Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + 'Switch inspired by package toggle_switch', + textAlign: TextAlign.center, + ), + ), AnimatedToggleSwitch.size( current: min(value, 2), style: ToggleStyle( From 7dfc69e390778eba5a073f684cececb62a003a8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kl=C3=BCpfel?= Date: Tue, 1 Aug 2023 21:10:22 +0200 Subject: [PATCH 4/8] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 512c363..bef121c 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ For a slider with a similar look you can check out [action_slider](https://pub.d ## Examples `AnimatedToggleSwitch.dual()` ![animated_toggle_switch_example_dual](https://user-images.githubusercontent.com/43761463/161432631-e6dd3d16-7b64-410b-a9fa-c956d3442598.gif) -![animated_toggle_switch_example_borderradius_builder](https://github.com/splashbyte/animated_toggle_switch/assets/43761463/985492df-82a4-4225-a0ad-500970ad692d) +![animated_toggle_switch_example_borderradius_builder](https://github.com/splashbyte/animated_toggle_switch/assets/43761463/ee615f64-d897-43f1-b508-0318805195e4) ![animated_toggle_switch_example_lite_rolling_gradient](https://github.com/splashbyte/animated_toggle_switch/assets/43761463/6cd5d2d3-b4bd-4020-8568-354c71221e40) Switch inspired by [lite_rolling_switch](https://pub.dev/packages/lite_rolling_switch) (made with `AnimatedToggleSwitch.dual()`) @@ -36,6 +36,8 @@ Switch inspired by [toggle_switch](https://pub.dev/packages/toggle_switch) (made ![animated_toggle_switch_example_toggle_switch](https://github.com/splashbyte/animated_toggle_switch/assets/43761463/4812efdc-fe9a-4c34-808a-0983de65d2a4) +Switch inspired by [crazy-switch](https://github.com/pedromassango/crazy-switch) (made with `CustomAnimatedToggleSwitch()`) +![animated_toggle_switch_example_crazy_switch](https://github.com/splashbyte/animated_toggle_switch/assets/43761463/106afaf5-88a0-4d4b-ad59-2b22182d18be) `AnimatedToggleSwitch.rolling()` ![animated_toggle_switch_example_1](https://user-images.githubusercontent.com/43761463/161432579-9fe81c57-6463-45c3-a48f-75db666a3a22.gif) From 5204fa0e92501c2dff9434fce104676e42420180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kl=C3=BCpfel?= Date: Tue, 1 Aug 2023 21:21:03 +0200 Subject: [PATCH 5/8] fixes problem with flutter 3.12 --- example/lib/main.dart | 18 +++++++++--------- lib/src/widgets/animated_toggle_switch.dart | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index 2c72f0f..bf4bccb 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -151,14 +151,14 @@ class _MyHomePageState extends State { return ToggleStyle(backgroundColor: Colors.red[800]); return ToggleStyle( backgroundGradient: LinearGradient( - colors: [green, Colors.red[800]!], - stops: [ - global.position - - (1 - 2 * max(0, global.position - 0.5)) * 0.2, - global.position + - max(0, 2 * (global.position - 0.5)) * 0.2, - ], - )); + colors: [green, Colors.red[800]!], + stops: [ + global.position - + (1 - 2 * max(0, global.position - 0.5)) * 0.2, + global.position + + max(0, 2 * (global.position - 0.5)) * 0.2, + ], + )); }, borderWidth: 6.0, height: 60.0, @@ -170,7 +170,7 @@ class _MyHomePageState extends State { iconBuilder: (value) => value ? Icon(Icons.power_outlined, color: green, size: 32.0) : Icon(Icons.power_settings_new_rounded, - color: Colors.red[800], size: 32.0), + color: Colors.red[800], size: 32.0), textBuilder: (value) => value ? Center(child: Text('Active')) : Center(child: Text('Inactive')), diff --git a/lib/src/widgets/animated_toggle_switch.dart b/lib/src/widgets/animated_toggle_switch.dart index 247f626..439fbec 100644 --- a/lib/src/widgets/animated_toggle_switch.dart +++ b/lib/src/widgets/animated_toggle_switch.dart @@ -989,7 +989,7 @@ class AnimatedToggleSwitch extends StatelessWidget { borderRadius: style.borderRadius, ), child: ClipRRect( - borderRadius: style.borderRadius, + borderRadius: style.borderRadius!, child: child, ), ), From d4ced000755b5eec00d573e8599ea28afe71e15b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kl=C3=BCpfel?= Date: Tue, 1 Aug 2023 21:43:13 +0200 Subject: [PATCH 6/8] Update README.md --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bef121c..d2def49 100644 --- a/README.md +++ b/README.md @@ -51,9 +51,8 @@ You can build any other switch with `CustomAnimatedToggleSwitch()` ![animated_toggle_switch_example_custom_1](https://user-images.githubusercontent.com/43761463/161433015-c3ec634a-38da-463d-a06e-4ae0b29f77ed.gif) `AnimatedToggleSwitch.size()` -![animated_toggle_switch_example_4](https://user-images.githubusercontent.com/43761463/161432714-435d8369-7e54-432a-8b9b-6b55a0764f4a.gif) -![animated_toggle_switch_example_size_loading](https://user-images.githubusercontent.com/43761463/209121115-ed0f634b-0ec4-46b5-b030-21dbdde8cf07.gif) -![animated_toggle_switch_example_5](https://user-images.githubusercontent.com/43761463/161432720-1d5fa49e-6d20-401a-9a90-a6df88873266.gif) +![animated_toggle_switch_example_size](https://github.com/splashbyte/animated_toggle_switch/assets/43761463/805a0e3f-b3a2-4801-baf9-7a5509905452) +![animated_toggle_switch_example_size_2](https://github.com/splashbyte/animated_toggle_switch/assets/43761463/ed2c1e50-1012-41ef-8218-71c1144e514b) `AnimatedToggleSwitch.size()` with custom rolling animation ![animated_toggle_switch_example_6](https://user-images.githubusercontent.com/43761463/161432744-f60b660d-30d9-4d1d-9b87-14b62bc54e39.gif) From 1c63209ce4b3882f071b3ae581e2e981953d1a25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kl=C3=BCpfel?= Date: Tue, 1 Aug 2023 21:45:11 +0200 Subject: [PATCH 7/8] adds two examples for AnimatedToggleSwitch.size() --- example/lib/main.dart | 58 +++++++++++++++++++++++++++++++++---------- 1 file changed, 45 insertions(+), 13 deletions(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index bf4bccb..0f8860a 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -509,16 +509,48 @@ class _MyHomePageState extends State { size: min(size.width, size.height), ); }, - style: const ToggleStyle(borderColor: Colors.transparent), + style: ToggleStyle( + borderColor: Colors.transparent, + ), borderWidth: 0.0, - styleBuilder: (i) => ToggleStyle( - indicatorColor: - i.isEven == true ? Colors.amber : Colors.red), + styleBuilder: (i) { + final color = colorBuilder(i); + return ToggleStyle( + backgroundColor: color.withOpacity(0.3), + indicatorColor: color, + ); + }, onChanged: (i) { setState(() => value = i); return Future.delayed(Duration(seconds: 3)); }, ), + const SizedBox(height: 16.0), + AnimatedToggleSwitch.size( + textDirection: TextDirection.rtl, + current: value, + values: const [0, 1, 2, 3], + iconOpacity: 0.2, + indicatorSize: const Size.fromWidth(100), + iconBuilder: iconBuilder, + borderWidth: 4.0, + iconAnimationType: AnimationType.onHover, + style: ToggleStyle( + borderColor: Colors.transparent, + borderRadius: BorderRadius.circular(10.0), + boxShadow: [ + BoxShadow( + color: Colors.black26, + spreadRadius: 1, + blurRadius: 2, + offset: Offset(0, 1.5), + ), + ], + ), + styleBuilder: (i) => + ToggleStyle(indicatorColor: colorBuilder(i)), + onChanged: (i) => setState(() => value = i), + ), Padding( padding: const EdgeInsets.all(8.0), child: Text( @@ -673,12 +705,7 @@ class _MyHomePageState extends State { Widget coloredRollingIconBuilder(int value, Size iconSize, bool foreground) { final color = foreground ? colorBuilder(value) : null; return Icon( - switch (value) { - 0 => Icons.access_time_rounded, - 1 => Icons.check_circle_outline_rounded, - 2 => Icons.power_settings_new_rounded, - _ => Icons.lightbulb_outline_rounded, - }, + iconDataByValue(value), color: color, size: iconSize.shortestSide, ); @@ -689,14 +716,19 @@ class _MyHomePageState extends State { } Widget rollingIconBuilder(int? value, Size iconSize, bool foreground) { - IconData data = Icons.access_time_rounded; - if (value?.isEven ?? false) data = Icons.cancel; return Icon( - data, + iconDataByValue(value), size: iconSize.shortestSide, ); } + IconData iconDataByValue(int? value) => switch (value) { + 0 => Icons.access_time_rounded, + 1 => Icons.check_circle_outline_rounded, + 2 => Icons.power_settings_new_rounded, + _ => Icons.lightbulb_outline_rounded, + }; + Widget sizeIconBuilder(BuildContext context, SizeProperties local, GlobalToggleProperties global) { return iconBuilder(local.value, local.iconSize); From b075ac59ff9026bd5af5c4d88f63fae0bbb467cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kl=C3=BCpfel?= Date: Tue, 1 Aug 2023 21:46:24 +0200 Subject: [PATCH 8/8] version 0.8.0-beta.2 --- CHANGELOG.md | 4 ++++ pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4c6778..1ee2288 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.0-beta.2 (2023-08-01) +- minor fixes +- updates README + ## 0.8.0-beta.1 (2023-07-31) - adds `active` to all constructors - closes [#30](https://github.com/splashbyte/animated_toggle_switch/issues/30) diff --git a/pubspec.yaml b/pubspec.yaml index 35a3c6b..dd1e98a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: animated_toggle_switch description: Fully customizable, draggable and animated switch with multiple choices and smooth loading animation. It has prebuilt constructors for rolling and size animations. -version: 0.8.0-beta.1 +version: 0.8.0-beta.2 repository: https://github.com/SplashByte/animated_toggle_switch issue_tracker: https://github.com/SplashByte/animated_toggle_switch/issues