Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在每个视图的颤振模型中正确组织API调用?_Flutter_Dart_Architecture_Directory Structure - Fatal编程技术网

Flutter 如何在每个视图的颤振模型中正确组织API调用?

Flutter 如何在每个视图的颤振模型中正确组织API调用?,flutter,dart,architecture,directory-structure,Flutter,Dart,Architecture,Directory Structure,大约一个月前,我开始学习Flutter,我阅读并观看了一些很好的教程,其中最好的是一个具有提供者和视图模型的响应架构,以防止在创建应用程序时代码重复 现在我正在为我的工作编写我的第一个应用程序,我有一些API调用要做。我还没有找到一篇好的文章或视频,教我如何将API请求正确地组织到单独的文件中,以防止重复,所以我来这里寻求您的指导 我是这样做的。我考虑创建一个api.dart服务来实现http包的方法。到目前为止,它只是get(),但我已经看到其他人最终会过度重复这个条件 类Api{ 未来获取(

大约一个月前,我开始学习Flutter,我阅读并观看了一些很好的教程,其中最好的是一个具有提供者和视图模型的响应架构,以防止在创建应用程序时代码重复

现在我正在为我的工作编写我的第一个应用程序,我有一些API调用要做。我还没有找到一篇好的文章或视频,教我如何将API请求正确地组织到单独的文件中,以防止重复,所以我来这里寻求您的指导

我是这样做的。我考虑创建一个
api.dart
服务来实现
http
包的方法。到目前为止,它只是
get()
,但我已经看到其他人最终会过度重复这个条件

类Api{
未来获取(字符串url)异步{
最终响应=等待http.get(“$kBaseUrl/$url”);
如果(response.statusCode!=200){
抛出异常(json.decode(response.body)[0]['mensage']);
}
返回json.decode(response.body);
}
}
然后,在目前为止我仅有的视图模型中,我实现了
api.dart
中的
get()
,例如,单击一个按钮。按钮中的
模型
就是我上面提到的方法

Future submit()异步{
打印('Email:$Email,password:$password');
get();
}
Future get()异步{
_setBusy(true);//上的加载状态
_setError(“”);//清除错误
试一试{
等待api.get(“客户”);
}捕获(e){
_设置错误(例如消息);
}
_setBusy(false);//正在加载关闭状态
}
PrimaryButton(
onTap:(){
model.submit();
},
禁用:model.busy,//加载状态以修改按钮的样式
),

就是这样。我觉得它可能会更好,我更希望从一开始就有最好的方法,这样我就可以了解更多关于构建文件的内容,并随着应用程序的发展保持文件的整洁。我将非常感谢任何指导、代码、文章、视频和/或存储库。

好问题,@gamofe

就文件结构而言,《颤栗》仍然有点狂野。也就是说,在我的项目中,以及在我阅读的绝大多数教程中,文件夹结构如下所示:

lib/src
lib/src/repositories
lib/src/repositories/common
lib/src/repositories/user
lib/src/repositories/user/user_repository.dart
lib/src/repositories/item/item_repository.dart
lib/src/blocs
lib/src/blocs/user
lib/src/blocs/user/barrel.dart
lib/src/blocs/user/user_state.dart
lib/src/blocs/user/user_events.dart
lib/src/blocs/user/user_bloc.dart
lib/src/models/user.dart
lib/src/screens/login_screen.dart
lib/src/screens/item_feed.dart
lib/src/widgets
此外,我要说的是,直接从视图层进行API调用的情况非常罕见。我建议大家仔细阅读集团模式。这是管理颤振应用程序中状态的常用方法(谷歌推荐)

基本上,一个集团就是一条流。在您的视图中,您侦听流中的新状态事件。如果您想要更新数据,您可以向流“分派”一个新事件,该事件最终将转换为状态输出

在应用程序中实现Bloc模式将帮助您实现所需的分离和干代码

是一个帮助程序库,它将帮助您启动并运行Bloc模式。文档非常好,示例也很多。有些文档概述了如何很好地管理视图、状态和网络请求之间的关系


FWIW,它实现了所有这些概念。我在每一个新项目中都使用复制它来帮助我快速地完成工作。随便看看。我已经尽了最大努力遵循最佳实践,因此它有望成为一个不错的模型。

您好,谢谢。我现在会读到它,但与此同时,我也想放弃这个问题。你见过我提到的响应性架构吗?你认为我可以继续使用集团模式吗?啊,我道歉!不,我没有。让我看一下这个结构对我来说很好。我真的很想继续在不同的体系结构(如BLoC)中使用它。我是个新手,所有这些信息都让人困惑。我不喜欢BLoC的实现方式。我读了一篇登录教程,发现它太乱了,我不喜欢。如果你不介意我推荐一门课程的话,我认为斯蒂芬·格里德的udemy课程是个例外。我觉得他的解释很清楚,也不太费劲。