处理 api 错误并使用 flutter 提供程序包显示对话框的最佳方法

问题描述 投票:0回答:0

我有 requestManager、baseDialog、成功和错误响应,但我不知道在请求 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 初始化期间,它将调用服务器

我只想要处理和显示对话的方法或想法。

flutter mvvm provider
© www.soinside.com 2019 - 2024. All rights reserved.