如何在未在树中构建小部件的 dart 文件中访问我继承的小部件?



我按照这个例子将我的第一个InheritedWidget添加到我的应用程序中。我已经创建了我的_state_container.dart文件,现在想使用它。

首先,我想在小部件中使用它,在那里我可以在群聊中显示聊天内容。此小部件位于文件receivedChats.dart(聊天标头(中。我在这个例子中看到,我所需要做的就是在目标的小部件构建函数中实例化container,但问题是这个小部件正在调用另一个名为message_dao.dart的文件来处理来自Firebase的所有数据。这个文件没有小部件构建功能,那么我该如何使用这里的容器呢?

文件结构:

main.dart
|
wrapper.dart
|
home.dart //or authenticate.dart if user is not logged in
|
chatScreen.dart
|               |
msgInput.dart   receivedChats.dart - message_dao.dart

这是我已经尝试过的,但它给出了2个错误:

class MessageDao {
final container = StateContainer.of(context); //ERROR: Undefined name 'context'. 
final chatState = container.chatState; //ERROR: The instance member 'container' can't be accessed in an initializer. 
//...rest of code...//

它是一个类,Dart类是对象的蓝图,也可以称为对象构造函数。它只是还没有初始化。就像StateContainer一样;

class MessageDao {
//here :
final StateContainerState container;

MessageDao(this.container);
chatstate(){
return container.chatState;
}
}

当有一个实际的构建上下文可以传递给时,您需要在代码中的某个地方初始化它

final messageDaoState = MessageDao(StateContainer.of(context));
final chatstate = messageDaoState.chatstate();

最新更新