[DEV] Done with the switcher toggle and the custom toggle.
This commit is contained in:
@@ -1 +1 @@
|
|||||||
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider_foundation","path":"C:\\\\Users\\\\Micazi\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_foundation-2.4.0\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"sqflite","path":"C:\\\\Users\\\\Micazi\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\sqflite-2.3.3+1\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]}],"android":[{"name":"path_provider_android","path":"C:\\\\Users\\\\Micazi\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_android-2.2.4\\\\","native_build":true,"dependencies":[]},{"name":"sqflite","path":"C:\\\\Users\\\\Micazi\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\sqflite-2.3.3+1\\\\","native_build":true,"dependencies":[]}],"macos":[{"name":"path_provider_foundation","path":"C:\\\\Users\\\\Micazi\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_foundation-2.4.0\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"sqflite","path":"C:\\\\Users\\\\Micazi\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\sqflite-2.3.3+1\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"C:\\\\Users\\\\Micazi\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_linux-2.2.1\\\\","native_build":false,"dependencies":[]}],"windows":[{"name":"path_provider_windows","path":"C:\\\\Users\\\\Micazi\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_windows-2.2.1\\\\","native_build":false,"dependencies":[]}],"web":[]},"dependencyGraph":[{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"sqflite","dependencies":[]}],"date_created":"2024-05-16 18:44:01.201685","version":"3.19.0"}
|
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider_foundation","path":"C:\\\\Users\\\\Micazi\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_foundation-2.4.0\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"sqflite","path":"C:\\\\Users\\\\Micazi\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\sqflite-2.3.3+1\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]}],"android":[{"name":"path_provider_android","path":"C:\\\\Users\\\\Micazi\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_android-2.2.4\\\\","native_build":true,"dependencies":[]},{"name":"sqflite","path":"C:\\\\Users\\\\Micazi\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\sqflite-2.3.3+1\\\\","native_build":true,"dependencies":[]}],"macos":[{"name":"path_provider_foundation","path":"C:\\\\Users\\\\Micazi\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_foundation-2.4.0\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"sqflite","path":"C:\\\\Users\\\\Micazi\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\sqflite-2.3.3+1\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"C:\\\\Users\\\\Micazi\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_linux-2.2.1\\\\","native_build":false,"dependencies":[]}],"windows":[{"name":"path_provider_windows","path":"C:\\\\Users\\\\Micazi\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_windows-2.2.1\\\\","native_build":false,"dependencies":[]}],"web":[]},"dependencyGraph":[{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"sqflite","dependencies":[]}],"date_created":"2024-05-18 12:11:58.348151","version":"3.19.0"}
|
||||||
@@ -5,6 +5,8 @@
|
|||||||
//s2 CORE
|
//s2 CORE
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
import 'style.dart';
|
||||||
|
|
||||||
//s2 3RD-PARTY
|
//s2 3RD-PARTY
|
||||||
//
|
//
|
||||||
//s1 DEPENDENCIES
|
//s1 DEPENDENCIES
|
||||||
@@ -26,34 +28,34 @@ class AstromicCheckboxToggle extends StatefulWidget {
|
|||||||
final void Function(bool)? onStateChanged;
|
final void Function(bool)? onStateChanged;
|
||||||
//s1 -- Configuration
|
//s1 -- Configuration
|
||||||
final bool? isEnabled;
|
final bool? isEnabled;
|
||||||
|
final bool? withLabel;
|
||||||
final bool? isLabelTapable;
|
final bool? isLabelTapable;
|
||||||
final TextDirection textDirection;
|
final TextDirection? textDirection;
|
||||||
//s1 -- Style
|
//s1 -- Style
|
||||||
final double? itemSize;
|
final AstromicCheckboxToggleStyle Function(bool isEnabled, bool isSelected) style;
|
||||||
final double? labelSpacing;
|
|
||||||
//
|
//
|
||||||
//s1 -- Content
|
//s1 -- Content
|
||||||
final Widget Function(bool isChecked, bool isEnabled, VoidCallback? onTap) itemBuilder;
|
final Widget Function(bool isEnabled, bool isSelected)? innerWidget;
|
||||||
final Widget Function(bool isChecked, bool isEnabled, VoidCallback? onTap)? labelBuilder;
|
final Widget Function(bool isEnabled, bool isSelected)? label;
|
||||||
//!SECTION
|
//!SECTION
|
||||||
//
|
//
|
||||||
const AstromicCheckboxToggle(
|
const AstromicCheckboxToggle({
|
||||||
{super.key,
|
super.key,
|
||||||
//s1 -- Functionality
|
//
|
||||||
this.stateVariable,
|
this.stateVariable,
|
||||||
this.initialState,
|
this.initialState,
|
||||||
this.onStateChanged,
|
this.onStateChanged,
|
||||||
//s1 -- Configuration
|
//
|
||||||
this.isEnabled = true,
|
this.isEnabled = true,
|
||||||
this.isLabelTapable = true,
|
this.withLabel = true,
|
||||||
this.textDirection = TextDirection.ltr,
|
this.isLabelTapable = true,
|
||||||
//s1 -- Style
|
this.textDirection = TextDirection.ltr,
|
||||||
this.itemSize = 24,
|
//
|
||||||
this.labelSpacing = 6,
|
required this.style,
|
||||||
//s1 -- Content
|
//
|
||||||
required this.itemBuilder,
|
this.innerWidget,
|
||||||
this.labelBuilder})
|
this.label,
|
||||||
: assert(stateVariable == null || initialState == null, "Can't define both the state variable and the initial state");
|
}) : assert(stateVariable == null || initialState == null, "Can't define both the state variable and the initial state");
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<AstromicCheckboxToggle> createState() => _AstromicCheckboxToggleState();
|
State<AstromicCheckboxToggle> createState() => _AstromicCheckboxToggleState();
|
||||||
@@ -134,20 +136,31 @@ class _AstromicCheckboxToggleState extends State<AstromicCheckboxToggle> {
|
|||||||
|
|
||||||
//SECTION - Build Return
|
//SECTION - Build Return
|
||||||
return Directionality(
|
return Directionality(
|
||||||
textDirection: widget.textDirection,
|
textDirection: widget.textDirection ?? TextDirection.ltr,
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
//S1 -- Item
|
//S1 -- Item
|
||||||
SizedBox(
|
SizedBox(
|
||||||
width: widget.itemSize,
|
width: widget.style(widget.isEnabled!, isChecked).itemSize,
|
||||||
height: widget.itemSize,
|
height: widget.style(widget.isEnabled!, isChecked).itemSize,
|
||||||
child: widget.itemBuilder(isChecked, widget.isEnabled!, widget.isEnabled! ? () => _onTap() : null),
|
child: Material(
|
||||||
),
|
child: InkWell(
|
||||||
|
onTap: widget.isEnabled! ? () => _onTap() : null,
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: widget.style(widget.isEnabled!, isChecked).backgroundColor,
|
||||||
|
border: widget.style(widget.isEnabled!, isChecked).border,
|
||||||
|
borderRadius: widget.style(widget.isEnabled!, isChecked).borderRadius,
|
||||||
|
),
|
||||||
|
child: widget.innerWidget != null ? widget.innerWidget!(widget.isEnabled!, isChecked) : Container(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)),
|
||||||
//S1 -- Label Spacing
|
//S1 -- Label Spacing
|
||||||
if (widget.labelBuilder != null) SizedBox(width: widget.labelSpacing),
|
if (widget.withLabel!) SizedBox(width: widget.style(widget.isEnabled!, isChecked).labelSpacing),
|
||||||
//S1 -- Label
|
//S1 -- Label
|
||||||
if (widget.labelBuilder != null) widget.labelBuilder!(isChecked, widget.isEnabled!, widget.isEnabled! ? () => _onTap() : null),
|
if (widget.withLabel! && widget.label != null) GestureDetector(onTap: widget.isLabelTapable! ? _onTap() : null, child: widget.label!(widget.isEnabled!, isChecked)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
39
lib/src/Toggles/Checkbox/style.dart
Normal file
39
lib/src/Toggles/Checkbox/style.dart
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
// ignore_for_file: public_member_api_docs, sort_constructors_first
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class AstromicCheckboxToggleStyle {
|
||||||
|
final double? itemSize;
|
||||||
|
final double? labelSpacing;
|
||||||
|
//
|
||||||
|
final Border? border;
|
||||||
|
final BorderRadius? borderRadius;
|
||||||
|
final Color? backgroundColor;
|
||||||
|
final TextStyle? labelStyle;
|
||||||
|
|
||||||
|
AstromicCheckboxToggleStyle({
|
||||||
|
this.itemSize = 24.0,
|
||||||
|
this.labelSpacing = 8.0,
|
||||||
|
this.border,
|
||||||
|
this.borderRadius,
|
||||||
|
this.backgroundColor,
|
||||||
|
this.labelStyle,
|
||||||
|
});
|
||||||
|
|
||||||
|
AstromicCheckboxToggleStyle copyWith({
|
||||||
|
double? itemSize,
|
||||||
|
double? labelSpacing,
|
||||||
|
Border? border,
|
||||||
|
BorderRadius? borderRadius,
|
||||||
|
Color? backgroundColor,
|
||||||
|
TextStyle? labelStyle,
|
||||||
|
}) {
|
||||||
|
return AstromicCheckboxToggleStyle(
|
||||||
|
itemSize: itemSize ?? this.itemSize,
|
||||||
|
labelSpacing: labelSpacing ?? this.labelSpacing,
|
||||||
|
border: border ?? this.border,
|
||||||
|
borderRadius: borderRadius ?? this.borderRadius,
|
||||||
|
backgroundColor: backgroundColor ?? this.backgroundColor,
|
||||||
|
labelStyle: labelStyle ?? this.labelStyle,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
128
lib/src/Toggles/Custom/custom.toggle.dart
Normal file
128
lib/src/Toggles/Custom/custom.toggle.dart
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
//SECTION - Imports
|
||||||
|
//
|
||||||
|
//s1 PACKAGES
|
||||||
|
//---------------
|
||||||
|
//s2 CORE
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
//s2 3RD-PARTY
|
||||||
|
//
|
||||||
|
//s1 DEPENDENCIES
|
||||||
|
//---------------
|
||||||
|
//s2 SERVICES
|
||||||
|
//s2 MODELS
|
||||||
|
//s2 MISC
|
||||||
|
//!SECTION - Imports
|
||||||
|
//
|
||||||
|
//SECTION - Exports
|
||||||
|
//!SECTION - Exports
|
||||||
|
//
|
||||||
|
class AstromicCustomToggle extends StatefulWidget {
|
||||||
|
//SECTION - Widget Arguments
|
||||||
|
//s1 -- Functionality
|
||||||
|
/// If provided, you have to change the variable yourself in the onStateChanged!
|
||||||
|
final bool? stateVariable;
|
||||||
|
final bool? initialState;
|
||||||
|
final void Function(bool)? onStateChanged;
|
||||||
|
//s1 -- Configuration
|
||||||
|
final bool? isEnabled;
|
||||||
|
//
|
||||||
|
//s1 -- Content
|
||||||
|
final Widget Function(bool isChecked, bool isEnabled, VoidCallback? onTap) itemBuilder;
|
||||||
|
//!SECTION
|
||||||
|
//
|
||||||
|
const AstromicCustomToggle({
|
||||||
|
super.key,
|
||||||
|
//s1 -- Functionality
|
||||||
|
this.stateVariable,
|
||||||
|
this.initialState,
|
||||||
|
this.onStateChanged,
|
||||||
|
//s1 -- Configuration
|
||||||
|
this.isEnabled = true,
|
||||||
|
//s1 -- Content
|
||||||
|
required this.itemBuilder,
|
||||||
|
}) : assert(stateVariable == null || initialState == null, "Can't define both the state variable and the initial state");
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<AstromicCustomToggle> createState() => _AstromicCustomToggleState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _AstromicCustomToggleState extends State<AstromicCustomToggle> {
|
||||||
|
//
|
||||||
|
//SECTION - State Variables
|
||||||
|
//s1 --Controllers
|
||||||
|
//s1 --Controllers
|
||||||
|
//
|
||||||
|
//s1 --State
|
||||||
|
late bool currentState;
|
||||||
|
//s1 --State
|
||||||
|
//
|
||||||
|
//s1 --Constants
|
||||||
|
//s1 --Constants
|
||||||
|
//!SECTION
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
//
|
||||||
|
//SECTION - State Variables initializations & Listeners
|
||||||
|
//s1 --Controllers & Listeners
|
||||||
|
//s1 --Controllers & Listeners
|
||||||
|
//
|
||||||
|
//s1 --State
|
||||||
|
currentState = widget.initialState ?? widget.stateVariable ?? false;
|
||||||
|
//s1 --State
|
||||||
|
//
|
||||||
|
//s1 --Late & Async Initializers
|
||||||
|
//s1 --Late & Async Initializers
|
||||||
|
//!SECTION
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void didChangeDependencies() {
|
||||||
|
super.didChangeDependencies();
|
||||||
|
//
|
||||||
|
//SECTION - State Variables initializations & Listeners
|
||||||
|
//s1 --State
|
||||||
|
//s1 --State
|
||||||
|
//!SECTION
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void didUpdateWidget(AstromicCustomToggle oldWidget) {
|
||||||
|
if (widget.stateVariable != null && widget.stateVariable != oldWidget.stateVariable) {
|
||||||
|
currentState = widget.stateVariable!;
|
||||||
|
}
|
||||||
|
super.didUpdateWidget(oldWidget);
|
||||||
|
}
|
||||||
|
|
||||||
|
//SECTION - Stateless functions
|
||||||
|
//!SECTION
|
||||||
|
|
||||||
|
//SECTION - Action Callbacks
|
||||||
|
_onTap() {
|
||||||
|
setState(() {
|
||||||
|
currentState = !currentState;
|
||||||
|
if (widget.onStateChanged != null) widget.onStateChanged!(currentState);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//!SECTION
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
//SECTION - Build Setup
|
||||||
|
//s1 -Values
|
||||||
|
//double w = MediaQuery.of(context).size.width;
|
||||||
|
//double h = MediaQuery.of(context).size.height;
|
||||||
|
//s1 -Values
|
||||||
|
//
|
||||||
|
//s1 -Widgets
|
||||||
|
//s1 -Widgets
|
||||||
|
//!SECTION
|
||||||
|
|
||||||
|
//SECTION - Build Return
|
||||||
|
return widget.itemBuilder(currentState, widget.isEnabled!, widget.isEnabled! ? () => _onTap() : null);
|
||||||
|
|
||||||
|
//!SECTION
|
||||||
|
}
|
||||||
|
}
|
||||||
41
lib/src/Toggles/Switcher/style.dart
Normal file
41
lib/src/Toggles/Switcher/style.dart
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
import 'package:flutter/widgets.dart';
|
||||||
|
|
||||||
|
class AstromicSwitcherToggleStyle {
|
||||||
|
final double width;
|
||||||
|
final double height;
|
||||||
|
final double labelSpacing;
|
||||||
|
final double toggleSize;
|
||||||
|
final double togglePadding;
|
||||||
|
final double borderRadius;
|
||||||
|
//
|
||||||
|
final Color activeColor;
|
||||||
|
final Color? activeToggleColor;
|
||||||
|
final BoxBorder? activeToggleBorder;
|
||||||
|
final BoxBorder? activeSwitchBorder;
|
||||||
|
final Widget? innerActiveWidget;
|
||||||
|
//
|
||||||
|
final Color inactiveColor;
|
||||||
|
final Color? inactiveToggleColor;
|
||||||
|
final BoxBorder? inactiveSwitchBorder;
|
||||||
|
final BoxBorder? inactiveToggleBorder;
|
||||||
|
final Widget? innerInactiveWidget;
|
||||||
|
//
|
||||||
|
const AstromicSwitcherToggleStyle({
|
||||||
|
this.width = 70,
|
||||||
|
this.height = 35,
|
||||||
|
this.labelSpacing = 12,
|
||||||
|
this.borderRadius = 20,
|
||||||
|
this.toggleSize = 24,
|
||||||
|
this.activeColor = const Color(0xFFC71717),
|
||||||
|
this.activeToggleColor,
|
||||||
|
this.inactiveColor = const Color(0xfffefefe),
|
||||||
|
this.inactiveToggleColor,
|
||||||
|
this.togglePadding = 12,
|
||||||
|
this.activeSwitchBorder,
|
||||||
|
this.activeToggleBorder,
|
||||||
|
this.inactiveSwitchBorder,
|
||||||
|
this.inactiveToggleBorder,
|
||||||
|
this.innerActiveWidget,
|
||||||
|
this.innerInactiveWidget,
|
||||||
|
});
|
||||||
|
}
|
||||||
149
lib/src/Toggles/Switcher/switcher.toggle.dart
Normal file
149
lib/src/Toggles/Switcher/switcher.toggle.dart
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
// ignore_for_file: public_member_api_docs, sort_constructors_first
|
||||||
|
//s2 Core Packages Imports
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_switch/flutter_switch.dart';
|
||||||
|
//s2 Dependancies Imports
|
||||||
|
//s3 Services
|
||||||
|
//s3 Models
|
||||||
|
import 'style.dart';
|
||||||
|
//s1 Exports
|
||||||
|
//
|
||||||
|
|
||||||
|
//
|
||||||
|
class AstromicSwitcherToggle extends StatefulWidget {
|
||||||
|
//SECTION - Widget Arguments
|
||||||
|
//s1 -- Functionality
|
||||||
|
/// If provided, you have to change the variable yourself in the onStateChanged!
|
||||||
|
final bool? stateVariable;
|
||||||
|
final bool? initialState;
|
||||||
|
final void Function(bool)? onStateChanged;
|
||||||
|
//s1 -- Configuration
|
||||||
|
final bool? isEnabled;
|
||||||
|
final bool? withLabel;
|
||||||
|
final bool? isLabelTapable;
|
||||||
|
final TextDirection? textDirection;
|
||||||
|
//s1 -- Style
|
||||||
|
final AstromicSwitcherToggleStyle Function(bool isEnabled, bool isSelected) style;
|
||||||
|
//s1 -- Content
|
||||||
|
final Widget Function(bool isEnabled, bool isSelected)? label;
|
||||||
|
//!SECTION
|
||||||
|
//
|
||||||
|
const AstromicSwitcherToggle({
|
||||||
|
super.key,
|
||||||
|
this.stateVariable,
|
||||||
|
this.initialState,
|
||||||
|
this.onStateChanged,
|
||||||
|
//
|
||||||
|
this.isEnabled = true,
|
||||||
|
this.withLabel = true,
|
||||||
|
this.isLabelTapable = true,
|
||||||
|
this.textDirection = TextDirection.ltr,
|
||||||
|
//
|
||||||
|
required this.style,
|
||||||
|
//
|
||||||
|
this.label,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<AstromicSwitcherToggle> createState() => AstromicSwitcherToggleState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class AstromicSwitcherToggleState extends State<AstromicSwitcherToggle> {
|
||||||
|
//
|
||||||
|
//SECTION - State Variables
|
||||||
|
//s1 --Controllers
|
||||||
|
//s1 --Controllers
|
||||||
|
//
|
||||||
|
//s1 --State
|
||||||
|
late bool _currentState;
|
||||||
|
//s1 --State
|
||||||
|
//
|
||||||
|
//s1 --Constants
|
||||||
|
//s1 --Constants
|
||||||
|
//!SECTION
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
//
|
||||||
|
//SECTION - State Variables initializations & Listeners
|
||||||
|
//s1 --Controllers & Listeners
|
||||||
|
//s1 --Controllers & Listeners
|
||||||
|
//
|
||||||
|
//s1 --State
|
||||||
|
_currentState = widget.initialState ?? widget.stateVariable ?? false;
|
||||||
|
//s1 --State
|
||||||
|
//
|
||||||
|
//s1 --Late & Async Initializers
|
||||||
|
//s1 --Late & Async Initializers
|
||||||
|
//!SECTION
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void didUpdateWidget(AstromicSwitcherToggle oldWidget) {
|
||||||
|
if (widget.stateVariable != null && widget.stateVariable != oldWidget.stateVariable) {
|
||||||
|
_currentState = widget.stateVariable!;
|
||||||
|
}
|
||||||
|
super.didUpdateWidget(oldWidget);
|
||||||
|
}
|
||||||
|
|
||||||
|
//SECTION - Action Callbacks
|
||||||
|
_onTap(bool newValue) {
|
||||||
|
setState(() {
|
||||||
|
_currentState = newValue;
|
||||||
|
if (widget.onStateChanged != null) widget.onStateChanged!(_currentState);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//!SECTION
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
//SECTION - Build Setup
|
||||||
|
//s1 -Values
|
||||||
|
//s1 -Values
|
||||||
|
//
|
||||||
|
//s1 -Widgets
|
||||||
|
//s1 -Widgets
|
||||||
|
//!SECTION
|
||||||
|
|
||||||
|
//SECTION - Build Return
|
||||||
|
return Directionality(
|
||||||
|
textDirection: widget.textDirection ?? TextDirection.ltr,
|
||||||
|
child: Row(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
//S1 -- Item
|
||||||
|
FlutterSwitch(
|
||||||
|
width: widget.style(widget.isEnabled!, _currentState).width,
|
||||||
|
height: widget.style(widget.isEnabled!, _currentState).height,
|
||||||
|
borderRadius: widget.style(widget.isEnabled!, _currentState).borderRadius,
|
||||||
|
value: _currentState,
|
||||||
|
toggleSize: widget.style(widget.isEnabled!, _currentState).toggleSize,
|
||||||
|
disabled: false,
|
||||||
|
//
|
||||||
|
activeColor: widget.style(widget.isEnabled!, _currentState).activeColor,
|
||||||
|
activeToggleColor: widget.style(widget.isEnabled!, _currentState).activeToggleColor,
|
||||||
|
activeSwitchBorder: widget.style(widget.isEnabled!, _currentState).activeSwitchBorder,
|
||||||
|
activeToggleBorder: widget.style(widget.isEnabled!, _currentState).activeToggleBorder,
|
||||||
|
activeIcon: widget.style(widget.isEnabled!, _currentState).innerActiveWidget,
|
||||||
|
//
|
||||||
|
inactiveColor: widget.style(widget.isEnabled!, _currentState).inactiveColor,
|
||||||
|
inactiveToggleColor: widget.style(widget.isEnabled!, _currentState).inactiveToggleColor,
|
||||||
|
inactiveSwitchBorder: widget.style(widget.isEnabled!, _currentState).inactiveSwitchBorder,
|
||||||
|
inactiveToggleBorder: widget.style(widget.isEnabled!, _currentState).inactiveToggleBorder,
|
||||||
|
inactiveIcon: widget.style(widget.isEnabled!, _currentState).innerInactiveWidget,
|
||||||
|
//
|
||||||
|
padding: widget.style(widget.isEnabled!, _currentState).togglePadding,
|
||||||
|
showOnOff: false,
|
||||||
|
onToggle: (s) => _onTap(s),
|
||||||
|
),
|
||||||
|
//S1 -- Label Spacing
|
||||||
|
if (widget.withLabel!) SizedBox(width: widget.style(widget.isEnabled!, _currentState).labelSpacing),
|
||||||
|
//S1 -- Label
|
||||||
|
if (widget.withLabel! && widget.label != null) GestureDetector(onTap: widget.isLabelTapable! ? _onTap(!_currentState) : null, child: widget.label!(widget.isEnabled!, _currentState)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
//!SECTION
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,14 @@
|
|||||||
//s2 Core Packages Imports
|
//s2 Core Packages Imports
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'Checkbox/checkbox.toggle.dart';
|
import 'Checkbox/checkbox.toggle.dart';
|
||||||
|
import 'Switcher/switcher.toggle.dart';
|
||||||
|
import 'Custom/custom.toggle.dart';
|
||||||
|
//
|
||||||
|
import 'Switcher/style.dart';
|
||||||
|
import 'Checkbox/style.dart';
|
||||||
|
//
|
||||||
|
export 'Switcher/style.dart';
|
||||||
|
export 'Checkbox/style.dart';
|
||||||
|
|
||||||
class AstromicToggles {
|
class AstromicToggles {
|
||||||
//S1 -- Checkbox
|
//S1 -- Checkbox
|
||||||
@@ -11,26 +19,74 @@ class AstromicToggles {
|
|||||||
void Function(bool)? onStateChanged,
|
void Function(bool)? onStateChanged,
|
||||||
//
|
//
|
||||||
bool? isEnabled,
|
bool? isEnabled,
|
||||||
|
bool? withLabel,
|
||||||
bool? isLabelTapable,
|
bool? isLabelTapable,
|
||||||
TextDirection? textDirection,
|
TextDirection? textDirection,
|
||||||
//
|
//
|
||||||
double? itemSize,
|
required AstromicCheckboxToggleStyle Function(bool isEnabled, bool isSelected) style,
|
||||||
double? labelSpacing,
|
|
||||||
//
|
//
|
||||||
|
Widget Function(bool isEnabled, bool isSelected)? innerWidget,
|
||||||
|
Widget Function(bool isEnabled, bool isSelected)? label,
|
||||||
//
|
//
|
||||||
required Widget Function(bool isChecked, bool isEnabled, VoidCallback? onTap) itemBuilder,
|
|
||||||
Widget Function(bool isChecked, bool isEnabled, VoidCallback? onTap)? labelBuilder,
|
|
||||||
}) =>
|
}) =>
|
||||||
AstromicCheckboxToggle(
|
AstromicCheckboxToggle(
|
||||||
stateVariable: stateVariable,
|
stateVariable: stateVariable,
|
||||||
initialState: initialState,
|
initialState: initialState,
|
||||||
onStateChanged: onStateChanged,
|
onStateChanged: onStateChanged,
|
||||||
isEnabled: isEnabled ?? true,
|
isEnabled: isEnabled ?? true,
|
||||||
isLabelTapable: isLabelTapable ?? true,
|
withLabel: withLabel ?? false,
|
||||||
|
isLabelTapable: isLabelTapable ?? false,
|
||||||
textDirection: textDirection ?? TextDirection.ltr,
|
textDirection: textDirection ?? TextDirection.ltr,
|
||||||
itemSize: itemSize ?? 24.0,
|
style: style,
|
||||||
labelSpacing: labelSpacing ?? 8.0,
|
innerWidget: innerWidget,
|
||||||
|
label: label,
|
||||||
|
);
|
||||||
|
|
||||||
|
//S1 -- Switcher
|
||||||
|
static Widget switcher({
|
||||||
|
//
|
||||||
|
bool? stateVariable,
|
||||||
|
bool? initialState,
|
||||||
|
void Function(bool)? onStateChanged,
|
||||||
|
//
|
||||||
|
bool? isEnabled,
|
||||||
|
bool? withLabel,
|
||||||
|
bool? isLabelTapable,
|
||||||
|
TextDirection? textDirection,
|
||||||
|
//
|
||||||
|
required AstromicSwitcherToggleStyle Function(bool isEnabled, bool isSelected) style,
|
||||||
|
//
|
||||||
|
Widget Function(bool isEnabled, bool isSelected)? label,
|
||||||
|
//
|
||||||
|
}) =>
|
||||||
|
AstromicSwitcherToggle(
|
||||||
|
stateVariable: stateVariable,
|
||||||
|
initialState: initialState,
|
||||||
|
onStateChanged: onStateChanged,
|
||||||
|
isEnabled: isEnabled ?? true,
|
||||||
|
withLabel: withLabel ?? false,
|
||||||
|
isLabelTapable: isLabelTapable ?? false,
|
||||||
|
textDirection: textDirection ?? TextDirection.ltr,
|
||||||
|
style: style,
|
||||||
|
label: label,
|
||||||
|
);
|
||||||
|
|
||||||
|
//S1 -- Custom
|
||||||
|
static Widget custom({
|
||||||
|
//
|
||||||
|
bool? stateVariable,
|
||||||
|
bool? initialState,
|
||||||
|
void Function(bool)? onStateChanged,
|
||||||
|
//
|
||||||
|
bool? isEnabled,
|
||||||
|
//
|
||||||
|
required Widget Function(bool isChecked, bool isEnabled, VoidCallback? onTap) itemBuilder,
|
||||||
|
}) =>
|
||||||
|
AstromicCustomToggle(
|
||||||
|
stateVariable: stateVariable,
|
||||||
|
initialState: initialState,
|
||||||
|
onStateChanged: onStateChanged,
|
||||||
|
isEnabled: isEnabled ?? true,
|
||||||
itemBuilder: itemBuilder,
|
itemBuilder: itemBuilder,
|
||||||
labelBuilder: labelBuilder,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ dependencies:
|
|||||||
cached_network_image: ^3.3.1
|
cached_network_image: ^3.3.1
|
||||||
flutter_svg: ^2.0.10+1
|
flutter_svg: ^2.0.10+1
|
||||||
octo_image: ^2.0.0
|
octo_image: ^2.0.0
|
||||||
|
flutter_switch: ^0.3.2
|
||||||
#
|
#
|
||||||
##!SECTION --Dependencies
|
##!SECTION --Dependencies
|
||||||
#
|
#
|
||||||
|
|||||||
Reference in New Issue
Block a user