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
Dart 如何使websocket响应显示在与发送的消息相同的小部件中,如适当的聊天屏幕_Dart_Flutter - Fatal编程技术网

Dart 如何使websocket响应显示在与发送的消息相同的小部件中,如适当的聊天屏幕

Dart 如何使websocket响应显示在与发送的消息相同的小部件中,如适当的聊天屏幕,dart,flutter,Dart,Flutter,我是一个新手,到目前为止我已经爱上了它 我需要一种方法将来自web套接字服务器的响应放在左侧;就像一个合适的聊天屏幕 WebSocketChannel channel; final List<String> list = []; final List<ChatMessageListItem> _messages = <ChatMessageListItem>[]; TextEditingController _textController;

我是一个新手,到目前为止我已经爱上了它

我需要一种方法将来自web套接字服务器的响应放在左侧;就像一个合适的聊天屏幕

  WebSocketChannel channel;
  final List<String> list = [];
  final List<ChatMessageListItem> _messages = <ChatMessageListItem>[];
  TextEditingController _textController;
  bool _isComposing = false;

  @override
  void initState() {
    super.initState();
    channel = IOWebSocketChannel.connect('ws://echo.websocket.org');
    _textController = TextEditingController();
    channel.stream.listen((receivedMessage){
      setState(() {
        list.add(receivedMessage);
      });
    });
  }
//用于显示已发送消息的小部件

new Flexible(
     child: new ListView.builder(
              padding: new EdgeInsets.all(8.0),
              reverse: true,
              itemBuilder: (_, int index) => _messages[index],
              itemCount: _messages.length,
            ),
          )
目前,我只能使用下面的地图显示收到的消息

new Flexible(
            child: Column(
              children: list.map((receivedMessage) => Text(receivedMessage)).toList(),
            ),
          ),
请,我需要一种方法使它显示在ListView生成器中


与其为发送和接收的消息保留两个单独的列表,为什么不为这两个消息都保留一个ChatMessageListItem列表呢?您可以使用一个名为type:sent或received的属性来区分它们,因此您可以确定在ListView的左侧或右侧显示不同的颜色等。当收到一条receivedMessage时,将其添加到列表中。现在,ListView可以处理这两种类型的消息

  WebSocketChannel channel;
  //final List<String> list = []; //Remove this line
  final List<ChatMessageListItem> _messages = <ChatMessageListItem>[];
  TextEditingController _textController;
  bool _isComposing = false;

  @override
  void initState() {
    super.initState();
    channel = IOWebSocketChannel.connect('ws://echo.websocket.org');
    _textController = TextEditingController();
    channel.stream.listen((receivedMessage){
      setState(() {
        _messages.insert(0, new ChatMessageListItem(message: receivedMessage, type: MessageType.received));
        //list.add(receivedMessage);
      });
    });
  }
WebSocketChannel频道;
//最终名单=[]//删除此行
最终列表_消息=[];
TextEditingController\u textController;
bool _isComposing=false;
@凌驾
void initState(){
super.initState();
channel=IOWebSocketChannel.connect('ws://echo.websocket.org');
_textController=TextEditingController();
channel.stream.listen((接收消息){
设置状态(){
_插入(0,新的ChatMessageListItem(消息:receivedMessage,类型:MessageType.received));
//list.add(receivedMessage);
});
});
}

谢谢;正是我需要的。
  WebSocketChannel channel;
  //final List<String> list = []; //Remove this line
  final List<ChatMessageListItem> _messages = <ChatMessageListItem>[];
  TextEditingController _textController;
  bool _isComposing = false;

  @override
  void initState() {
    super.initState();
    channel = IOWebSocketChannel.connect('ws://echo.websocket.org');
    _textController = TextEditingController();
    channel.stream.listen((receivedMessage){
      setState(() {
        _messages.insert(0, new ChatMessageListItem(message: receivedMessage, type: MessageType.received));
        //list.add(receivedMessage);
      });
    });
  }