title: Why is FutureBuilder called multiple times?
body: <p>Excuse the ignorance i am new to Flutter.</p>
  
  <p>I am practicing on a course I did and I have the following scenario:</p>
  
  <p>I have a view where I consume a web service in the method <code>getDataArray</code> (<code>FutureBuilder</code>), and I just want it to be done only once when this view is accessed.</p>
  
  <p>I also have a <code>TextField</code>, <code>FutureBuilder</code> and the <code>TextField</code> is in the<code>build()</code>. My <code>widget</code> is a <code>StatefulWidget</code> because it needs to be redrawn to show the character counter of my <code>TextField</code>, so I think this is the reason that every time I type something the <code>build</code> runs and call the <code>FutureBuilder</code> again.</p>
  
  <p>How can I solve that?</p>
  
  <pre><code>    class Pagina3 extends StatefulWidget {
      @override
      Pagina3State createState() {
          return Pagina3State();
      }
      }
  
      class Pagina3State extends State&lt;Pagina3&gt; {
      String _input = "";
  
      //returns a web service
      Future getDataArray() async {
          final dynamic resp =
              await web.http_Web(webservices.url["DATOS"], "POST", {}, context);
          return resp;
      }
  
      Pagina3() {}
  
      @override
      Widget build(BuildContext context) {
          var validators = new Validators();
          var utils = new Utils();
          return Scaffold(
          appBar: AppBar(
              title: Text('Page 3'),
          ),
          body: SafeArea(
              child: Center(
              child: Form(
                  child: Padding(
                  padding: EdgeInsets.symmetric(horizontal: 10),
                  child: Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: &lt;Widget&gt;[
                      TextFormField(
                          decoration: InputDecoration(
                          counter: Text('Letras ${_input.length.toString()}'),
                          icon: Icon(Icons.alternate_email),
                          hintText: 'ejemplo@correo.com',
                          labelText: 'Correo electrónico',
                          ),
                          validator: (value) =&gt; validators
                              .fn_checkValidation([validators.required(value)]),
                          onChanged: (valor) {
                          setState(() {
                              _input = valor;
                          });
                          },
                      ),
                      Container(
                          child: FutureBuilder(
                              future: getDataArray(),
                              builder: (context, AsyncSnapshot&lt;dynamic&gt; snapshot) {
                              if (snapshot.hasData) {
                                  if (snapshot.data["ok"] == false) {
                                  return Text("ha ocurrido un problema");
                                  }
                                  return (Text("Exito"));
                              } else {
                                  return Center(child: CircularProgressIndicator());
                              }
                              }),
                      )
                      ],
                  ),
                  ),
              ),
              ),
          ),
          );
      }
      }
  </code></pre>