#flutter #dart #future
Вопрос:
У меня есть страница, на которой я получаю данные с сервера с помощью recipeId
. На этой странице я использую complete_model
(которая содержит все данные модели).
Но при переходе на страницу у меня уже есть доступ к slim_model
(содержит только идентификатор, заголовок, изображение).
Как использовать slim_model
, чтобы показать title
, image
а затем заполнить все остальное?
full_view.dart
:
class FullView extends StatefulWidget {
final String id;
const FullView({Key? key, required this.id}) : super(key: key);
@override
_FullViewState createState() => _FullViewState();
}
class _FullViewState extends State<FullView> {
late Future<FullDataModel> future;
@override
void initState() {
future = Repository().getModel(widget.id);
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: FutureBuilder<FullDataModel>(
future: future,
builder: (context, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return const Center(
child: CircularProgressIndicator(
valueColor:
AlwaysStoppedAnimation<Color>(ColorConstants.accent1),
),
);
default:
if (snapshot.hasError || snapshot.data == null) {
return const Center(
child: Text(
'Something went wrong, we are working on fixing it!',
),
);
} else {
final data = snapshot.data!;
return _body(data, context);
}
}
},
),
);
}
}
Переход к full_view.dart
,
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return FullView(
id: slimData.id,
);
},
fullscreenDialog: true));
Здесь у меня уже есть данные идентификатора, заголовка и изображения slimData
, я хочу показать это , пока остальные данные загружаются в full_view.dart
Проблема в том, что я должен использовать deep_linking, или иногда у меня нет slimData
=> У меня есть только > id
.
Поэтому, когда у меня есть slimData
, я хочу использовать это для отображения заголовка и изображения, пока остальные данные загружаются с помощью id
.
Если у меня его нет slimData
, я просто хочу загрузить все с помощью id
.
Ответ №1:
Поэтому, когда у меня есть slimData, я хочу использовать его для отображения заголовка и изображения, в то время как остальные данные загружаются с помощью идентификатора.
Так… просто сделай это? Там , где у вас в данный момент есть a CircularProgressIndicator
, вставьте условное и, если у вас есть SlimData, покажите это вместо индикатора прогресса.
Комментарии:
1. Это лучший подход? Я думал, что должен поддерживать некоторое состояние, которое изначально заполнено наполовину, но после того, как будущее возвращается, оно заполняется полностью!
2. Конечно, почему бы и нет. Разве это не одно и то же? У вас есть «тонкая» и «полная» переменная. если ни один не заполнен, покажите индикатор выполнения, если заполнен только тонкий, покажите тонкий, если заполнен полный, покажите полный.