【问题标题】:WebSocketChannel becomes null when passed to a StatefulWidget's State classWebSocketChannel 在传递给 StatefulWidget 的 State 类时变为 null
【发布时间】:2021-09-26 10:24:24
【问题描述】:

我有一个简单的客户端代码,我在其中尝试将 WebSocketChannel 实例传递给内部有状态小部件,并且由于某种原因,当我尝试运行代码时,应用程序崩溃并在屏幕上显示“意外的空值。另请参阅:https://flutter.dev/docs/testing/errors"。如果有人能向我解释为什么会发生这种情况以及如何解决它,我们将不胜感激。

代码:

import 'package:flutter/material.dart';
import 'package:web_socket_channel/web_socket_channel.dart';

class TestWidget extends StatefulWidget {
  final WebSocketChannel channel;

  const TestWidget(this.channel);

  @override
  _TestWidgetState createState() => _TestWidgetState();
}

class _TestWidgetState extends State<TestWidget> {
  String buttonText = '';

  _TestWidgetState() {
    widget.channel.stream.listen((data){
      setState(() {buttonText = data;}); 
    });
  }

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: (){widget.channel.sink.add('hello');},
      child: Text(buttonText)
    );
  }
}



class App extends StatelessWidget {
  final WebSocketChannel channel = WebSocketChannel.connect(
    Uri.parse('ws://localhost:8000/')
  );

  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: Scaffold(body: 
      TestWidget(channel)
    ));
  }
}

void main() {
  runApp(App());
}

提前感谢您的帮助。

【问题讨论】:

  • 请发布您在运行此应用程序时看到的错误。更容易看出哪个对象实际上是null

标签: flutter dart websocket flutter-web


【解决方案1】:

你放的任何特殊原因

final WebSocketChannel channel = WebSocketChannel.connect(
    Uri.parse('ws://localhost:8000/')
  );

在应用程序中?将此行代码移动到 TestStateWidget 构造函数。尝试访问对象时,最好遵循 null 安全方法。

【讨论】:

    猜你喜欢
    • 2018-10-29
    • 1970-01-01
    • 2021-02-26
    • 2021-02-19
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多