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

时间:2020-02-15 14:16:34

标签: flutter text

请问一种使这项工作有效的方法。

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

此文件包含以下问题:

  1. 你几岁了?
  2. 你住在哪里?
  3. 你几岁了?

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

questionnaires.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)
                        ],
                    ),
                ),
            ),
        );
    }
}

1 个答案:

答案 0 :(得分:1)

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

main.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]);
            },
          ),
        ),
      ),
    );
  }
}

这是问题的示例列表。

questions.txt

"How old are you?"
"Where do you live?"
"What is your age?"

在上面的示例代码中,您正在逐行解析文本文件 ,请参见LineSplitter。当您测试Flutter时,这对小型项目和示例项目很有用。但是,您应该可以按照Flutter的官方docs来更新该实现,以了解如何读写文件。

此外,如果您想开展Flutter项目,则应该研究如何在线托管问题的方法,例如。通过REST API提供服务,然后使用http Flutter插件对其进行检索。

更多信息

输出:

image-1