有条件地使用 futurebuilder : Flutter
conditionally use futurebuilder : Flutter
我有一个页面,我正在使用 recipeId
从服务器获取数据。在该页面中,我使用 complete_model
(包含模型的所有数据)。
但是,在导航到该页面时,我已经可以访问 slim_model
(仅包含 ID、标题、图像)。
如何利用 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
中有了 id、标题和图像数据,我想展示一下 full_view.dart
中加载的其余数据
问题是,我必须使用 deep_linking 或者有时我没有 slimData
=> 我只有 id
.
所以,当我有 slimData
时,我想用它来显示标题和图像,而其余数据使用 id
加载。
如果我没有 slimData
,我只想使用 id
.
加载所有内容
So, when I have slimData, I want to use that to show title and image while rest of data loads using id.
所以...就去做吧?在您当前有 CircularProgressIndicator
的地方,插入一个条件,如果您 有 SlimData,则显示它而不是进度指示器。
我有一个页面,我正在使用 recipeId
从服务器获取数据。在该页面中,我使用 complete_model
(包含模型的所有数据)。
但是,在导航到该页面时,我已经可以访问 slim_model
(仅包含 ID、标题、图像)。
如何利用 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
中有了 id、标题和图像数据,我想展示一下 full_view.dart
问题是,我必须使用 deep_linking 或者有时我没有 slimData
=> 我只有 id
.
所以,当我有 slimData
时,我想用它来显示标题和图像,而其余数据使用 id
加载。
如果我没有 slimData
,我只想使用 id
.
So, when I have slimData, I want to use that to show title and image while rest of data loads using id.
所以...就去做吧?在您当前有 CircularProgressIndicator
的地方,插入一个条件,如果您 有 SlimData,则显示它而不是进度指示器。