flutter - 如何在 flutter 中保存状态选择的单选按钮列表?
flutter - how can save state selected radio button list in flutter?
我设法根据我拥有的数据显示了一个 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;
});
}
}
但是,我希望有一天 returns 到 Select Radio
页面时,初始化选定的无线电是最后一个数据(我稍后会保存 firebase)。我需要什么数据保存以保持最新数据作为初始化所选收音机?
您应该使用此 flutter 包 https://pub.dartlang.org/packages/shared_preferences 将 _radioValue
的值存储在 sharedPrefences
中,这样您就可以在应用程序关闭并重新打开后再次调用该值。 sharedPrefences
仅存储原始值,例如 int
和 String
,因此请考虑到这一点。
非常抱歉来不及了。
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});
}
我设法根据我拥有的数据显示了一个 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;
});
}
}
但是,我希望有一天 returns 到 Select Radio
页面时,初始化选定的无线电是最后一个数据(我稍后会保存 firebase)。我需要什么数据保存以保持最新数据作为初始化所选收音机?
您应该使用此 flutter 包 https://pub.dartlang.org/packages/shared_preferences 将 _radioValue
的值存储在 sharedPrefences
中,这样您就可以在应用程序关闭并重新打开后再次调用该值。 sharedPrefences
仅存储原始值,例如 int
和 String
,因此请考虑到这一点。
非常抱歉来不及了。
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});
}