Flutter:有状态小部件的数据必须存储在哪里?



我正在编写一个有状态小部件,它应该可视化用户定义的类。理想情况下,CardWidget应该持有对Card实例的引用,并显示其内容/将点击传递给它。

// card.dart
class Card {
bool isFlipped_ = false;
bool isMatched_ = false;
final String content;
// ...
}
// widgets/card_widget.dart
import 'package:flutter/material.dart';
import 'package:concentration/card.dart';
class CardWidget extends StatefulWidget {
const CardWidget({super.key});
@override
State<CardWidget> createState() => _CardWidgetState();
}
class _CardWidgetState extends State<CardWidget> {
@override
Widget build(BuildContext context) {
// ...
}
}

我的第一个问题是在哪里放置一个单独的卡片:在小部件或其状态?我看到的每个例子都是不同的,尽管官方的Flutter文档说状态的存在是因为,与小部件相比,它们的生命周期是未定义的。因此,如果在状态被破坏时对它的引用丢失了,那么如何将任何数据存储在状态中呢?

第二个问题是如何避免数据重复,使卡片不会在代码周围重复?或者这与我无关,因为只有对实际数据的引用被传递?

对于生产代码,我所遵循的一般指南是,StatefulWidget中保存的唯一数据/状态是执行动画或某些视觉效果所需要的。

否则,数据/状态应该保存在BLoC、ViewModel、Presenter等中。然后,您可以从那里访问信息。