Flutter: Das Verhalten von GestureDetector hängt von der internen Container-Eigenschaft ab

Erstellt am 23. Jan. 2018  ·  3Kommentare  ·  Quelle: flutter/flutter

Schritte zum Reproduzieren

Es gibt zwei GestureDetectors mit einem Container mit Polsterung,
der einzige Unterschied besteht darin, ob der interne Container eine Farbeigenschaft hat oder nicht.

Tippen Sie auf den Leerraum um die Symbole, d. h. tippen Sie auf den Füllbereich:

  • Container hat Farbe: onTap wird aufgerufen
  • Container hat keine Farbe: onTap wird nicht aufgerufen
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),
                ),
              )
            ),
          ],
        ),
      );
    }),
  ));
}

Tippen Sie auf das Symbol selbst, beide onTap werden aufgerufen.

Flutter Doktor

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

Hilfreichster Kommentar

Dies ist beabsichtigt. Sie können das Verhalten mit dem Argument behavior auf GestureDetector .
Siehe https://docs.flutter.io/flutter/rendering/HitTestBehavior-class.html

Alle 3 Kommentare

Dies ist beabsichtigt. Sie können das Verhalten mit dem Argument behavior auf GestureDetector .
Siehe https://docs.flutter.io/flutter/rendering/HitTestBehavior-class.html

Vielen Dank!

Ich verstehe, dass dies ein beabsichtigtes Verhalten ist, also schließe ich dies.

Hallo nochmal,
Ich frage mich nur: Gibt es einen bestimmten Grund, warum Gesten beim Auffüllen keine GestureDetector-Methoden auslösen, wenn das Verhalten "deferToChild" ist? Während es durchaus sinnvoll ist, unterschiedliche Verhaltensweisen zu haben, sollte "deferToChild" aus meiner Sicht auf jeden Fall auch das Padding des GestureDetectors-Kindes beinhalten.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen