从 txt 文件中获取内容并将其放入列表 Flutter/Dart

Get content from txt file and put it in a list Flutter/Dart

这是我在 Whosebug 上的第一个问题。在进入问题本身之前,我想指出我是 Flutter 和 Dart 的初学者,之前没有移动开发经验。

现在,正如标题所说,我在尝试提取文本文件的内容并将各个名称存储在列表的索引中时遇到了一些问题。我的应用程序的最终目标是打印一个永无止境的这些名称列表,每个名称之间用逗号分隔。例如:

top model,
torcitóre,
torcolière,
tornitóre,
tosacàni,
tossicòlogo,
tour operator,
tracciatóre,
tranvière,
trattorìsta,
trattóre²,
trebbiatóre,
trecciaiòlo,
trevière,
tributarìsta,
trinciatóre,
trivellatóre,
truccatóre,
tubìsta,
turnìsta,

名为 jobs.txt 的文本文件包含 1000 多个意大利语职位名称。经过几个小时的搜索,我这里只有这个(从另一个用户那里得到):


import 'dart:async';
import 'dart:convert';
import 'dart:io';

void main(List<String> arguments) {
  try {
    final _jobs = File('jobs.txt');

    List<String> lines = _jobs.readAsLinesSync(encoding: ascii);
    for (var l in lines) print(l);
  } catch (Exception) {
    print(Exception.toString());
    
  }
}

jobs.txt 与 dart 文件位于同一目录中,即 bin.

在尝试为 _jobs 变量提供相对路径时:

FileSystemException: Cannot open file, path = 'binjobs.txt' (OS Error: Impossibile trovare il file specificato.
, errno = 2)

使用绝对路径:

FileSystemException: Cannot open file, path = 'C:UsersUserDesktopdartdart_application_injobs.txt' (OS Error: La sintassi del nome del file, della directory o del volume non è corretta.
, errno = 123)

由于我不知道的原因,如果这很重要,在错误消息中指定的路径中,\ 看起来根本不存在。

顺便说一句,这是我的项目结构: project structure

如果您的解决方案包括使用 Future class 或 async-await 关键字,如果您能向我解释它们是如何工作的,我将不胜感激。

更新:在评论中查看此问题的完整解决方案。经过验证的答案不是完整的解决方案。

在您的项目中创建一个资产文件夹,在您的 pubspec.yaml 中指定资产(确保它在您的资产文件夹中,文件存在且可读)

flutter:
  assets:
    - assets/jobs.txt

现在您可以像这样访问您的文本文件了 -

import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;
Future<String> loadAsset() async {
  return await rootBundle.loadString('assets/jobs.txt');
}

当函数 returns 你的文本时,你可以用逗号分隔它并根据需要循环遍历所有作业

尝试使用 rootBundle

  pubspec.yaml
      assets:
        - text_file/

  import 'package:flutter/services.dart' show rootBundle;

  Future<String> getData() async {
    try {
      return await rootBundle.loadString('text_file/four_words.txt');
    } catch (e) {
      throw (e.toString());
    }
  }