#flutter
#flutter
Вопрос:
У меня есть вариант использования во Flutter, где мне нужно отобразить список из API. Как только на странице выбран определенный фильтр, отображаемый список должен быть обновлен путем запуска нового API. Ниже приведен мой исходный код, в котором я показываю список из API.
class _MyFieldReportForm extends State<MyFieldReport> {
var myContext;
@override
Widget build(BuildContext context) {
myContext = context;
// TODO: implement build
return Scaffold(
body: new FutureBuilder<List<ReportData>>(
future: fetchProducts(new http.Client()),
builder: (context, snapshot) {
if (snapshot.hasError) print(snapshot.error);
return snapshot.hasData
? createListView(snapshot, myContext)
: new Center(child: new CircularProgressIndicator());
},
),
floatingActionButton: new FloatingActionButton(
child: new Icon(Icons.add),
backgroundColor: Colors.green,
onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => FieldvisitForm()));
},
),
);
}
}
После нажатия любой кнопки фильтра мне нужно обновить этот API новым. Было бы здорово, если бы кто-нибудь мог помочь мне с примером кода.
Ответ №1:
Наконец-то узнал решение. Это можно сделать, получив список в
void initState() {
super.initState();
listFuture = fetchProducts(new http.Client());
}
и в setState я обновляю список. Ниже приведен полный код:
Future<List<ReportData>> listFuture;
body: new FutureBuilder<List<ReportData>>(
future: listFuture,
builder: (context, snapshot) {
if (snapshot.hasError) print(snapshot.error);
return snapshot.hasData
? createListView(snapshot, myContext)
: new Center(child: new CircularProgressIndicator());
},
),
onPressed: () {
setState(() {
refreshList();
});
void refreshList() {
listFuture = fetchProductsUpdate(new http.Client());
}
Ответ №2:
оформите мое репозиторий, я создал класс App, расширяющий statefull, и виджет без состояния, возможно, это поможет вам