颤动 - 如何在颤动中保存状态选择的单选按钮列表?

Posted

技术标签:

【中文标题】颤动 - 如何在颤动中保存状态选择的单选按钮列表?【英文标题】:flutter - how can save state selected radio button list in flutter? 【发布时间】:2019-07-01 07:11:09 【问题描述】:

我设法根据我拥有的数据显示了一个RadioListTile 列表。 请参阅下面的代码:

class ShipFromItemList extends StatefulWidget 
  @override
  _ShipFromItemListState createState() => _ShipFromItemListState();


class _ShipFromItemListState extends State<ShipFromItemList> 
  ShippingAddress _radioValue;

  @override
  Widget build(BuildContext context) 
    return ScopedModelDescendant<MainModel>(builder: (context, child, model) 
      return ListView(shrinkWrap: true, children: createRadioListUsers(model));
    );
  

  List<Widget> createRadioListUsers(MainModel model) 
    List<Widget> widgets = [];
    for (ShippingAddress shippingAddress in model.shipaddrsList) 
      widgets.add(Column(
        children: <Widget>[
          SizedBox(height: 10),
          Container(
            child: RadioListTile(
              value: shippingAddress,
              groupValue: _radioValue,
              title: Text(
                shippingAddress?.name ?? "",
                style: Theme.of(context).textTheme.title.copyWith(fontSize: 15),
              ),
              subtitle: Text(
                shippingAddress?.address ?? "",
                style:
                    Theme.of(context).textTheme.caption.copyWith(fontSize: 13),
              ),
              secondary: Text("14.728 mi",
                  style: Theme.of(context)
                      .textTheme
                      .caption
                      .copyWith(fontSize: 13)),
              onChanged: (currentUser) 
                print("Current User $currentUser?.name");
                setSelectedUser(currentUser);
              ,
              selected: _radioValue == shippingAddress,
              activeColor: Colors.orange,
            ),
          ),
          SizedBox(height: 10),
          Divider(
            height: 0.0,
          ),
        ],
      ));
    
    return widgets;
  

  setSelectedUser(ShippingAddress shippingAddress) 
    setState(() 
      _radioValue = shippingAddress;
    );
  

但是,我希望有一天返回Select Radio页面时,初始化选择的收音机是最后一个数据(我稍后会保存firebase)..我必须保存哪些数据才能保持最新数据初始化选定的收音机?

【问题讨论】:

【参考方案1】:

为时已晚深感抱歉。

 import 'package:flutter/material.dart';

class ShowSelectRadio extends StatefulWidget 
  @override
  ShowSelectRadiostate createState() 
    return new ShowSelectRadioState();
  


class ShowSelectRadioState extends State<ShowSelectRadio> 
  int _currVal = 1;
  String _currText = '';

  List<GroupModel> _group = [
    GroupModel(
      text: "Flutter.dev",
      index: 1,
    ),
    GroupModel(
      text: "Inducesmile.com",
      index: 2,
    ),
    GroupModel(
      text: "Google.com",
      index: 3,
    ),
    GroupModel(
      text: "Yahoo.com",
      index: 4,
    ),
  ];

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        title: Text("Show Selected Radio  Example"),
      ),
      body: Column(
        children: <Widget>[
          Expanded(
            child: Center(
              child: Text(_currText,
                  style: TextStyle(
                    fontSize: 20.0,
                    fontWeight: FontWeight.bold,
                  )),
            ),
          ),
          Expanded(
              child: Container(
            height: 350.0,
            child: Column(
              children: _group
                  .map((t) => RadioListTile(
                        title: Text("$t.text"),
                        groupValue: _currVal,
                        value: t.index,
                        onChanged: (val) 
                          setState(() 
                            _currVal = val.index;
                            _currText = t.text;
                          );
                        ,
                      ))
                  .toList(),
            ),
          )),
        ],
      ),
    );
  


class GroupModel 
  String text;
  int index;
  GroupModel(this.text, this.index);

【讨论】:

【参考方案2】:

你应该使用这个flutter包https://pub.dartlang.org/packages/shared_preferences将_radioValue的值存储在sharedPrefences中,它可以让你在应用程序关闭并重新打开后再次调用该值。 sharedPrefences 仅存储原始值,例如 intString,因此请考虑到这一点。

【讨论】:

嗯好吧,但我想在这种情况下使用 Firebase。好的,那我如何检查初始化选择的单选按钮是存储的数据?

以上是关于颤动 - 如何在颤动中保存状态选择的单选按钮列表?的主要内容,如果未能解决你的问题,请参考以下文章

颤动单选按钮的问题

颤动中的单选按钮活动颜色不起作用

通过颤动中的单选按钮更改提升的按钮颜色

如何在颤动中使用listview builder制作动态单选按钮?

如何在颤动中获得这种单选按钮

颤动验证单选按钮