Как я могу читать текст из файлов и отображать их в виде списка, используя виджет / ы во Flutter? - PullRequest
1 голос
/ 15 февраля 2020

Могу ли я спросить, как заставить это работать.

У меня есть текстовый файл с именем 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 Ответ

1 голос
/ 15 февраля 2020

Вы можете начать с самого простого c способа получения вопросов из файла .txt с помощью rootBundle.loadString, а затем отобразить его с помощью виджета ListView.

main. дротик

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, о том, как вы можете читать и записывать файлы.

Более того, если вы хотите go большой с вашим проектом Flutter вы должны изучить способы размещения своих вопросов в Интернете, например. подается через API REST, а затем извлекается с помощью плагина http для Flutter.

Подробнее:

Выход:

image-1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...