flutter - 未在 flutter 中创建文本文件

标签 flutter dart error-handling text-files read-write

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

相关文章:

flutter - 使用 Pageview.builder 在 Flutter 中分页

c# - 我可以将错误处理合并到我的 API 中吗?

php - LDAP的Codeigniter错误处理

dart - 如何在 Flutter/dart 中获取星期几的日期?

dart - 从右到左 TextFormField

flutter - 为什么使用 agora rtc 进行视频通话时,远程和本地用户都会黑屏?

generics - 在Dart泛型中使用动态

dart - Dart Services API:如何通过API服务访问/fix?

dart - flutter 错误 : Document references must have an even number of segments

java - 由: java.lang.NoClassDefFoundError: com.inn.wireless.data.Users引起