这里缺少什么?颤振-单一选择

时间:2020-03-02 12:42:31

标签: flutter google-cloud-firestore radio-button

我正在创建测验应用,我想用单选答案提出一些问题, 这是现在的样子:

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 个答案:

答案 0 :(得分:1)

您可以只存储选定的索引,而不必使用布尔列表。

我使用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;
                        });
                      },
                    ),
                  );
                },
              );
            }));
  }
}