我有requestManager,baseDialog,success和error response,但我不知道当请求到API响应错误时处理和显示错误的流程。
下面是我的代码,但它不是正确的方式,我猜。
@override
Widget build(BuildContext context) {
HomeViewModel viewModel = context.watch<HomeViewModel>();
viewModel.addListener(() {
if (viewModel.error != null) {
showDialog(
context: context,
builder: (BuildContext context) {
return DialogHelper(title: "Custom Dialog Demo");
});
}
});
return Container(
child: _ui(viewModel, context),
);
}
_ui(HomeViewModel viewModel, BuildContext context) {
if (viewModel.loading) {
return Center(
child: Text("Loading"),
);
} else if (viewModel.error != null) {
return Center(
child: Flexible(
child: Text(
viewModel.error.toString(),
style: Theme.of(context).textTheme.titleLarge?.copyWith(color: kErrorColor),
),
),
);
} else {
return SafeArea(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Flexible(
child: ListView.builder(
itemCount: viewModel.items.length,
itemBuilder: (context, index) {
return Card(
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(viewModel.items[index].id.toString()),
Flexible(
child: Text(viewModel.items[index].title),
),
],
),
const SizedBox(
height: 20.0,
),
],
),
);
},
),
)
],
),
);
}
}
在viewModel初始化期间,它将调用服务器
我只是想办法或想法来处理和显示对话框。
1条答案
按热度按时间sqougxex1#
你应该处理你的API响应,像这样:
然后调用
makeApiRequest
函数,并在HomeViewModel
中处理响应。如果响应成功,则设置数据和加载状态。如果有错误,则设置错误状态。我希望没有人会因为我自己文章的链接而评判我。你可以从this和this中读到更多。