好的,基本上我的復選框有這個問題,我實際上構建了一個 todolist 應用程式,所以我需要一個復選框小部件來檢查您完成的所有活動。但是有一個問題,當我想檢查一個活動時,所有活動都會同時檢查。我已經閱讀了小部件的顫振頁面上的所有內容,但我不明白我可以只檢查一個專案而不提前定義它。如果你能幫助我,那將非常感謝。
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key);
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
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: <Widget>[
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!;
});
},
),
),);
},
)
);
uj5u.com熱心網友回復:
好的,所以您宣告 aList來存盤您的專案,并宣告 a來存盤您bool checkedValue的值專案是否被檢查。
但顯而易見的問題是,您只宣告了一個 bool但您可能擁有無限數量的專案。當你改變 one 值時,你認為會發生什么?
解決此問題的最簡單方法是簡單地將 bool 設為串列,如下所示:
List<bool> checkedValues = [];
然后每當您將新專案添加到您的專案串列時,您都需要添加false到checkedValues.
todos.add("Item1");
todos.add("Item2");
todos.add("Item3");
todos.add("Item4");
checkedValues.addAll([false, false, false, false]);
然后,您只需更改 value 和 onChanged 屬性,如下所示:
value: checkedValues[index],onChanged: (newValue){
setState(() {
checkedValues[index] = newValue!;
});
這種方法有一個小問題,那就是如果每次添加待辦事項時忘記添加 bool,您的應用程式將無法運行。要解決這個問題,您可以撰寫一個包含字串和 bool 值的類,并且只有一個串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/374333.html
