#flutter
#flutter
Вопрос:
Я загружаю данные из удаленного api:
Это файл dart, который обеспечивает подключение и загрузку:
clinica-api.dart
import 'package:flutter_capenergy/modelos/clinica.dart';
import 'package:http/http.dart' as http;
Future<List<Clinica>> fetchClinicas(String idUsuario) async {
String url ="https://..flutter_api/get_clinicas.php";
final response = await http.get(url);
if (response.body == "[]"){
}
return clinicaFromJson(response.body);
}
И это фрагмент кода из misclinicas.dart, где я показываю список:
Expanded(
child: Container(
child: FutureBuilder(
future: fetchClinicas(miId),
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.length,
shrinkWrap: true,
itemBuilder: (BuildContext context, index) {
print(index.toString());
Clinica clinica = snapshot.data[index];
return new GestureDetector(
onTap: () {
clinicaProvider.setClinica(clinica.nombreClinica);
clinicaProvider.setClinicaId(clinica.idClinica);
} ,
child: new Card(
elevation: 6,
child: new Column(
children: [
new Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment
.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment
.center,
mainAxisAlignment: MainAxisAlignment
.center,
children: <Widget>[
Image.network(
'https://.../${clinica
.logoClinica}',
height: 180,
alignment: Alignment.center,),
],
),
Text(
'${clinica.nombreClinica}',
style: TextStyle(fontSize: 16,
fontWeight: FontWeight.bold,
color: Colors.blue),
),
Text(
'${clinica.direccionClinica}',
style: TextStyle(fontSize: 14,
color: Colors.grey,
fontStyle: FontStyle.italic),
),
],
),
),
],
),
),
);
},
);
}
else {
Text ("NO HAY CLINICAS");
}
return Text("Cargando clínicas");
},
),
),
),
Если в списке есть элементы, они отображаются, но если список пуст, я хотел бы показать текст с сообщением о том, что список пуст.
Я пытаюсь сделать это, поместив этот текстовый виджет, если snapshot.hasdata
значение false:
Text ("NO HAY CLINICAS");
но он не отображается, я получаю только пустой ListView.
Ответ №1:
В случае с пустым списком snapshot.hasData
будет true и snapshot.data.length
будет равно 0.
snapshot.hasData == false
означает, что он либо загружается, либо произошла ошибка.
Комментарии:
1. Спасибо за ответ, но тогда как мне проверить, пуст ли список, и показать текст для пустого списка? Я пытался написать snapshot.data.length, и это недопустимо.
2. В текущем коде текст для пустого списка отображается только во время загрузки, но после завершения загрузки текст удаляется. Наверное, я поместил текст не в то место
3. Если
snapshot.data.length == 0
вы вернете текст вместо ListView.4. сначала убедитесь, что snapshot.hasData имеет значение true. итак, вы могли бы сделать
snapshot.hasData == true amp;amp; snapshot.data.length == 0
Ответ №2:
в вызове api возвращает пустой список, если ответ.body =»[]»
if (response.body == "[]"){
List<Clinica> emptyClinica = [];
return emptyClinica;
}
в misclinicas.dart
snapshot.data.lenth > 0 ? your list work : Text('No Data Found')