【问题标题】:Flutter RadioListTile is not checking available optionFlutter RadioListTile 未检查可用选项
【发布时间】:2021-12-28 22:17:16
【问题描述】:

在我的代码中,我有一个从 StreamBuilder 返回的 RadioListTile 列表,显示正确,但在单击选项时未检查。

StreamBuilder<List<Endereco>>(
                       stream: noteStream(uid),
                       builder: (context,snapshot){
                          if(!snapshot.hasData){
                              return Center(child: CircularProgressIndicator(),);
                          } else if(snapshot.hasError){
                              return Center( child: Text("An Error Occured"));
                          }
                          else if(snapshot.hasData){
                           
                            return Column(
      children: [
        Column(
         children: snapshot.data!.map((endereco){
           // int index = snapshot.data!.indexOf(endereco);
           return RadioListTile<Endereco>(
             value:  endereco,
             groupValue: selectedEndereco,
             title: Text(endereco.rua + ", nº " + endereco.numero.toString() +", "+ endereco.complemento),
             subtitle: Text(endereco.bairro + " - "+ endereco.cidade + "-"+ endereco.estado + " "+ endereco.cep),
             onChanged: (currentEndereco) {
               setState((){
                 selectedEndereco = currentEndereco;
                 });
               print("Current $selectedEndereco");
             },
             activeColor: kPrimaryColor,
             selected: selectedEndereco == endereco,
           );
         }).toList()
        ),
Stream<List<Address>> noteStream(String uid){

试试{ return _db.collection("users").doc(uid).collection("address").snapshots().map((address){ 最终列表地址FromFirestore = []; for(final DocumentSnapshot> doc in address.docs){ addressFromFirestore.add(Address.fromDocumentSnapshot(doc: doc)); } 返回地址FromFirestore; }); }捕捉(e){ 重新抛出; } }

【问题讨论】:

  • 你能展示一下Endereco类的实现吗?

标签: flutter


【解决方案1】:

这取决于您在哪里初始化 selectedEndereco 以及您是如何做到的。因为如果你例如在开始时用一个值初始化它,那么你调用 setState 它将再次在开始时重置初始化值

class _MyHomePageState extends State<MyHomePage> {
  List<Endereco> enderecos = [
    Endereco(name: 'Endereco1', id: 1),
    Endereco(name: 'Endereco1', id: 2)
  ];
  late Endereco selectedEndereco;
  @override
  void initState() {
    super.initState();
    selectedEndereco = Endereco(name: 'Endereco1', id: 2);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          children: enderecos
              .map((e) => RadioListTile<Endereco>(
                    value: e,
                    groupValue: selectedEndereco,
                    title: Text(e.name),
                    onChanged: (currentEndereco) {
                      setState(() {
                        selectedEndereco = currentEndereco!;
                      });

                      print("Current $selectedEndereco");
                    },
                    activeColor: Colors.red,
                    selected: selectedEndereco == e,
                  ))
              .toList(),
        ),
      ),
    );
  }
}

【讨论】:

    猜你喜欢
    • 2021-01-09
    • 2021-03-08
    • 2021-05-26
    • 2021-02-09
    • 2016-09-25
    • 1970-01-01
    • 2011-04-14
    • 2011-03-14
    • 1970-01-01
    相关资源
    最近更新 更多