# #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, и просто иметь список этого.