【发布时间】:2020-12-01 14:18:46
【问题描述】:
我使用flutter form builder 使用相机/图库获取图像,然后我想将它们附加到电子邮件中(我为此使用mailer)但是当我尝试发送电子邮件时,我收到以下错误:
type 'List< dynamic >' is not a subtype of type 'List< Attachment >'
这是我的代码:
我使用 FormBuilderImagePicker 小部件获取图像:
FormBuilderImagePicker(
attribute: 'image',
onChanged: (value) {
_attachments.add(value);
debugPrint('attachments: $_attachments');
},
maxImages: 3,
defaultImage:
AssetImage('assets/images/icons8-plus-64.png'),
validators: [
FormBuilderValidators.required(),
],
),
这是我发送电子邮件的代码:
void sendEmailWithoutPosition(
String name,
String destination,
String subject,
String description,
String email,
String number,
List<Attachment> attachments,
BuildContext context) async {
message = Message()
..from = Address(username, name)
..recipients.add(destination)
..subject = ' Petiție ${subject.toString()} - aplicația e-Rădăuți'
..html = 'Către, ${destination.toString()} <br><br> Stimată doamnă/ Stimate domn,'
'<br><br>Subsemnatul ${name.toString()}, vă supun atenției următoarea problemă:<br><br>'
'$description<br><br>În conformitate cu atribuțiile pe care le aveți, vă rog să luați'
' măsurile ce se impun.<br><br>'
'Prezenta sesizare reprezintă o petiție în sensul O.G. nr. 27/2002 privind activitatea de soluționare a petițiilor și '
'a fost transmisă prin intermediul aplicației mobile e-Rădăuți, dezvoltată'
' de Ascociația Rădăuțiul Civic, prin funcționalitatea „Sesizează o problemă”.<br><br>'
'Vă rog să îmi transmiteți răspunsul în termenul legal la adresa $email'
'.<br><br>Cu stimă,<br><br>'
' $name<br><br> Tel: $number/$email'
..attachments.addAll(attachments);
tryToSendEmail(message);
}
Future<bool> tryToSendEmail(var message) async {
final smtpServer = gmail(username, password);
try {
final sendReport = await send(message, smtpServer);
debugPrint('Message sent: ' + sendReport.toString());
} on MailerException catch (e) {
print('Message not sent.');
for (var p in e.problems) {
print('Problem: ${p.code}: ${p.msg}');
}
}
}
我尝试使用此代码映射列表:
List<Attachment> listAttachments = _attachments
.map((e) => e as Attachment)
.toList();
List<Attachment> listAttachmentsNew =
listAttachments.cast<Attachment>();
【问题讨论】:
-
仅看stacktrace很难理解问题所在。你能给我们一些代码来更好地理解你的问题的范围吗?
-
哦,我的大部分代码都来自 2 个包中的文档,但我肯定会发布代码
-
我认为最相关的部分是当您执行 List
something = somethingElse。这是为了了解“somethingElse”是什么,并查看是否可以将该列表的内容映射到附件列表 -
@AndreaCostanzo1 我已经添加了我尝试映射列表的方式以及我得到的错误
-
你不能简单地转换,因为附件是一个抽象类。您必须使用构造函数正确创建附件。我在下面发布了一个答案,让您更好地了解应该如何处理这个问题
标签: flutter email-attachments mailer dynamic-list