Не ставится галочка на CheckBoxListTile Flutter
Моя страница:
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'dart:ui';
import '../commons.dart';
import '../script.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
final GlobalKey<ScaffoldState> _homeScaffold = GlobalKey();
Column postsColumn = Column(children: []);
Column checkBoxesColumn = Column(children: [
Text('Categories',
textAlign: TextAlign.center,
style: TextStyle(color: Colors.white, fontSize: 20))
]);
@override
void setState(VoidCallback fn) {
super.setState(fn);
}
void initState() {
super.initState();
getPosts();
}
Widget build(BuildContext context) {
return Scaffold(
key: _homeScaffold,
drawer: commonDrawer,
endDrawer: commonEndDrawer,
appBar: commonAppBar(_homeScaffold, 'Home'),
body: ListView(
children: [
Categories(),
],
),
);
}
}
class Categories extends StatefulWidget {
@override
_CategoriesState createState() => _CategoriesState();
}
bool somebool = true;
class _CategoriesState extends State<Categories> {
dynamic columnCategories = Center(
child: Container(
width: 100, height: 100, child: CircularProgressIndicator()));
fetchCategories() async {
Column testColumn = Column(
children: [
Text('Categories',
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white, fontSize: 20, fontWeight: FontWeight.bold))
],
);
final response = await http.get(
Uri.parse(
'https://flutternerd.com/wp-json/wp/v2/categories?_embed&_fields=id,name'),
headers: {"Accept": "application/json"});
categories = jsonDecode(response.body);
for (var categ in categories) {
categ['checked']=false;
testColumn.children.add(CheckboxListTile(
title: Text(categ['name'],
style: TextStyle(color: Colors.white, fontSize: 17)),
value: categ['checked'],
onChanged: (bool value) {
setState(() {
categ['checked'] = categ['checked']?false:true;
});
}));
}
setState(() {
columnCategories = testColumn;
});
}
@override
void initState() {
super.initState();
fetchCategories();
}
Widget build(BuildContext context) {
return columnCategories;
}
}
Страница правильно получает категории через Wordpress REST API, проблема лишь в том, что при нажатии на checkbox вызывается функция onChanged (в виджете Categories()), но сама галочка не ставится. В чем проблема? Заранее спасибо!
Ответы (1 шт):
Автор решения: MiT
→ Ссылка
Вы не меняете состояние у categ['checked'] в onChanged, вот рабочий пример как это должно быть.
import 'package:flutter/material.dart';
Map<String, dynamic> categ = {'checked': false};
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: const Center(
child: MyStatefulWidget(),
),
),
);
}
}
class MyStatefulWidget extends StatefulWidget {
const MyStatefulWidget({Key key}) : super(key: key);
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
@override
Widget build(BuildContext context) {
return CheckboxListTile(
title: const Text('Animate Slowly'),
value: categ['checked'],
onChanged: (bool value) {
setState(() {
categ['checked'] = value;
});
},
secondary: const Icon(Icons.hourglass_empty),
);
}
}