【问题标题】:How to send the messges in order when using whatsapp package in flutter在flutter中使用whatsapp包时如何按顺序发送消息
【发布时间】:2020-10-25 21:28:47
【问题描述】:

我有一个需要发送给不同人的消息列表。在预览页面中,列表是有序的。但是当我按发送时,它会一一进入WhatsApp聊天以随机发送消息。如何按预览消息中显示的顺序制作?有人可以帮我弄这个吗? 我在这里调用预览页面:

 if (messages.isNotEmpty) {
          Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (BuildContext context) => PreviewPage(messages)));
        }

这是预览页面

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

class PreviewPage extends StatelessWidget {
  final List<Map> msgList;
  final String baseURL = "https://api.whatsapp.com/send?phone=";
  PreviewPage(this.msgList);

  @override

    widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Preview Message"),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          //msgList = SortedMap(Ordering.byValue());
          // print(msgList["phone"]);
          for (var msg in msgList) {
            print('printing message');
            print(msg["phone"]);
            if (msg["phone"] != null) {
              var url = "${baseURL}91${msg['phone']}&text=${msg['messages']}";
              print(url);
              AndroidIntent intent = AndroidIntent(
                  action: 'action_view',
                  data: Uri.encodeFull(url),
                  // flags: <int>[Flag.FLAG_ACTIVITY_CLEAR_TOP],
                  package: "com.whatsapp.w4b");
              await intent.launch();
            }
          }
        },
        child: Icon(Icons.send),
      ),

【问题讨论】:

  • 提及使用的预览页面和包的链接。
  • 你能帮我按相同的顺序发送消息吗?消息已保存
  • 您需要什么订单?是按字母顺序的吗? List sorting
  • 在此我创建了一组联系人,当我按下发送时,它会一个一个地进入whatsapp聊天,但它不是我保存联系人的顺序。
  • 我尝试了列表排序,但它不适用于我的情况。 mesgList 中的 msg 以我想要的方式排序。但是当它调用 WhatsApp 时,它会变得随机。

标签: flutter dart whatsapi


【解决方案1】:

尝试将OnPressed 更改为async 并参考android-intent package 使用await intent.launch();

onPressed: () async {
            //msgList = SortedMap(Ordering.byValue());
            // print(msgList["phone"]);
            for (var msg in msgList) {
              print('printing message');
              print(msg["phone"]);
              if (msg["phone"] != null) {
                var url = "${baseURL}91${msg['phone']}&text=${msg['messages']}";
                print(url);
                AndroidIntent intent = AndroidIntent(
                    action: 'action_view',
                    data: Uri.encodeFull(url),
                    // flags: <int>[Flag.FLAG_ACTIVITY_CLEAR_TOP],
                    package: "com.whatsapp.w4b");
                await intent.launch();
              }
            }
          },

下面给出的代码用于排序。创建了一个类来组织消息详细信息,例如联系号码、联系人姓名、消息内容。这有助于以后根据联系人姓名应用sort 函数。如果需要,在其他属性的基础上修改sort

参考List.sort

class MessageHolder {
  int contactNumber;
  String messageContent;
  String contactName;
  MessageHolder({this.contactName, this.contactNumber, this.messageContent});
  
  @override
  String toString(){
    return '$contactName, $contactNumber, $messageContent';
  }
}

void main() {
  List<MessageHolder> messages = [
    MessageHolder(
        contactName: 'DEF', contactNumber: 2345678901, messageContent: 'Two'),
    MessageHolder(
        contactName: 'ABC', contactNumber: 1234567890, messageContent: 'One'),
    
    MessageHolder(
        contactName: 'GHI', contactNumber: 3456789012, messageContent: 'Three'),
    MessageHolder(
        contactName: 'XYZ', contactNumber: 3456789012, messageContent: 'Four'),
  ];
  
  List<MessageHolder> sortedMessages = messages..sort((a, b) => a.contactName.compareTo(b.contactName));
  
  for(MessageHolder message in sortedMessages){
    print(message);
  }
}

输出:

ABC, 1234567890, One
DEF, 2345678901, Two
GHI, 3456789012, Three
XYZ, 3456789012, Four

【讨论】:

  • 我尝试了异步,但仍然无法正常工作,是的,预览会按顺序显示消息。
  • 更新为包含排序
  • 问题不在于列表排序,问题在于将列表发送到whatsapp api时。
  • 好的,但我们一次从列表中发送一个元素,并awaiting 以完成它。如果 API 在内部列表中保持顺序,那么我们可能无法重新排序。目前找不到任何其他方式。您可以添加指向 API 文档或参考的链接吗?
猜你喜欢
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 2019-10-21
  • 2023-03-26
  • 2021-02-05
  • 2017-02-04
  • 2011-10-18
  • 2018-12-24
相关资源
最近更新 更多