flutter - Flutter:writeAsString 不会创建任何文件
问题描述
我正在尝试将一些列表导出到 csv,但尽管我没有遇到任何问题,但该文件并未创建。
await f.writeAsString(csv);
这是完整的实现:
import 'dart:io';
import 'package:csv/csv.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<List<dynamic>> employeeData;
@override
initState() {
//create an element rows of type list of list. All the above data set are stored in associate list
//Let associate be a model class with attributes name,gender and age and associateList be a list of associate model class.
employeeData = List<List<dynamic>>();
for (int i = 0; i < 5; i++) {
//row refer to each column of a row in csv file and rows refer to each row in a file
List<dynamic> row = List();
row.add("Employee Name $i");
row.add((i % 2 == 0) ? "Male" : "Female");
row.add(" Experience : ${i * 5}");
employeeData.add(row);
}
}
getCsv() async {
if (await Permission.storage.request().isGranted) {
//store file in documents folder
String dir = (await getExternalStorageDirectory()).path + "/mycsv.csv";
String file = "$dir";
File f = new File(file);
// convert rows to String and write as csv file
String csv = const ListToCsvConverter().convert(employeeData);
File writtenFile = await f.writeAsString(csv);
print(writtenFile);
return writtenFile;
} else {
Map<Permission, PermissionStatus> statuses = await [
Permission.storage,
].request();
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
// Here we take the value from the MyHomePage object that was created by
// the App.build method, and use it to set our appbar title.
title: Text(widget.title),
),
body: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
ListView.builder(
shrinkWrap: true,
itemCount: employeeData.length,
itemBuilder: (context, index) {
return Card(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(employeeData[index][0]),
Text(employeeData[index][1]),
Text(employeeData[index][2]),
],
),
),
);
}),
Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
color: Colors.green,
height: 30,
child: TextButton(
child: Text(
"Export to CSV",
style: TextStyle(color: Colors.white),
),
onPressed: getCsv,
),
),
),
],
),
),
// This trailing comma makes auto-formatting nicer for build methods.
);
}
}
解决方案
推荐阅读
- user-interface - IIS 帐户与 Windows UI 交互
- linux - 无法设置设备环参数:不支持操作
- python - 将文本文件转换为字典时如何避免 ValueError
- java - 部署到 jboss 时在类路径上检测到 2 个 Spring WebApplicationInitializers
- sql - SQL 错误 [42972]: [SQL0338] JOIN 谓词或 MERGE ON 子句无效
- html - 将单选框放置在其标签的左侧
- c# - 获取最后 x 条评论 InstaSharp
- python-3.x - youtube_dl 错误:请求的格式不可用
- python - 为什么我想在我的 Jetson TX2/NANO 硬件上使用 Tensorflow 的 fftshift 功能时总是出错
- oracle - Oracle分析查询性能