首页 > 解决方案 > 将文本文件作为文件打开后如何保存对文本文件所做的更改?

问题描述

我在内存中有一个使用 File.readAsString() 打开的文本文件。这会从中提取文本并将其保存为字符串。这被提供给 TextField() 以便可以对此文本进行更改。

如何有效地将这些更改保存回原始文件?

到目前为止,这是我的代码。一切正常,文件打开,其中的文本显示在 TextField 中。但我不知道如何将更改保存回文件..

class _NoteEditScreenState extends State<NoteEditScreen> {

  TextEditingController _controller;

  String startingText = '';
  String fileName;


  @override
  void initState() {
    super.initState();

    getTextFromFile().whenComplete(() {
      //when we read the string, extract lines from it
      lines = lineSplitter.convert(startingText);
      setState(() {
        _controller = TextEditingController(text: startingText);
      });

    });
    fileName = widget.txtPath.split('/').last;


  }


  Future getTextFromFile() async {
    final file = File(widget.txtPath);
    //read the file
    String contents = await file.readAsString();
    startingText = contents;
  }


  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        appBar: AppBar(
          title: Text(fileName),
          backgroundColor: Colors.teal,
          centerTitle: true,
          actions: <Widget>[
            IconButton(
              icon: Icon(Icons.search),
              onPressed: (){
                showSearch(context: context, delegate: TextSearch(lines));
              },
            ),
          ],
        ),
        body: Center(
          child: Container(
            padding: EdgeInsets.all(5.0),
            //height: 50.0,
            child: TextField(
              maxLines: null,
              controller: _controller,
              decoration: InputDecoration(
                enabledBorder: OutlineInputBorder(
                  borderSide: BorderSide(color: Colors.teal),
                  //borderRadius: BorderRadius.all(Radius.circular(20.0))
                ),
                focusedBorder: OutlineInputBorder(
                  borderSide: BorderSide(color: Colors.red),
                  //borderRadius: BorderRadius.all(Radius.circular(20.0))
                ),
              ),
            ),
          ),
        ),

我看到它发生的方式是删除旧文件并创建一个同名的新文件。这是最好的方法吗?或者你们能推荐一个更好的方法吗?

标签: flutterdart

解决方案


要写入文件,您可以使用

yourFile.writeAsString(contents)yourFile.writeAsStringSync(contents)

如果writeAsString您不想等待文件完全写入或不想阻止应用程序执行,或者writeAsStringSync如果您想阻止应用程序在完成写入之前继续运行,请使用。

文档


推荐阅读