I am developing a Flutter App and I got the error The argument type 'bool?' can't be assigned to the parameter type 'bool'.
How I solve it?
Here is the part of my Code where the error appears. I also google the error and they said, I shound change the products[key],
to () => products[key],
. But it doesn´t help. If you need more information, please ask.
void main() => runApp(MaterialApp(home: ToDo()));
class ToDo extends StatefulWidget {
@override
_ToDoState createState() => _ToDoState();
}
class _ToDoState extends State<ToDo> {
Map<String, bool> products = {
'ToDo': false, 'Java': false, 'Python': false, 'Schule': false, 'Hi': false
};
void addItem(String item) {
setState(() {
products[item] = false;
});
Navigator.of(context).pop();
}
void deleteItem(String key) {
setState(() {
products.remove(key);
});
}
void toggleDone(String key) {
setState(() {
products.update(key, (bool done) => !done);
});
}
void newEntry() {
showDialog<AlertDialog>(
context: context,
builder: (BuildContext context) {
return AlertDialog(
content: TextField(
onSubmitted: addItem,
),
);
}
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
'ToDo-App',
style: TextStyle(
color: Colors.black,
fontSize: 18.0,
fontFamily: 'Opinehe',
fontWeight: FontWeight.w400,
decoration: TextDecoration.underline),
),
backgroundColor: Color.fromRGBO(35, 152, 185, 100),
),
body: ListView.builder(
itemCount: products.length,
itemBuilder: (context, i) {
String key = products.keys.elementAt(i);
return SingleToDo(
key,
products[key],
() => deleteItem(key),
() => toggleDone(key),
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: newEntry,
child: Icon(Icons.add),
),
);
}
}
class SingleToDo extends StatelessWidget {
final String title;
final bool done;
final Function remove;
final Function toggleDone;
const SingleToDo(this.title, this.done, this.remove, this.toggleDone);
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.symmetric(horizontal: 22),
child: ListTile(
contentPadding: EdgeInsets.symmetric(vertical: 8.0),
leading: Checkbox(
value: done,
onChanged: (bool? value) => toggleDone(),
),
title: Text(
title,
style: TextStyle(
fontSize: 18.0,
fontWeight: FontWeight.w300,
color: Colors.black54),
),
trailing: IconButton(
icon: Icon(Icons.delete_outline),
onPressed: () => remove(),
)
),
);
}
}
CodePudding user response:
From getting value can have null, on your mode class it is required non-nullable data.
You can check if value is null or not then pass value, or use default value if null like
products[key] ?? false,
Or use !
If you know that an expression never evaluates to null
products[key]!,
Check dart important-concepts