Fltter Firebase RTDB проблема получения указывается c дочерний - PullRequest
0 голосов
/ 17 марта 2020

Я пытался получить данные от указанного c потомка из RTDB Firebase. Проблема в том, что появляется следующая ошибка (я не использую int):

Unhandled Exception: type 'String' is not a subtype of type 'int' of 'index'

В журнале говорится, что здесь появляется ошибка

  DATA[individualKey]['name'],
            DATA[individualKey]['picture'],
            DATA[individualKey]['price'],
          DATA[individualKey]['id'],
          DATA[individualKey]['brand'],
          DATA[individualKey]['category'],
//          DATA[individualKey]['feature'],
//          DATA[individualKey]['sale'],
//          DATA[individualKey]['colors'],
//          DATA[individualKey]['sizes'],
          DATA[individualKey]['quantity'],

Код, на который я собираюсь покажите, я использую его на другом экране с минимальными изменениями, и он работает, но в текущем, который я использую, он не работает

class PostsDetails extends StatefulWidget {

  final value2;
  PostsDetails({Key key,@required this.value2}) : super(key : key);

  @override
  _PostsDetailsState createState() => _PostsDetailsState(value2);
}

class _PostsDetailsState extends State<PostsDetails> {

  final value2;
  _PostsDetailsState(this.value2);

  List<Posts>postsList = [];

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    DatabaseReference postsRef = FirebaseDatabase.instance.reference().child("Product").child("Shoes").child("Nike").child(value2);
    postsRef.once().then((DataSnapshot snap)
    {
      var KEYS = snap.value.keys;
      var DATA = snap.value;

      postsList.clear();

      for(var individualKey in KEYS)
      {
        Posts posts = new Posts
          (

          DATA[individualKey]['name'],
          DATA[individualKey]['picture'],
          DATA[individualKey]['price'],
          DATA[individualKey]['id'],
          DATA[individualKey]['brand'],
          DATA[individualKey]['category'],
//          DATA[individualKey]['feature'],
//          DATA[individualKey]['sale'],
//          DATA[individualKey]['colors'],
//          DATA[individualKey]['sizes'],
          DATA[individualKey]['quantity'],



        );

        postsList.add(posts);

      }

    });
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        elevation: 0.1,
        backgroundColor: Colors.red,
        title: InkWell(
            onTap: (){
              Navigator.push(context, MaterialPageRoute(builder: (context)=> new HomePage()));
            },
            child: Text("SHOP APP")),
        actions: <Widget>[
          new IconButton(icon: Icon(Icons.search, color: Colors.white,), onPressed: (){}),

        ],
      ),
       body: new ListView(
        children: <Widget>[
        new  Container(

          child: postsList.length == 0 ? new Text("No Available"):new ListView.builder(
          scrollDirection: Axis.vertical,
          shrinkWrap: true,
          itemCount: postsList.length,
          itemBuilder: (_, index){


                new Container(
                    height: 300.0,
                    child: GridTile(
                    child: Container(
                    color: Colors.white,
//                    child: Image.network(postsList[index].picture),
                ),
                footer: new Container(
                color: Colors.white70,
                child: ListTile(
                leading: new Text(postsList[index].name,
                style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16.0),),
                title: new Row(
                children: <Widget>[
                Expanded(
//                child: new Text("\$"+postsList[index].price, style: TextStyle(fontWeight: FontWeight.bold, color: Colors.red),)
                ),
                ],
                ),
                ),
                ),
                ),
                );




          })

          ),
        ]
        )

    );
  }
}

postslist.length возвращает 0.

окончательное значение2 это идентификатор ребенка. Я подтвердил, что он хорошо получен на предыдущем экране, и если значение2 не используется, данные не будут извлечены

Сообщений Класс:

class Posts
{
  String name;
  String picture;
  String price;
  String id;
  String brand;
  String category;
  String quantity;
//  List<> colors;
//  List<> sizes;
//  bool feature;
//  bool sale;

  Posts(this.name, this.picture, this.price, this.id,  this.category,this.brand,this.quantity);
}

Firebase RTDB

Как это можно решить или есть какой-нибудь способ получить определенного c потомка? Я знаю, как показать список, но не указан c ребенок спасибо

1 Ответ

0 голосов
/ 18 марта 2020

я исправил это, по какой-то причине код

postsList.length == 0 ? new Text("No Available"):

был проблемой, поэтому я удалил его

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