无法从静态方法调用Flutter有状态小组件的setState

时间:2020-06-29 08:58:49

标签: flutter

我在显示列表视图的地方有以下代码,该列表视图从列表中获取数据,可以从onConnect()的{​​{1}}方法中动态更新列表。 因此,此onConnect方法应该是静态的。

现在,当我从WebSocket接收数据时,将调用此onConnect方法,该方法会将值插入列表中。但是listview没有得到更新。 我无法调用STOMP,因为该setState()方法是静态的,因此该小部件将使用新数据重新呈现。

任何解决方案。

onConnect()

1 个答案:

答案 0 :(得分:0)

要使用或访问setState方法,您需要位于实例方法内部,而不是静态(类)方法。因此,在这种情况下,responseonConnectCallback方法不应是静态的。因为StompClient引用了这些方法,所以我在实例化窗口小部件时(即在构造函数中)创建一个StompClient client实例:

class _ChatState extends State<Chat> {
  TextEditingController messageEditingController = new TextEditingController();
  
  StompClient client;
 
  // Create a StompClient instance when creating new state
  _ChatState() {
    client = StompClient(
      config: StompConfig(
        url: 'ws://localhost:8080/ws',
        onConnect: onConnectCallback,
        onWebSocketError: (dynamic error) => print(error.toString())),
    );
    client.activate();
  }
 
  onConnectCallback(StompClient client, StompFrame connectFrame) {
    ...
  }

  response(StompFrame frame) {
    ...
    // HERE YOU SHOULD BE ABLE TO USE setState() METHOD
  }
...