Чтобы ответить на ваш вопрос, я несколько упростил / изменил код, поэтому веб-вызов не требуется.
Обратите внимание на объявление переменной bool "show_results".Это ключ к тому, что вы хотите сделать.Убедитесь, что вы отметили все варианты использования переменной.
Внутри двух конструкций setState () он сначала отключает видимость / существование вашего желаемого списка, а затем после того, как ваш поиск был выполнен, он включает видимость / существование вашего желаемого списка.
Этот код был протестирован и работает, как показано.
Надеюсь, это поможет.
import 'dart:async';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:flutter/material.dart';
class zFutureBuilderTestPage extends StatefulWidget {
@override
zBuilderTestPageState createState() => zBuilderTestPageState();
}
class zBuilderTestPageState extends State {
static String _searchTerm = "";
bool show_results=false;
String _url = "https://www.awebsite.com/search.php";
@override
Widget build(BuildContext context) {
var _futureBuilder = new FutureBuilder(
future: _getData(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('Press button to start.');
case ConnectionState.active:
case ConnectionState.waiting:
return Text('Awaiting result...');
case ConnectionState.done:
if (snapshot.hasError) return Text('Error: ${snapshot.error}');
// return Text('Result: ${snapshot.data}');
return createMyListView(context, snapshot);
}
return null; // unreachable
});
return new Scaffold(
appBar: new AppBar(
title: Text("Appbar"),
),
body: Column(
children: <Widget>[
Text("Search for food..."),
TextField(
decoration: InputDecoration(hintText: 'Search here'),
onSubmitted: (String valueIn) => search(valueIn),
),
Text("Results for... " + _searchTerm),
Divider(height: 4.0),
show_results == false ? new Container ( width: 0, height: 0 ) : Expanded(child: _futureBuilder),
],
));
}
Future <List<dynamic>> search ( String valueIn ) async {
print (valueIn);
setState(() {
show_results=false;
});
List<dynamic> l = await _getData();
setState(() {
show_results=true;
});
return ( l );
}
Future<List<dynamic>> _getData() async {
List<FoodObjectFromJson> values=new List();
FoodObjectFromJson H =new FoodObjectFromJson(5,"Orange");
values.add( H );
FoodObjectFromJson H2 =new FoodObjectFromJson(8,"Apple");
values.add( H2 );
FoodObjectFromJson H3 =new FoodObjectFromJson(22,"Pear");
values.add( H3 );
return values;
}
Widget createMyListView(BuildContext context, AsyncSnapshot snapshot) {
List<dynamic> values = snapshot.data;
return new ListView.builder(
itemCount: values.length,
itemBuilder: (BuildContext context, int index) {
return new Column(
children: <Widget>[
new ListTile(
title: new Text(values[index].fruit_handle),
)
],
);
},
);
}
}
class FoodObjectFromJson {
final int fruit_id;
final String fruit_handle;
FoodObjectFromJson(
this.fruit_id, this.fruit_handle);
}