#flutter #dart #google-cloud-firestore
#flutter #dart #google-облако-firestore
Вопрос:
Как я могу получить значение и идентификатор владельца коммутатора listview.builder
, я хотел создать коллекцию firebase, в которой будут сохранены значения, и для выполнения этой работы я создал контейнер, который содержит имя и а switch
, и я создал listview.builder
список всех документов, поэтому, когда я нажимаю отправитьон button
отправит все значения переключателя с их идентификаторами
вот listview.builder
Column(
children: [
Expanded(
child: ListView.builder(
itemCount: posts.length,
itemBuilder: (context, index) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
child: Padding(
padding: const EdgeInsets.fromLTRB(6, 3, 8, 3),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Switch(value: null, onChanged: null),
Text(posts[index].data()["fname"])),
],
),
),
),
);
},
),
),
RaisedButton.icon(
label: Text('Submit', style: TextStyle(color: Colors.white),),
onPressed: () {},
),
],
),
Ответ №1:
Вы можете отслеживать текущие состояния переключателей вне метода сборки с помощью карты. Используйте post.data()[«fname»] в качестве ключа
var switchStates = {};
@override
void initState() {
super.initState();
for (var post in posts) {
switchStates[post.data()["fname"]] = false;
}
}
void onSwitchChanged(var key, var newValue)
{
switchStates[key] = newValue;
}
А затем в ListView
Switch(value: null, onChanged: (value) => onSwitchChanged(posts[index].data()["fname"], value);)
Наконец, вы можете получить доступ к идентификаторам и значениям с помощью карты switchStates.
var keys = switchStates.keys;
var values = switchStates.values; //Use them in onPressed
Комментарии:
1.
Failed assertion: boolean expression must not be null
я получаю эту ошибку на коммутаторе2. и как я могу установить данные с ключом в качестве поля и значением в качестве значения в firestore
3. Переключатель(значение: false, OnChanged: (значение) => onSwitchChanged(posts[index].data()[«fname»], значение);)
4. когда я делаю его ложным, значение вообще не может быть изменено
5. Вы правы. Определите переменную bool вне конструктора и передайте ее в value: . Не забудьте обновить его значение в методе OnChanged (switchVar = newValue)