未在 flutter 中创建文本文件

发布于 2025-01-10 06:50:35 字数 4330 浏览 3 评论 0原文

我正在尝试创建一种方法来添加最喜欢的名字列表。当我提交名称时,它会更新列表。然后,当我按“保存”时,它应该将列表写入文本文件。但是当我运行它时,我收到错误(操作系统错误:没有这样的文件或目录,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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

晨光如昨 2025-01-17 06:50:35

如果您创建文件,您必须拥有权限

,将您的“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);
        }
      }

if you create file you must have permission

put your "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" />

use "permission_handler" plugin.

      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);
        }
      }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文