чего здесь не хватает? Флаттер - одиночный выбор - PullRequest
0 голосов
/ 02 марта 2020

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

enter image description here

Полный код:

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

class question14 extends StatefulWidget {
  @override

  _question14State createState() => _question14State();
}

class _question14State extends State<question14> {

  final isSelected = [false, false, false];

  @override

  Widget build(BuildContext context) {

    return Scaffold(
      body: StreamBuilder(
          stream: Firestore.instance
              .collection('numberzz')
              .snapshots(),
          builder: (context, snapshot) {
            if (!snapshot.hasData) return const Text('Loading ...');
            return ListView.builder(
              scrollDirection: Axis.horizontal,
              padding: EdgeInsets.fromLTRB(100.0, 0.0, 0.0, 0.0),
              itemExtent: 200.0,
              itemCount: snapshot.data.documents.length,
              itemBuilder: (BuildContext context, int index) {
                final DocumentSnapshot document =
                snapshot.data.documents[index];

                return
                 Container(
                    padding: EdgeInsets.fromLTRB(0.0, 300.0, 0.0, 450.0),
                    child: ListTile(
                      contentPadding: isSelected[index]
                          ? EdgeInsets.all(0.0)
                          : EdgeInsets.all(25.0),
                      title: Image.network(
                        document['number'],
                      ),

                      selected: !isSelected[index],

                      onTap: () {
                        Firestore.instance.runTransaction((transaction) async {
                          DocumentSnapshot freshSnap =
                          await transaction.get(document.reference);
                          await transaction.update(freshSnap.reference, {
                            'vote': freshSnap['vote'] + 1,
                          });
                        });

                        setState(() {
                          isSelected[index] = !isSelected[index];
                        });
                      },
                    ),
                  );
              },
            );        

    );
  }
}

Большое спасибо за вашу помощь!

1 Ответ

1 голос
/ 02 марта 2020

Вместо использования списка логических значений вы можете просто сохранить выбранный индекс.

Я использовал selectedIndex, чтобы выбрать ответ, выбранный пользователем, наконец.

Обновлено код:

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

class question14 extends StatefulWidget {
  @override
  _question14State createState() => _question14State();
}

class _question14State extends State<question14> {
  int selectedIndex = 0;//for unselect, you can use null

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: StreamBuilder(
            stream: Firestore.instance.collection('numberzz').snapshots(),
            builder: (context, snapshot) {
              if (!snapshot.hasData) return const Text('Loading ...');
              return ListView.builder(
                scrollDirection: Axis.horizontal,
                padding: EdgeInsets.fromLTRB(100.0, 0.0, 0.0, 0.0),
                itemExtent: 200.0,
                itemCount: snapshot.data.documents.length,
                itemBuilder: (BuildContext context, int index) {
                  final DocumentSnapshot document =
                      snapshot.data.documents[index];

                  return Container(
                    padding: EdgeInsets.fromLTRB(0.0, 300.0, 0.0, 450.0),
                    child: ListTile(
                      contentPadding: selectedIndex == index
                          ? EdgeInsets.all(0.0)
                          : EdgeInsets.all(25.0),
                      title: Image.network(
                        document['number'],
                      ),
                      selected: selectedIndex == index,
                      onTap: () {
                        Firestore.instance.runTransaction((transaction) async {
                          DocumentSnapshot freshSnap =
                              await transaction.get(document.reference);
                          await transaction.update(freshSnap.reference, {
                            'vote': freshSnap['vote'] + 1,
                          });
                        });

                        setState(() {
                          selectedIndex = index;
                        });
                      },
                    ),
                  );
                },
              );
            }));
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...