c'est le bouton de l'interrupteur de scintillement: -
Je veux ce design: -
5 Réponses :
Vous pouvez utiliser le package https://pub.dev/packages/custom_switch ou le fork et le modifier à votre
code complet
import 'package:custom_switch/custom_switch.dart'; import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, theme: ThemeData( primarySwatch: Colors.deepOrange ), home: HomeScreen(), ); } } class HomeScreen extends StatefulWidget { @override _HomeScreenState createState() => _HomeScreenState(); } class _HomeScreenState extends State<HomeScreen> { bool status = false; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Custom Switch Example'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ CustomSwitch( activeColor: Colors.pinkAccent, value: status, onChanged: (value) { print("VALUE : $value"); setState(() { status = value; }); }, ), SizedBox(height: 12.0,), Text('Value : $status', style: TextStyle( color: Colors.black, fontSize: 20.0 ),) ], ), ), ); } }
Créer une classe de commutateur personnalisée
_enable = false; CustomSwitch( value: _enable, onChanged: (bool val){ setState(() { _enabled = val; }); }, ),
Appelez cette classe en tant que widget et utilisez le paramètre value pour définir l'état du commutateur
class CustomSwitch extends StatefulWidget { final bool value; final ValueChanged<bool> onChanged; CustomSwitch({ Key key, this.value, this.onChanged}) : super(key: key); @override _CustomSwitchState createState() => _CustomSwitchState(); } class _CustomSwitchState extends State<CustomSwitch> with SingleTickerProviderStateMixin { Animation _circleAnimation; AnimationController _animationController; @override void initState() { super.initState(); _animationController = AnimationController(vsync: this, duration: Duration(milliseconds: 60)); _circleAnimation = AlignmentTween( begin: widget.value ? Alignment.centerRight : Alignment.centerLeft, end: widget.value ? Alignment.centerLeft :Alignment.centerRight).animate(CurvedAnimation( parent: _animationController, curve: Curves.linear)); } @override Widget build(BuildContext context) { return AnimatedBuilder( animation: _animationController, builder: (context, child) { return GestureDetector( onTap: () { if (_animationController.isCompleted) { _animationController.reverse(); } else { _animationController.forward(); } widget.value == false ? widget.onChanged(true) : widget.onChanged(false); }, child: Container( width: 45.0, height: 28.0, decoration: BoxDecoration( borderRadius: BorderRadius.circular(24.0), color: _circleAnimation.value == Alignment.centerLeft ? Colors.grey : Colors.blue,), child: Padding( padding: const EdgeInsets.only( top: 2.0, bottom: 2.0, right: 2.0, left: 2.0), child: Container( alignment: widget.value ? Alignment.centerRight : Alignment.centerLeft, child: Container( width: 20.0, height: 20.0, decoration: BoxDecoration( shape: BoxShape.circle, color: Colors.white), ), ), ), ), ); }, ); } }
Cela ne fonctionne pas correctement.Il donne toujours une valeur fausse lors du changement de commutateur.Tout d'abord, vous devriez le tester.
Vous pouvez réaliser une telle conception en utilisant ces packages :
Cette utilisation provient de leur readme
import 'package:custom_switch_button/custom_switch_button.dart'; bool isChecked = false; return MaterialApp( home: Scaffold( appBar: AppBar( title: const Text('Custom Switch Button example app'), ), body: GestureDetector( onTap: () { setState(() { isChecked = !isChecked; }); }, child: Center( child: CustomSwitchButton( backgroundColor: Colors.blueGrey, unCheckedColor: Colors.white, animationDuration: Duration(milliseconds: 400), checkedColor: Colors.lightGreen, checked: isChecked, ), ), ), ), );
Résultat final:
ensemble
CupertinoSwitch( value: _switchValue, onChanged: (value) { setState(() { _switchValue = value; }); }, ),
dans votre écran.
bool _switchValue=true;
Veuillez expliquer pourquoi et comment votre solution fonctionne. Ajoutez peut-être une référence ou un lien vers une documentation et formatez correctement vos messages. Cependant, je ne suis pas sûr que votre réponse résout la question OP. Il a posé des questions sur la conception, pas sur le changement de valeur.
ils veulent que le design comme switchbutton sur ios et CupertinoSwitch résolvent ce qu'ils veulent et je mets "bool _switchValue = true;" il suffit de savoir si la var contient l'état du bouton de commutation
Pour un interrupteur personnalisé. J'ai utilisé ce package. https://pub.dev/packages/flutter_switch
Vous pouvez personnaliser la hauteur et la largeur du commutateur, le rayon de la bordure du commutateur, les couleurs, la taille du commutateur, etc.
Installer:
FlutterSwitch( height: 20.0, width: 40.0, padding: 4.0, toggleSize: 15.0, borderRadius: 10.0, activeColor: lets_cyan, value: isToggled, onToggle: (value) { setState(() { isToggled = value; }); }, ),
Importer:
import 'package:flutter_switch/flutter_switch.dart';
Utilisation de l'échantillon:
dependencies: flutter_switch: ^0.0.2
Nick, il est bon que vous (et d'autres) apportiez des informations utiles, mais vous devriez le tester soigneusement.Widget ne se mettra pas à jour lorsque je changerai la valeur par setState. Regardez CupertinoSwitch par exemple. Merci
Essayez ceci: medium.com/@felixblaschke / ...
Veuillez démontrer quelques efforts de recherche! Qu'avez-vous essayé jusqu'à présent?
vous pouvez regarder ce tutoriel ici: youtube.com/watch?v=TYNbMnaEnmA