флаттер отправить вложение электронной почты - PullRequest
0 голосов
/ 28 сентября 2018

Мое приложение флаттера использует flutter_mailer: ^ 0.1.0 для отправки электронной почты.Работает хорошо без вложений.Но если я добавлю attachments: [ x.path ],

  • для IOS, приложение сразу закроется, когда я нажму кнопку.
  • для Android, приложение не откроет приложение электронной почты при нажатии кнопки.кнопка.Пожалуйста, помогите решить эту проблему.

здесь с распечаткой из консоли Android:

I/flutter ( 8933): /data/user/0/com.gph.testmanual/app_flutter/data.txt
I/fl      ( 8933): [/data/user/0/com.gph.testmanual/app_flutter/data.txt]
E/MethodChannel#flutter_mailer( 8933): Failed to handle method call
E/MethodChannel#flutter_mailer( 8933): java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/com.gph.testmanual/app_flutter/data.txt

здесь с распечаткой из консоли IOS:

Launching lib/main.dart on iPhone in debug mode...
Starting Xcode build...
Xcode build done.
Installing and launching...
Syncing files to device iPhone...
flutter: /var/mobile/Containers/Data/Application/D87ECFEF-A989-345D-AE543C-1CE5AF96546345F52/Documents/data.txt

Мой код:

class _HomeState extends State<Home> {
  File x;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();

    writeData('Hello, How are you?').then((value) {
      x = value;
    });
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('Read/Write'),
        centerTitle: true,
        backgroundColor: Colors.greenAccent,
      ),
      body: new Container(
          padding: const EdgeInsets.all(13.4),
          alignment: Alignment.topCenter,
          child:
              FlatButton(onPressed: () => _sendEmail(), child: Text("Button"))),
    );
  }

  void _sendEmail() async {
    debugPrint(x.path);
    final MailOptions mailOptions = MailOptions(
      body: 'a long body for the email',
      subject: 'Booking',
      recipients: ['gph.payment@gmail.com'],
      isHTML: false,
//      bccRecipients: ['other@example.com'],
//      ccRecipients: ['third@example.com'],
//      attachments: [ x.path ],
    );

    await FlutterMailer.send(mailOptions);
  }
}

Future<String> get _localPath async {
  final directory = await getApplicationDocumentsDirectory();
  return directory.path; //home/directory/
}

Future<File> get _localFile async {
  final path = await _localPath;

  return new File('$path/data.txt'); //home/directory/data.txt
}

//Write and Read from our file
Future<File> writeData(String message) async {
  final file = await _localFile;

  //write to file
  return file.writeAsString('$message');
}

Future<String> readData() async {
  try {
    final file = await _localFile;

    //Read
    String data = await file.readAsString();

    return data;
  } catch (e) {
    return "Nothing saved yet!";
  }
}

1 Ответ

0 голосов
/ 11 мая 2019

Кажется, проблема в каталоге документов приложения - по какой-то причине расширение пока не может поделиться этим.(Только что сообщили об ошибке для этого .)

Мой обходной путь - скопировать файл во временный каталог и прикрепить его оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...