我正在尝试创建一种方法来添加最喜欢的名字列表。当我提交名称时,它会更新列表。然后,当我按“保存”时,它应该将列表写入文本文件。但是当我运行它时,我收到错误(操作系统错误:没有这样的文件或目录,errno = 2)
如何创建丢失的文本文件?
我也无法在演示设备中找到文件路径。代码如下..
import 'dart:io';
import 'package:appoint/navigationDrawer/navigationDrawer.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';
TextEditingController FavController = TextEditingController();
List<String> Favs = [];
TextEditingController TAController = TextEditingController();
class Favourite extends StatefulWidget {
static const String routeName = '/Favourite';
const Favourite({Key? key}) : super(key: key);
@override
_FavouriteState createState() => _FavouriteState();
}
class _FavouriteState extends State<Favourite> {
List _content = [];
Future<String> _getDirPath() async {
final _dir = await getApplicationDocumentsDirectory();
return _dir.path;
}
Future<File> get _localfile async {
final path = await _getDirPath();
return File ("$path/favs.txt");
}
Future<void> _readData() async {
final file = await _localfile;
String _data = await file.readAsString();
setState(() {
_content = [];
_content.add(_data);
});
}
Future<void> _writeData(pass) async {
final _dirPath = await _getDirPath();
final _myFile = File('$_dirPath/data.txt');
await _myFile.writeAsString('\n' + '$pass');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Add Favourites',style: TextStyle(fontSize: 20.0, color: Colors.orange)),
),
drawer: navigationDrawer(),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.only(right: 8.0, left: 8.0),
child: Column(
children: [
Padding(
padding: const EdgeInsets.only(bottom: 30.0, top: 10.0),
child: TextField(
decoration: InputDecoration(border: OutlineInputBorder(), hintText: 'Enter New Favourite Name'),
controller: FavController,
onSubmitted: (text){
_readData();
print (_content);
Favs.add(text);
FavController.clear();
setState(() {
});
},
),
),
//addfields
Container(
child: ListView.builder(
physics: ClampingScrollPhysics(),
shrinkWrap: true,
itemCount: Favs.length,
itemBuilder: (BuildContext ctxt, int index) {
return Container(
decoration: BoxDecoration(border: Border.all(color: Colors.white54), borderRadius: BorderRadius.all(Radius.circular(8.0))),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'$index . ' + Favs[index],
style: TextStyle(fontSize: 20.0),),
IconButton(
onPressed: (){
Favs.remove(Favs[index]);
setState(() {});
},
tooltip: 'Clear name',
icon: Icon(Icons.clear, color: Colors.red,),
),
],
),
),
);
}
),
),
RaisedButton(
child: Text ('Save'),
onPressed: (){
for (String i in Favs) {
_writeData(i);
}
}
),
],
),
),
),
);
}
}
最佳答案
如果您创建文件,您必须拥有权限
放入您的“AndroidManifest.xml”
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
使用“permission_handler”插件。
var status = await Permission.storage.status;
if (!status.isGranted) {
await Permission.storage.request();
}
if (await Permission.storage.request().isGranted) {
try {
await _writeData(pass);
} catch (e) {
print(e);
}
}
关于flutter - 未在 flutter 中创建文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71282156/