如何使用 Flutter 中的小部件从文件中读取文本并将其显示为列表?

Aia*_*log 3 text flutter

我可以问一下如何进行这项工作吗?

我有一个名为questions.txt的文本文件。

该文件包含以下问题:

  1. 你今年多大?
  2. 你住在哪里?
  3. 你几岁?

我想从文件中加载这些问题,并将它们呈现为 Flutter 中的列表。

问卷.dart

import 'package:flutter/material.dart';
class Questionnaires extends StatefulWidget {
    @override
    _QuestionnairesState createState() => _QuestionnairesState();
}

class _QuestionnairesState extends State<Questionnaires> {
    String q1 = "";
    String q2 = "";
    String q3 = "";
    @override
    Widget build(BuildContext context) {
        return SafeArea(
            child: Scaffold(
            resizeToAvoidBottomInset: false,
                body: Center(
                    child: Column(
                        children: <Widget>[
                            Text(q1),
                            Text(q2),
                            Text(q3)
                        ],
                    ),
                ),
            ),
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

Jos*_*man 5

.txt您可以使用从文件中检索问题的最基本方法开始rootBundle.loadString,然后使用小部件显示它ListView

主程序.dart

import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

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

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

class MyAppScreen extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return MyAppScreenState();
  }
}

class MyAppScreenState extends State<MyAppScreen> {
  List<String> _questions = [];

  Future<List<String>> _loadQuestions() async {
    List<String> questions = [];
    await rootBundle.loadString('path/to/questions.txt').then((q) {
      for (String i in LineSplitter().convert(q)) {
        questions.add(i);
      }
    });
    return questions;
  }

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

  _setup() async {
    // Retrieve the questions (Processed in the background)
    List<String> questions = await _loadQuestions();

    // Notify the UI and display the questions
    setState(() {
      _questions = questions;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Flutter Questions")),
      body: Center(
        child: Container(
          child: ListView.builder(
            itemCount: _questions.length,
            itemBuilder: (context, index) {
              return Text(_questions[index]);
            },
          ),
        ),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

以下是问题示例列表。

问题.txt

"How old are you?"
"Where do you live?"
"What is your age?"
Run Code Online (Sandbox Code Playgroud)

在上面的示例代码中,您正在逐行解析文本文件请参阅LineSplitter。这对于测试 Flutter 时的小型示例项目很有用。但是您应该能够按照 Flutter 官方文档更新此实现,了解如何读取和写入文件。

此外,如果您想扩大 Flutter 项目,您应该研究如何在线托管您的问题,例如。通过 REST API 提供服务,然后使用Flutter 的http插件检索它。

更多关于:

输出:

图片-1