【问题标题】:Write a text file in the folder Documents of my Android Smartphone在我的 Android 智能手机的 Documents 文件夹中写入一个文本文件
【发布时间】:2021-06-21 09:32:34
【问题描述】:

我想用 Flutter 写一个文件,并能在我的 Android 智能手机的 Documents 目录中找到它,你能帮我吗?谢谢你的帮助

【问题讨论】:

  • 请详细说明您想要做什么,只需创建一个类似“hello.txt”的文件或其中包含文本的文件...
  • 是的,只是一个像“hello.txt”这样带有数据的文件;)我想在用户可以访问的Android“文档”文件夹中显示这个文件非常感谢您的帮助跨度>

标签: flutter file write


【解决方案1】:

免责声明:这仅适用于 android

准备

您首先必须获得使用外部存储的权限,请转到android/app/src/main/AndroidManifest.xml

添加uses-permissionandroid:request 行。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.test_write_file">

    <!-- Permissions options for the `storage` group -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


   <application
       android:requestLegacyExternalStorage="true"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"

将这两个包添加到 pubspec.yaml

dependencies:
  ext_storage: ^1.0.3
  permission_handler: ^6.1.1

权限

然后要真正获得您必须请求的权限,为此我们使用permission_handler

import 'package:permission_handler/permission_handler.dart';


  void permission() async {
    var status = await Permission.storage.status;
    if (!status.isGranted) {
      await Permission.storage.request();
    }
  }

然后再写它的 3 个步骤:

首先获取写入的路径,我指定了文档,但您也可以选择下载 DCIM 等等。

然后在目录中获取/创建文件,然后写入文件。


import 'package:ext_storage/ext_storage.dart';
import 'dart:io';


  Future<void> startWrite() async {
    String path = await _getPath();
    File file = await _localFile(path);
    writeFile(file);
  }

  Future<String> _getPath() async {
    return ExtStorage.getExternalStoragePublicDirectory(
        ExtStorage.DIRECTORY_DOCUMENTS);
  }

  Future<File> _localFile(String path) async {
    return File('$path/myFile.txt');
  }

  Future<File> writeFile(File file) async {
    return file.writeAsString('This is a test');
  }

完整代码

我的工作测试项目

import 'package:ext_storage/ext_storage.dart';
import 'package:flutter/material.dart';
import 'dart:io';

import 'package:permission_handler/permission_handler.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'ExtStorage Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  void permission() async {
    var status = await Permission.storage.status;
    if (!status.isGranted) {
      await Permission.storage.request();
    }
  }

  Future<void> startWrite() async {
    String path = await _getPath();
    File file = await _localFile(path);
    writeFile(file);
  }

  Future<String> _getPath() async {
    return ExtStorage.getExternalStoragePublicDirectory(ExtStorage.DIRE);
  }

  Future<File> _localFile(String path) async {
    return File('$path/myFile.txt');
  }

  Future<File> writeFile(File file) async {
    return file.writeAsString('This is a test');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Test'),
      ),
      body: Center(
        child: Column(
          children: [
            TextButton(
              child: Text('Permission'),
              onPressed: () => permission(),
            ),
            TextButton(
              child: Text('Write'),
              onPressed: () => startWrite(),
            ),
          ],
        ),
      ),
    );
  }
}

【讨论】:

    【解决方案2】:

    您好,感谢您的帮助和回答。 我和你一模一样,但我在下面出现这个错误你知道为什么吗?

    FAILURE:构建完成,失败了 2 次。

    1: 任务因异常而失败。

    • 在哪里: 构建文件 '/Users/myMac/flutter/.pub-cache/hosted/pub.dartlang.org/ext_storage-1.0.3/android/build.gradle' 行:25

    • 出了什么问题: 评估项目 ':ext_storage' 时出现问题。

    无法初始化类 org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSetKt

    • 尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。 ==================================================== ==============================

    2:任务因异常而失败。

    • 在哪里: 脚本“/Users/myMacflutter/packages/flutter_tools/gradle/flutter.gradle”行:326

    • 出了什么问题: 配置项目 ':ext_storage' 时出现问题。

    未能通知项目评估侦听器。 无法初始化类 org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSetKt compileSdkVersion 未指定。请将其添加到 build.gradle

    • 尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。 ==================================================== ==============================

    • 通过https://help.gradle.org获得更多帮助

    在 861 毫秒内构建失败 异常:Gradle 任务 assembleDebug 失败,退出代码为 1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-28
      • 2017-10-07
      • 2017-07-25
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      相关资源
      最近更新 更多