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 颤振结构。将modal和provider放在同一个文件中好吗_Flutter_Dart - Fatal编程技术网

Flutter 颤振结构。将modal和provider放在同一个文件中好吗

Flutter 颤振结构。将modal和provider放在同一个文件中好吗,flutter,dart,Flutter,Dart,我的问题是,为什么大多数人使用一个单独的文件来放置模型,是有充分的理由这样做,还是仅仅将代码分成文件 对于我来说,我通常对模型和提供者使用相同的文件 最佳做法是什么? 我的代码示例: class Product with ChangeNotifier { final String id; final String title; final String description; final double price; final String imageUrl; bool

我的问题是,为什么大多数人使用一个单独的文件来放置模型,是有充分的理由这样做,还是仅仅将代码分成文件

对于我来说,我通常对模型和提供者使用相同的文件

最佳做法是什么?

我的代码示例:

class Product with ChangeNotifier {
  final String id;
  final String title;
  final String description;
  final double price;
  final String imageUrl;
  bool isFavorite;

  Product({
    @required this.id,
    @required this.title,
    @required this.description,
    @required this.price,
    @required this.imageUrl,
    this.isFavorite = false,
  });

  void _setFavValue(bool newValue) {
    isFavorite = newValue;
    notifyListeners();
  }

  Future<void> toggleFavoriteStatus(String token, String userId) async {
    final oldStatus = isFavorite;
    isFavorite = !isFavorite;
    notifyListeners();
    final  url =
          "https://shopapp-aa34f-default-rtdb.asia-southeast1.firebasedatabase.app/userFavorites/$userId/$id.json?auth=$token";

    try {
      final res = await http.put(url, body: json.encode(isFavorite));
      if (res.statusCode >= 400) {
        // error occured
        _setFavValue(oldStatus);
      }
    } catch (e) {
      _setFavValue(oldStatus);
    }
  }
}
使用ChangeNotifier对产品进行分类{
最终字符串id;
最后的字符串标题;
最终字符串描述;
最终双倍价格;
最终字符串imageUrl;
布尔是我的最爱;
产品({
@需要这个.id,
@需要这个标题,
@需要此说明,
@需要这个价格,
@需要此.imageUrl,
this.isFavorite=false,
});
void _setFavValue(bool newValue){
isFavorite=newValue;
notifyListeners();
}
Future toggleFavoriteStatus(字符串令牌、字符串用户标识)异步{
最终oldStatus=isFavorite;
isFavorite=!isFavorite;
notifyListeners();
最终url=
"https://shopapp-aa34f-default-rtdb.asia-southeast1.firebasedatabase.app/userFavorites/$userId/$id.json?auth=$token”;
试一试{
final res=wait http.put(url,body:json.encode(isFavorite));
如果(res.statusCode>=400){
//发生错误
_设置FAV值(旧状态);
}
}捕获(e){
_设置FAV值(旧状态);
}
}
}

模型和提供程序应保存在不同文件中的原因是:

  • 关注点分离:由于模型的目的是在我们的体系结构中表示实体,而提供者充当持有业务逻辑的视图模型,因此它们有不同的目的,应该保持不同

  • 独立导入。如果其他一些文件需要使用模型,这是非常常见的,例如用于序列化的存储库类或其他提供程序类,则导入该模型也会导入提供程序的代码,反之亦然

  • 轻松协作。如果有多个团队成员在一个项目上工作,那么定位某个模型的逻辑可能会很混乱。同样在github上,当对模型进行更改时,看到提供程序文件更新可能会让人困惑

  • 缩放和维护。在我看来,到目前为止,您的案例非常简单,您遵循的一般做法没有给您带来任何麻烦。然而,在某些用例中,提供者必须与其他提供者、模型、共享偏好和其他网络服务混合使用。调试和维护这种紧密关联的依赖关系将是一场噩梦


  • 模型和提供程序应保存在不同文件中的原因是:

  • 关注点分离:由于模型的目的是在我们的体系结构中表示实体,而提供者充当持有业务逻辑的视图模型,因此它们有不同的目的,应该保持不同

  • 独立导入。如果其他一些文件需要使用模型,这是非常常见的,例如用于序列化的存储库类或其他提供程序类,则导入该模型也会导入提供程序的代码,反之亦然

  • 轻松协作。如果有多个团队成员在一个项目上工作,那么定位某个模型的逻辑可能会很混乱。同样在github上,当对模型进行更改时,看到提供程序文件更新可能会让人困惑

  • 缩放和维护。在我看来,到目前为止,您的案例非常简单,您遵循的一般做法没有给您带来任何麻烦。然而,在某些用例中,提供者必须与其他提供者、模型、共享偏好和其他网络服务混合使用。调试和维护这种紧密关联的依赖关系将是一场噩梦


  • 这样做通常不是一个好的结构。提供程序通常用作依赖项注入,而不是用于更新ui。最好学习bloc并将所有这些文件分为三个文件。ui、bloc和Model我将使用bloc,但现在我已经找到了原因。thanksIt通常不是一个好的结构。提供程序通常用作依赖项注入,而不是用于更新ui。最好学习bloc并将所有这些文件分为三个文件。ui、bloc和Model我将使用bloc,但现在我已经找到了原因。谢天谢地,我还想补充一点,在使用provider时,生产中的调试问题也会更加困难,因为很难跟踪错误的来源。事件跟踪是
    flatter_bloc
    的一个优点。说得很好,我还想补充一点,使用provider时,生产中的调试问题也会更难,因为它更难跟踪错误的来源。事件跟踪是颤振块的一个优点。