Я пытаюсь использовать флаттер для создания формы с переключателем, и она не работает. Ниже показан минимальный код.
Когда я предоставляю groupValue с помощью FutureBuilder, я не могу выбрать переключатель, отличный от значения по умолчанию, которое уже выбрано. Вероятно, это происходит потому, что setState каждый раз запускает FutureBuilder. Есть ли способ обойти это?
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
const appName = 'Radio Example';
void main() => runApp(MaterialApp(
title: appName,
home: MyHomePage(),
));
class MyHomePage extends StatefulWidget {
@override
MyHomePageState createState() => MyHomePageState();
}
class MyHomePageState extends State<MyHomePage> {
Future<int> getSelected() async {
return 1;
}
int selectedRadio;
setSelectedRadio(int val) {
setState(() {
selectedRadio = val;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(appName)),
body: Column(
children: <Widget>[
Expanded(
child: FutureBuilder(
future: getSelected(),
builder: (context, snapshot) {
var newData = snapshot.data;
if (newData == null) {
return Container(
child: Center(
child: Text('Loading...'),
),
);
} else {
selectedRadio = newData;
return ListView(
padding: EdgeInsets.all(24),
children: <Widget>[
Radio(
value: 0,
groupValue: selectedRadio,
onChanged: (val) {
//print("Radio activated");
setSelectedRadio(val);
},
),
Radio(
value: 1,
groupValue: selectedRadio,
onChanged: (val) {
//print("Radio activated");
setSelectedRadio(val);
},
),
RaisedButton(
child: Text("Save"),
onPressed: () {
print("Selected Radio: $selectedRadio");
})
],
);
}
})),
],
));
}
}