Я пытаюсь извлечь массив 'content' из базы данных Firebase и отобразить его на странице сведений - PullRequest
0 голосов
/ 10 февраля 2019

Я хочу отобразить «содержимое» на странице сведений, но «содержимое» - это массив.

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';

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

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

 class MyHomePage extends StatefulWidget {
 MyHomePage({Key key, this.title}) : super(key: key);

 final String title;

 @override
 _MyHomePageState createState() => _MyHomePageState();
 }

 class _MyHomePageState extends State<MyHomePage> {
 @override
 Widget build(BuildContext context) {
  return Scaffold(
   appBar: AppBar(
    title: Text(widget.title),
  ),
  body: ListPage(),
);
}
}
class ListPage extends StatefulWidget {
@override
_ListPageState createState() => _ListPageState();
}

class _ListPageState extends State<ListPage> {
Future _data;

Future getPosts() async {
 var firestore = Firestore.instance;

QuerySnapshot qn = await firestore.collection("pese").getDocuments();

 return qn.documents;
}

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

_data = getPosts();    //getPosts stored in _data
}

navigateToDetail(DocumentSnapshot post) {
Navigator.push(
    context,
    MaterialPageRoute(
        builder: (context) => DetailPage(
              post: post,
            )));
}

@override
Widget build(BuildContext context) {
 return Container(
   child: FutureBuilder(
      future: _data,
      builder: (_, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return Center(
            child: Text("Loading..."),
          );
        } else {
          return ListView.builder(
              itemCount: snapshot.data.length,
              itemBuilder: (_, index) {
                return Container(
                  child: Card(
                    child: ListTile(
                      title: Text(snapshot.data[index].data['title']),
                      subtitle: 
                       Text(snapshot.data[index].data['subtitle']),
                      onTap: () => 
                        navigateToDetail(snapshot.data[index]),
                    ),
                  ),
                );
              });
        }
      }),
 );
 }
 }

 class DetailPage extends StatefulWidget {
 final DocumentSnapshot post;

 DetailPage({this.post});

 @override
 _DetailPageState createState() => _DetailPageState();
 }

 class _DetailPageState extends State<DetailPage> {
 @override
 Widget build(BuildContext context) {
  return Scaffold(
   appBar: AppBar(
    title: Text(widget.post.data["title"]),
  ),
  body: Container(     //container
    child: Card(
        child: ListTile(

Поэтому каждый раз, когда я запускаю программу и пытаюсь перейти на страницу сведений,Я всегда получаю сообщение об ошибке «Неудачное утверждение: строка 230, позиция 15:« данные! = Ноль »: не соответствует действительности».Код работает нормально, если я просто помещаю «content» как строку, но когда я делаю «content» массивом в firebase, я получаю сообщение об ошибке.

      subtitle: Text(widget.post.data['content']),   //where the error is
    )),
  ),
);
}
}

база данных firebase "pese«

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