GestureDetector 위젯 💫 🌌 ✨

제스처 감지기 위젯


GestureDetector widget'ını diğer herhangi bir widget'n etrafına sararak bu alt widget'ın kullanıcıdan gelen etkileşimi dinlemesini sağlayabilirsiniz.

GestureDetector'in yalnızca iki argumana ihtiyacı vardır: bir widget (child) ve bir harekete karşılık gelen bir callback .

질문:

GestureDetector(
    onTap: () => print("tapped!"),
    child: Text("Tap Me"),
);


onTap gibi iletilebilecek 30 farklı argumandan bazıları:

onTaponTapUponTapDownonLongPressonDoubleTaponHorizontalDragStartonVerticalDragDownonPanDownonScaleStartonTapUp , globalPosition'ı veya dokunulan ekrandaki konumu ortaya çıkaran TapUpDetails nesnesinin bir örneğini (instance) geri iletir.
Sürükleme ile ilgili olanlar gibi daha karmaşık hareketlerden bazıları, daha ilginç özelliklere sahiptir. Sürüklemenin başladığı saat, başladığı konum, bittiği konum ve sürüklemenin hızı hakkında ayrıntılı bilgi verirler. Bu, sürüklemeleri yön, hız vb. temelinde değiştirmenize olanak tanır.



body: GestureDetector(
    onDoubleTap: () {
      setState(() {
        widget.settings.selectedTemperature =
            widget.settings.selectedTemperature == TemperatureUnit.celsius
            ? TemperatureUnit.celsius
            : TemperatureUnit.fahrenheit;
      });
    },
    onVerticalDragUpdate: (DragUpdateDetails v)
                    => _handleDragEnd(v, context),
    child: ColorTransitionBox()...


GestureDetector.onVerticalDragUpdate olarak iletilen 콜백을 제거하고, ekranda yukarı veya aşağı sürüklerken tekrar tekrar çağrılır ve DragUpdateDetails sınıfının örneği olan bir argüman olarak sürüklebil bilak sürüklerken tekrar tekrar çağrılır veya.

void _handleDragEnd(DragUpdateDetails d, BuildContext context) {
    double screenHeight =
        MediaQuery.of(context).size.height; //MediaQuery'ile ekran yüksekliği elde edilir.

    double dragEnd = d.globalPosition.dy; //globalPosition.dy, onVerticalDragUpdate çağrıldığında işaretçinin(pointer) bulunduğu ekranın y eksenindeki konumdur.

    double percentage =
        (dragEnd / screenHeight) * 100.0; //Konumu 0 ile 100 arasında bir sayıya dönüştürmek için önceki iki sayıyı kullanır (ekran yüksekliğinin %100'ünü temsil eder)

    int scaleToTimesOfDay =
        (percentage ~/ 12).toInt(); //Günün saatini seçmek için 0 tabanlı bir listeyle çalıştığımız için bu sayıyı 0-7 ölçeğine dönüştürür ve sekiz seçenek vardır
    if (scaleToTimesOfDay > 7) scaleToTimesOfDay = 7;

    _handleStateChange(scaleToTimesOfDay);
}


리소스: Flutter in Action 5장 ✨

좋은 웹페이지 즐겨찾기