未在 flutter 中创建文本文件
我正在尝试创建一种方法来添加最喜欢的名字列表。当我提交名称时,它会更新列表。然后,当我按“保存”时,它应该将列表写入文本文件。但是当我运行它时,我收到错误(操作系统错误:没有这样的文件或目录,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);
}
}
),
],
),
),
),
);
}
}
Im trying to create a way to add a list of favourite names. When I submit a name it will update a list. then when i press save it should write the list to a text file. but when i run it i get the error (OS Error: No such file or directory, errno = 2)
How do i create the missing text file?
I cannot locate the file path in my demo device either. the code is given below ..
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);
}
}
),
],
),
),
),
);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您创建文件,您必须拥有权限
,将您的“AndroidManifest.xml”
使用“permission_handler”插件。
if you create file you must have permission
put your "AndroidManifest.xml"
use "permission_handler" plugin.