2017-10-04 13 views
0

Je veux montrer un popup au toucher Coordonnées. J'utilise des widgets Stack et Positioned pour placer le popup.Comment calculer les coordonnées de toucher dans #flutter?

+1

J'ai ajouté une réponse à votre question de montrer popups après un événement contact, je vous suggère de faire votre message plus clair car il est un peu confus semblent maintenant, le titre et le corps ne sont pas claires et ne pas se rapportent les uns aux autres. – aziza

+0

@aziza Je veux montrer un popup à ces coordonnées où l'écran est touché. – AjayKumar

+0

@aziza par exemple si l'écran est un graphique puis si je touche à (15,15) point alors pop devrait montrer à (15,15) .... – AjayKumar

Répondre

1

Vous pouvez ajouter un GestureDetector comme parent de la pile et enregistrer le module d'écoute onTapDownDetails. Cela devrait appeler votre écouteur sur chaque événement tapdown, avec un décalage global de la tap dans le paramètre TapDownDetails de votre auditeur.

Voici un exemple de code montrant la même chose.

import 'package:flutter/material.dart'; 

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

class MyApp extends StatelessWidget { 
    @override 
    Widget build(BuildContext context) { 
    return new MaterialApp(
     title: 'Flutter Demo', 
     home: new MyHomePage(), 
    ); 
    } 
} 

class MyHomePage extends StatefulWidget { 
    @override 
    MyHomePageState createState() => new MyHomePageState(); 
} 

class MyHomePageState extends State<MyHomePage> { 
    @override 
    Widget build(BuildContext context) { 
    return new Scaffold(
     appBar: new AppBar(
      title: new Text('Popup Demo'), 
     ), 
     body: new MyWidget()); 
    } 
} 

class MyWidget extends StatefulWidget { 
    @override 
    State<StatefulWidget> createState() { 
    return new MyWidgetState(); 
    } 
} 

class MyWidgetState extends State<MyWidget> { 
    double posx = 100.0; 
    double posy = 100.0; 

    void onTapDown(BuildContext context, TapDownDetails details) { 
    print('${details.globalPosition}'); 
    final RenderBox box = context.findRenderObject(); 
    final Offset localOffset = box.globalToLocal(details.globalPosition); 
    setState(() { 
     posx = localOffset.dx; 
     posy = localOffset.dy; 
    }); 
    } 

    @override 
    Widget build(BuildContext context) { 
    return new GestureDetector(
     onTapDown: (TapDownDetails details) => onTapDown(context, details), 
     child: new Stack(fit: StackFit.expand, children: <Widget>[ 
     // Hack to expand stack to fill all the space. There must be a better 
     // way to do it. 
     new Container(color: Colors.white), 
     new Positioned(
      child: new Text('hello'), 
      left: posx, 
      top: posy, 
     ) 
     ]), 
    ); 
    } 
}