前提・実現したいこと
FlutterでAndroid実機を用いて、CSVファイルを生成、メールで添付して送るコードを作っております。
その際に、Android実機のcurrentなDirectoryにcsvファイルを吐き出すことになるのですが、
これがどうもうまくいっていない様子です。
Windows10で下記関数を実行するとちゃんとCSVファイルが生成されるのですが、
Android実機だとうまくいかず、その理由と解決方法がわかれば幸いです。
発生している問題・エラーメッセージ
E/MethodChannel#flutter_mailer(17274): Failed to handle method call E/MethodChannel#flutter_mailer(17274): java.lang.IllegalArgumentException: Failed to find configured root that contains /sample.csv E/MethodChannel#flutter_mailer(17274): at androidx.core.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:739) E/MethodChannel#flutter_mailer(17274): at androidx.core.content.FileProvider.getUriForFile(FileProvider.java:418) E/MethodChannel#flutter_mailer(17274): at com.dataxad.fluttermailer.FlutterMailerPlugin.mail(FlutterMailerPlugin.java:116) E/MethodChannel#flutter_mailer(17274): at com.dataxad.fluttermailer.FlutterMailerPlugin.onMethodCall(FlutterMailerPlugin.java:50) E/MethodChannel#flutter_mailer(17274): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:222) E/MethodChannel#flutter_mailer(17274): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:96) …
該当のソースコード
//ファイルを作る関数 import 'dart:async'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_mailer/flutter_mailer.dart'; void main() => runApp(new MyApp()); class MyApp extends StatefulWidget { @override _MyAppState createState() => new _MyAppState(); } class _MyAppState extends State<MyApp> { final GlobalKey<ScaffoldState> _scafoldKey = GlobalKey<ScaffoldState>(); // Platform messages are asynchronous, so we initialize in an async method. Future<void> send() async { // Platform messages may fail, so we use a try/catch PlatformException. final MailOptions mailOptions = MailOptions( body: null, subject: 'ファイル添付', recipients: [' '], isHTML: true, // bccRecipients: ['other@example.com'], ccRecipients: [' '], attachments: [_createFile().path], ); String platformResponse; try { await FlutterMailer.send(mailOptions); platformResponse = 'success'; } catch (error) { platformResponse = error.toString(); } // If the widget was removed from the tree while the asynchronous platform // message was in flight, we want to discard the reply rather than calling // setState to update our non-existent appearance. if (!mounted) return; _scafoldKey.currentState.showSnackBar(SnackBar( content: Text(platformResponse), )); } @override Widget build(BuildContext context) { return new MaterialApp( theme: ThemeData(primaryColor: Colors.red), home: new Scaffold( key: _scafoldKey, appBar: new AppBar( title: const Text('Plugin example app'), actions: <Widget>[ IconButton( onPressed: send, icon: const Icon(Icons.send), ) ], ), body: SingleChildScrollView( child: new Center( child: Padding( padding: const EdgeInsets.all(8.0), child: Column( mainAxisSize: MainAxisSize.max, // mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, ), ), ), ), ), ); } //ファイルを作る関数 File _createFile(){ Directory current = Directory.current; String fileName = current.path +"\sample.csv"; print(fileName); File file = new File(fileName); file.writeAsString("Hello World!!"); return file; } }
試したこと
実行をしてメールボタンを押しsendを呼び出すと、attachmentに添付ファイルが付いていてほしいです。
関数内でprintすると「\sample.csv」となりDirectory currentがしっかり返っているか不明です。
補足情報(FW/ツールのバージョンなど)
Windows10 , Androidバージョン5.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。