Flutter: логическое значение в флажке не изменяется - PullRequest
0 голосов
/ 20 февраля 2020

Я хочу создать список флажков, который увеличивается, когда я нажимаю кнопку добавления. Но флажок не работает, поэтому я печатаю логическое значение onChanged в флажке и значение флажка, я обнаружил, что оба они одинаковы, кроме первого нажатия (флажок все еще не работает). Я изменил значение флажка на 'true', но результат был таким же. Пожалуйста, помогите мне сделать правильный код. Я скопировал весь свой код, пожалуйста, проверьте функцию addList.

import 'package:flutter/material.dart';

void main() => runApp(FirstPage());

class FirstPage extends StatefulWidget {
  @override
  _FirstPageState createState() => _FirstPageState();
}

class _FirstPageState extends State<FirstPage> {
  List<bool> listBool = [];
  List<Widget> listWidget = [];

  void addList(Text text) {
    int listLength = listWidget.length;
    listBool.add(false);

    listWidget.add(
      Row(
        children: <Widget>[
          Checkbox(
              value: listBool[listLength],
              onChanged: (bool newValue) {
                setState(() {
                  print(newValue);
                  print(listBool[listLength]);
                  listBool[listLength] = newValue;
                });
              }),
          text,
        ],
      ),
    );
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('toDoList'),
          backgroundColor: Colors.teal,
        ),
        body: SafeArea(
          child: Column(
            children: <Widget>[
              Row(
                children: <Widget>[
                  Container(
                    height: 100,
                    width: 100,
                    color: Colors.red,
                  ),
                  Container(
                    width: 100,
                    height: 100,
                    color: Colors.blue,
                  ),
                ],
              ),
              Expanded(
                  child: ListView.builder(
                      itemCount: listWidget.length,
                      itemBuilder: (BuildContext ctxt, int index) {
                        return listWidget[index];
                      })),
              FloatingActionButton(
                child: Icon(Icons.add),
                onPressed: () => addList(Text('shopping')),
              )
            ],
          ),
        ),
      ),
    );
  }
}

1 Ответ

4 голосов
/ 20 февраля 2020

Пожалуйста, проверьте код ниже и проверьте вывод

import 'package:flutter/material.dart';

class FirstPage extends StatefulWidget {
  @override
  _FirstPageState createState() => _FirstPageState();
}

class _FirstPageState extends State<FirstPage> {
  List<bool> listBool = [];
  List<Widget> listWidget = [];

  void addList() {
    setState(() {
      listBool.add(false);
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('toDoList'),
          backgroundColor: Colors.teal,
        ),
        body: SafeArea(
          child: Column(
            children: <Widget>[
              Row(
                children: <Widget>[
                  Container(
                    height: 100,
                    width: 100,
                    color: Colors.red,
                  ),
                  Container(
                    width: 100,
                    height: 100,
                    color: Colors.blue,
                  ),
                ],
              ),
              Expanded(
                  child: ListView.builder(
                      itemCount: listBool.length,
                      itemBuilder: (BuildContext ctxt, int index) {
                        return Row(
                          children: <Widget>[
                            Checkbox(
                                value: listBool[index],
                                onChanged: (bool newValue) {
                                  setState(() {
                                    print(newValue);
                                    print(listBool[index]);
                                    listBool[index] = newValue;
                                  });
                                }),
                            Text('shopping'),
                          ],
                        );
                      })),
              FloatingActionButton(
                child: Icon(Icons.add),
                onPressed: () => addList(),
              )
            ],
          ),
        ),
      ),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...