Crear deslizadores en Flutter con el widget Slider


Avatar de Pedro Cortez

¿Quieres crear un deslizador en tu aplicación Flutter para que tus usuarios puedan indicar su edad, una fecha u otro valor numérico? En esta guía, te explico cómo configurar el widget Slider.


widget slider flutter

¿Por qué usar el widget Slider?

El widget Slider es útil en varios casos de uso dentro de tu aplicación Flutter. Por ejemplo:

  • Selección de valores numéricos, permitiendo al usuario elegir su edad, la temperatura deseada o un nivel de sonido.
  • Ajuste de parámetros, como el brillo, el volumen o la intensidad de un efecto.
  • Control de un rango de valores, cuando el usuario necesita ajustar un valor entre un mínimo y un máximo sin ingresar texto manualmente.

¿Cómo usar el widget Slider?

Aquí tienes un ejemplo básico del uso de Slider (en este caso, para seleccionar una edad):

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: AgeSelector(),
    );
  }
}

class AgeSelector extends StatefulWidget {
  @override
  _AgeSelectorState createState() => _AgeSelectorState();
}

class _AgeSelectorState extends State<AgeSelector> {
  double _age = 18;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("Selecciona tu edad")),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Text("Edad seleccionada: ${_age.toInt()} años", style: const TextStyle(fontSize: 20)),
          Slider(
            value: _age,
            min: 10,
            max: 100,
            divisions: 90,
            label: _age.toInt().toString(),
            onChanged: (double newValue) {
              setState(() {
                _age = newValue;
              });
            },
          ),
        ],
      ),
    );
  }
}

Explicación de las principales propiedades:

  • value: Valor actual del Slider.
  • min y max: Definen el rango de valores posibles.
  • divisions: Número de divisiones (aquí 90, permitiendo pasos de 1 entre 10 y 100).
  • label: Muestra el valor actual sobre el cursor.
  • onChanged: Función llamada cuando se mueve el cursor, permitiendo actualizar el estado.

¿Cómo personalizar el Slider?

Puedes personalizar el Slider de varias formas. Aquí te muestro algunas.

Cambiar el color del cursor y la barra

Flutter permite personalizar la apariencia del Slider usando las propiedades activeColor (barra activa) e inactiveColor (barra inactiva):

Slider(
  value: _age,
  min: 10,
  max: 100,
  activeColor: Colors.blue,
  inactiveColor: Colors.grey,
  onChanged: (double newValue) {
    setState(() {
      _age = newValue;
    });
  },
)

Modificar el color según el valor seleccionado

También es posible cambiar el color de la barra dependiendo del valor seleccionado con este truco:

Slider(
  value: _age,
  min: 10,
  max: 100,
  activeColor: _age < 30 ? Colors.green : (_age < 60 ? Colors.orange : Colors.red),
  onChanged: (double newValue) {
    setState(() {
      _age = newValue;
    });
  },
)

Personalizar la forma del cursor

Para modificar la forma del cursor, usa SliderTheme con la propiedad thumbShape:

SliderTheme(
  data: SliderTheme.of(context).copyWith(
    thumbShape: RoundSliderThumbShape(enabledThumbRadius: 12.0),
  ),
  child: Slider(
    value: _age,
    min: 10,
    max: 100,
    onChanged: (double newValue) {
      setState(() {
        _age = newValue;
      });
    },
  ),
)

Modificar la apariencia de la barra

Puedes cambiar el grosor y estilo de la barra con trackHeight y trackShape:

SliderTheme(
  data: SliderTheme.of(context).copyWith(
    trackHeight: 8.0,
  ),
  child: Slider(
    value: _age,
    min: 10,
    max: 100,
    onChanged: (double newValue) {
      setState(() {
        _age = newValue;
      });
    },
  ),
)

Agregar un tooltip sobre el cursor

Finalmente, puedes usar showValueIndicator para mostrar un tooltip con el valor seleccionado:

SliderTheme(
  data: SliderTheme.of(context).copyWith(
    showValueIndicator: ShowValueIndicator.always,
  ),
  child: Slider(
    value: _age,
    min: 10,
    max: 100,
    label: _age.toString(),
    onChanged: (double newValue) {
      setState(() {
        _age = newValue;
      });
    },
  ),
)
Avatar de Pedro Cortez