Search code examples
flutterdartlistviewsleep

I want to use a ListWheelScrollView in Flutter but only output the Selected Item after its Selected


I want to use a ListWheelScrollView in Flutter but only output the Selected Item after its Selected. So beacause now when i go from the bottom to the Top in one Go it outputs every item...

This is my Code:

List<int> numbers = List.generate(3, (index) => index + 1);

void _updateSelectedCardType(int index) {
  setState(() {
    _selectedIndex = index;
    switch (index) {
      case 0:
        selectedCard = '1';
        break;
      case 1:
        selectedCard = '2';
        break;
      case 2:
        selectedCard = '3';
        break;
    }
  sleep(const Duration(seconds: 1));
  print('Selected card type: $selectedCard');
}

Here I tried to only output it after a second so if its selected and doesnt change I can print it... any idea on how to do it


Solution

  • try that

    import 'dart:async';
    import 'package:flutter/material.dart';
    
    class MyWidget extends StatefulWidget {
      @override
      _MyWidgetState createState() => _MyWidgetState();
    }
    
    class _MyWidgetState extends State<MyWidget> {
      int _selectedIndex = 0;
      String selectedCard = '1';
      Timer? _timer;
    
      List<int> numbers = List.generate(3, (index) => index + 1);
    
      @override
      void dispose() {
        _timer?.cancel();
        super.dispose();
      }
    
      void _onSelectedItemChanged(int index) {
        setState(() {
          _selectedIndex = index;
          switch (index) {
            case 0:
              selectedCard = '1';
              break;
            case 1:
              selectedCard = '2';
              break;
            case 2:
              selectedCard = '3';
              break;
          }
        });
        _timer?.cancel();
        _timer = Timer(Duration(milliseconds: 500), () {
          print('Selected card type: $selectedCard');
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return ListWheelScrollView(
          itemExtent: 50,
          children: numbers.map((number) {
            return Center(child: Text('$number'));
          }).toList(),
          onSelectedItemChanged: _onSelectedItemChanged,
          physics: FixedExtentScrollPhysics(),
        );
      }
    }