4
votes

J'ai besoin de personnaliser le bouton de commutation en flutter

c'est le bouton de l'interrupteur de scintillement: -

entrez la description de l'image ici

Je veux ce design: -

entrez la description de l'image ici


3 commentaires

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


5 Réponses :


17
votes

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
            ),)
          ],
        ),
      ),
    );
  }
}

entrez la description de l'image ici


0 commentaires

7
votes

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),
                                          ),
                                   ),
                                ),
                            ),
                          );
                     },
               );
         }
       }


1 commentaires

Cela ne fonctionne pas correctement.Il donne toujours une valeur fausse lors du changement de commutateur.Tout d'abord, vous devriez le tester.



2
votes

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:


0 commentaires

9
votes

ensemble

 CupertinoSwitch(
              value: _switchValue,
              onChanged: (value) {
                setState(() {
                  _switchValue = value;
                });
              },
            ),

dans votre écran.

bool _switchValue=true;


2 commentaires

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



1
votes

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

Commutateur de scintillement


2 commentaires

Bonjour, Les liens vers des ressources externes sont encouragés, mais veuillez ajouter du contexte autour du lien afin que vos collègues utilisateurs aient une idée de ce que c'est et pourquoi il est là. Citez toujours la partie la plus pertinente d'un lien important, au cas où le site cible serait inaccessible ou serait définitivement hors ligne.


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