Flutter: Le comportement de GestureDetector dépend de la propriété interne du conteneur

Créé le 23 janv. 2018  ·  3Commentaires  ·  Source: flutter/flutter

Étapes pour reproduire

Il y a deux GestureDetectors comprennent un conteneur avec rembourrage,
la seule différence est de savoir si le conteneur interne a une propriété de couleur ou non.

Appuyez sur l'espace autour des icônes, c'est-à-dire appuyez sur la zone de remplissage :

  • Le conteneur a une couleur : onTap est appelé
  • Le conteneur n'a pas de couleur : onTap n'est pas appelé
import 'package:flutter/foundation.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/material.dart';

void main() {
  final GlobalKey<ScaffoldState> _key = new GlobalKey<ScaffoldState>();
  runApp(new MaterialApp(
    title: 'GestureDetector Test',
    home: new Builder(builder: (BuildContext context) {
      return new Scaffold(
        key: _key,
        appBar: new AppBar(title: new Text("GestureDetector Test")),
        body: new Column(
          children: <Widget>[
            new Container(
              child: new GestureDetector(
                onTap: () {
                  _key.currentState.showSnackBar(new SnackBar(content: new Text("Foo!")));
                },
                child: new Container(
                  color: Colors.blue,
                  padding: const EdgeInsets.all(16.0),
                  child: const Icon(Icons.star, size: 32.0),
                ),
              )
            ),
            new Container(
              child: new GestureDetector(
                onTap: () {
                  _key.currentState.showSnackBar(new SnackBar(content: new Text("Bar!")));
                },
                child: new Container(
                  //color: Colors.blue, // no color
                  padding: const EdgeInsets.all(16.0),
                  child: const Icon(Icons.star, size: 32.0),
                ),
              )
            ),
          ],
        ),
      );
    }),
  ));
}

Appuyez sur l'icône elle-même, les deux onTap seront appelés.

Docteur Flutter

alpha 0.0.20

[✓] Flutter (on Mac OS X 10.12.6 16G1114, locale ja-JP, channel alpha)
    • Flutter at /Applications/flutter
    • Framework revision 8f65fec5f5 (6 weeks ago), 2017-12-12 09:50:14 -0800
    • Engine revision edaecdc8b8
    • Tools Dart version 1.25.0-dev.11.0
    • Engine Dart version 2.0.0-edge.d8ae797298c3a6cf8dc9f4558707bd2672224d3e

[✓] Android toolchain - develop for Android devices (Android SDK 27.0.3)
    • Android SDK at /Users/najeira/Library/Android/sdk
    • Android NDK at /Users/najeira/Library/Android/sdk/ndk-bundle
    • Platform android-27, build-tools 27.0.3
    • ANDROID_HOME = /Users/najeira/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-915-b08)

[✓] iOS toolchain - develop for iOS devices (Xcode 9.2)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 9.2, Build version 9C40b
    • ios-deploy 1.9.2
    • CocoaPods version 1.2.1

[✓] Android Studio (version 3.0)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-915-b08)

[✓] IntelliJ IDEA Ultimate Edition (version 2017.3.1)
    • Flutter plugin version 20.0.3
    • Dart plugin version 173.3942.31

Commentaire le plus utile

C'est intentionnel. Vous pouvez basculer le comportement en utilisant l'argument behavior à GestureDetector .
Voir https://docs.flutter.io/flutter/rendering/HitTestBehavior-class.html

Tous les 3 commentaires

C'est intentionnel. Vous pouvez basculer le comportement en utilisant l'argument behavior à GestureDetector .
Voir https://docs.flutter.io/flutter/rendering/HitTestBehavior-class.html

Merci!

Je comprends qu'il s'agit d'un comportement intentionnel, donc je ferme ceci.

Re-bonjour,
je me demandais simplement : y a-t-il une raison spécifique pour laquelle les gestes sur le remplissage ne déclenchent pas les méthodes GestureDetector lorsque le comportement est « deferToChild » ? Bien qu'il soit tout à fait logique d'avoir des comportements différents, "deferToChild" devrait certainement inclure définitivement également le rembourrage de l'enfant GestureDetectors, de mon point de vue.

Cette page vous a été utile?
0 / 5 - 0 notes