Как я могу добавить флажок для одного элемента в flutter

# #android #database #firebase #flutter #dart

Вопрос:

Итак,в принципе, у меня проблема с флажком, я на самом деле создаю приложение todolist, поэтому мне нужен виджет флажка, чтобы проверять все действия, с которыми вы закончили. Но есть проблема, когда я хочу проверить одно действие, все действия проверяются одновременно. Я уже прочитал все на странице flutter виджета, но я не понимаю, кто я могу просто проверить один элемент, не определив его заранее. Будет действительно здорово, если вы сможете мне в этом помочь, спасибо.

 import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart';   class Home extends StatefulWidget {  const Home({Key? key}) : super(key: key);   @override  _HomeState createState() =gt; _HomeState();  }   class _HomeState extends Statelt;Homegt; {  List todos = [];  String input = ""; @override bool checkedValue = false; void initState() { super.initState(); todos.add("Item1"); todos.add("Item2"); todos.add("Item3"); todos.add("Item4");   }  @override Widget build(BuildContext context) { return Scaffold(  appBar: AppBar(  title: Text("TASKS",style: TextStyle(  fontFamily: "BaksoSapi",  ),),  ),  floatingActionButton: FloatingActionButton(  onPressed: () {  showDialog(context: context, builder: (BuildContext context){  return AlertDialog(  title: Text("Add Todolist !"),  content: TextField(  onChanged: (String value){  input = value;  },  ),  actions: lt;Widgetgt;[  FlatButton(onPressed: (){setState(() {  todos.add(input);  });   }, child: Text("Add"))  ],  );  });  },  child: Icon(Icons.add,  color: Colors.white,  ),  ),  body: ListView.builder(  itemCount: todos.length,  itemBuilder:(BuildContext context,int index){  return Dismissible(key: Key(todos[index]),  child: Card(  elevation: 4,  margin: EdgeInsets.all(8),  shape: RoundedRectangleBorder(  borderRadius: BorderRadiusDirectional.circular(8)  ),  child: CheckboxListTile(  title: Text(todos[index]),  controlAffinity: ListTileControlAffinity.leading,  activeColor: Colors.redAccent,  value: checkedValue,onChanged: (newValue){  setState(() {  checkedValue = newValue!;  });  },  ),  ),);  },  )  );  

Ответ №1:

хорошо, итак, вы объявили a List для хранения ваших товаров и a bool checkedValue для хранения независимо от того, проверены ли ваши ценные товары или нет.

Но очевидная проблема заключается в том, что вы объявляете только ОДИН bool, но у вас, возможно, бесконечное количество элементов. Как ты думаешь, что произойдет, когда ты изменишь одно значение??

Самый простой способ исправить это-просто сделать bool списком, как это:

 Listlt;boolgt; checkedValues = [];  

затем всякий раз, когда вы добавляете новый элемент в свой список элементов, вам нужно добавить false его в список checkedValues .

 todos.add("Item1"); todos.add("Item2"); todos.add("Item3"); todos.add("Item4"); checkedValues.addAll([false, false, false, false]);  

Затем вы просто меняете значение и изменяете свойства, как это:

 value: checkedValues[index],onChanged: (newValue){  setState(() {  checkedValues[index] = newValue!;  });  

В этом подходе есть одна небольшая проблема, которая заключается в том, что если вы забудете добавлять bool каждый раз, когда добавляете элемент задачи, ваше приложение не будет работать. Чтобы исправить это, вы можете написать класс, содержащий как строку, так и значение bool, и просто иметь список этого.