2017-12-21 11 views
0

TextFormFieldのタップイベントをフラッターフォームにキャッチしようとしています。TextFormFieldのキャッチタップイベント

私はそれをクリックしたときにTextFormFieldで子供が、何が発射されることを行うためにGestureDetectorを使用

@override 
    Widget build(BuildContext context) { 
    return new Scaffold(
     key: _scaffoldKey, 
     appBar: new AppBar(title: const Text('Recherche de sorties')), 
     body: new DropdownButtonHideUnderline(
     child: new Form(
      key: _formKey, 
      autovalidate: _autovalidate, 
      child: new ListView(
       padding: const EdgeInsets.symmetric(horizontal: 16.0), 
       children: <Widget>[ 
       new DatePicker(
        labelText: 'Date', 
        selectedDate: widget.request.dateDebut, 
        initialDate: widget.request.dateDebut, 
        firstDate: new DateTime.now().add(new Duration(days: -1)), 
        lastDate: new DateTime.now().add(new Duration(days: 365 * 4)), 
        selectDate: (DateTime value) { 
        setState(() { 
         widget.request.dateDebut = value; 
        }); 
        }, 
        datePickerMode: DatePickerMode.day, 
        icon: const Icon(Icons.date_range), 
       ), 
       new InputDecorator(
        decoration: const InputDecoration(
        labelText: 'Rayon', 
        hintText: '-- Choisissez un rayon --', 
        icon: const Icon(Icons.settings_backup_restore), 
       ), 
        isEmpty: widget.request.rayon == null, 
        child: new DropdownButton<String>(
        value: widget.request.rayon.toString(), 
        isDense: true, 
        onChanged: (String newValue) { 
         setState(() { 
         widget.request.rayon = int.parse(newValue); 
         }); 
        }, 
        items: _rayons.keys.map((int key) { 
         return new DropdownMenuItem<String>(
         value: key.toString(), 
         child: new Text(_rayons[key]), 
        ); 
        }).toList(), 
       ), 
       ), 

       new GestureDetector(
        onTap:() async { 
        print("Container clicked"); 

        Prediction p = await showGooglePlacesAutocomplete(
         context: context, 
         apiKey: Consts.googlePlacesApiKey, 
         mode: Mode.fullscreen, 
         language: "fr", 
         components: [new Component(Component.country, "fr")]); 

        if (p != null) { 
         (_scaffoldKey.currentState).showSnackBar(
          new SnackBar(content: new Text(p.description))); 
        } 
        }, 
        child: new TextFormField(
        // controller: controller, 
        decoration: const InputDecoration(
         icon: const Icon(Icons.room), 
         hintText: 'Où êtes vous ?', 
         labelText: 'Localisation', 
        ), 
       ), 
       ), 

       new Container(
        padding: const EdgeInsets.all(20.0), 
        alignment: Alignment.center, 
        child: new Align(
         alignment: const Alignment(0.0, -0.2), 
         child: new ButtonBar(
         mainAxisSize: MainAxisSize.min, 
         children: <Widget>[ 
          new RaisedButton(
          child: const Text('ANNULER'), 
          onPressed: _fermerCritereRecherche, 
         ), 
          new RaisedButton(
          child: const Text('VALIDER'), 
          onPressed: _valider, 
         ), 
         ], 
        ), 
        )), 
       ]), 
     ), 
    ), 
    ); 
    } 

私が交換する場合:

 new GestureDetector(
      onTap:() async { 
      print("Container clicked"); 

      Prediction p = await showGooglePlacesAutocomplete(
       context: context, 
       apiKey: Consts.googlePlacesApiKey, 
       mode: Mode.fullscreen, 
       language: "fr", 
       components: [new Component(Component.country, "fr")]); 

      if (p != null) { 
       (_scaffoldKey.currentState).showSnackBar(
        new SnackBar(content: new Text(p.description))); 
      } 
      }, 
      child: new TextFormField(
      // controller: controller, 
      decoration: const InputDecoration(
       icon: const Icon(Icons.room), 
       hintText: 'Où êtes vous ?', 
       labelText: 'Localisation', 
      ), 
     ), 
     ), 

それは、単純なコンテナによって作業:

new GestureDetector(
      onTap:() async { 
      print("Container clicked"); 

      Prediction p = await showGooglePlacesAutocomplete(
       context: context, 
       apiKey: Consts.googlePlacesApiKey, 
       mode: Mode.fullscreen, 
       language: "fr", 
       components: [new Component(Component.country, "fr")]); 

      if (p != null) { 
       (_scaffoldKey.currentState).showSnackBar(
        new SnackBar(content: new Text(p.description))); 
      } 
      }, 
      child: new Container(
      width: 80.0, 
      height: 80.0, 
      margin: new EdgeInsets.all(10.0), 
      color: Colors.black), 
     ), 

テキストでGestureDetectorを動作させる方法はありますかFormField?たぶんコントローラとしかし、私はどんな成功せず、私は(フラッターギャラリーから)InputDecoratorを使用して、解決策を発見した事前

答えて

2

で おかげで試してみました:

  child: new InputDecorator(
       decoration: const InputDecoration(
        labelText: 'Localisation', 
        icon: const Icon(Icons.room), 
       ), 
       child: widget.request.localisationLibelle != null 
        ? new Text(widget.request.localisationLibelle) 
        : new Text("-- Choisissez un lieu --"), 
      ), 

代わりのキャッチTextFormFieldを使用してGestureDetectorの場所でタップします。InputDecoratorウィジェットの単純な子テキストを使用します。

関連する問題