Flutter Проверка Null safety
Помогите пожалуйста решить задачку. Ломаю голову как в данном случае поставить проверку на ноль, чтобы не перечила вложенным функциям. Проблема вылазит в строке
List < Post > posts = snapshot.data
!и? не подходят.
Widget build(BuildContext context) {
return FutureBuilder(
future: ipa.getAllPosts(),
builder: (BuildContext context, AsyncSnapshot<List<Post>> snapshot) {
List<Post>posts = snapshot.data;
if (snapshot.hasError) {
return Center(
child: Column(
children: [
CircularProgressIndicator(),
Text("Нет записей"),
],
)
);
}
if (snapshot.hasData) {
return ListView(children: [
SizedBox(height: 20),
...posts
.map(
(p) =>
Column(
children: [
SizedBox(height: 20),
makeText('${p.caption}')
],
),
)
.toList()
]);
}
},
);
}
Ответы (1 шт):
Автор решения: ddo5
→ Ссылка
- В строке
List<Post> posts = snapshot.data;объявляете неверный тип.snapshot.dataвозвращаетList<Post>?. - Если
snapshot.hasData == true, тоposts != null. А значит после проверки можно использовать оператор!:...posts!.map. Но, мне кажется, понятнее, если вместоif (shapshot.hasData), сразу написатьif (posts != null).
Полный код может выглядеть так:
Widget build2(BuildContext context) {
return FutureBuilder(
future: ipa.getAllPosts(),
builder: (BuildContext context, AsyncSnapshot<List<Post>> snapshot) {
final posts = snapshot.data;
if (snapshot.hasError) {
return Center(
child: Column(
children: [CircularProgressIndicator(), Text("Нет записей")],
),
);
}
if (posts != null) {
return ListView(children: [
SizedBox(height: 20),
...posts
.map(
(p) => Column(
children: [SizedBox(height: 20), makeText('${p.caption}')],
),
)
.toList()
]);
}
return const Center(child: CircularProgressIndicator());
},
);
}