Список продолжает сбрасываться при флаттере

#android #mysql #flutter #dart

#Android #mysql #флаттер #dart

Вопрос:

я загружаю список из MySQL, начальная загрузка в порядке, все значения также отлично распечатываются и отображаются просто отлично.

I / flutter (30729): myvar2: [Member1, Member2, Member3, Member4]

Я использую https://github.com/danvick/flutter_form_builder аддон.

когда я перехожу от одного шага к другому, значения все еще находятся в полях, пока я не нажму / не выберу другой элемент, он сбрасывает значения на null и выбирает только одно. После того, как я повторно отправлю / повторно выберу те же или другие значения, список снова сохраняется просто отлично, пока я не выйду из области видимости и не выберу другого участника. Таким образом, значения сохраняются до тех пор, пока я не перейду из области видимости на другой шаг, и когда я выбираю любого из членов, список сбрасывается. Значения из выпадающего списка все еще присутствуют в site of view, поэтому в основном мне нужно их переписать, чтобы сохранить без нулей в mysql.

Я устанавливаю длину списка с предыдущего шага, поэтому после этого, даже если я что-то изменю, значение индекса может быть заменено.

Что я делаю не так?

I / flutter (30729): myvar2: [null, null, Member7, null]

   Widget myWidget(BuildContext context) {
    return FutureBuilder<List<String>>(
      future: _members,
      builder: (BuildContext context, AsyncSnapshot<List<String>> snapshot) {
        List<Widget> children;
        List<String> mylist = List<String>(data.myvar1.length);

        print("myvar2: "   data.myvar2.toString());

        if (snapshot.hasData) {
          if (getStr(data.myvar1) != null amp;amp; data.myvar1.length > 0) {
            children = <Widget>[
              for (var i = 0; i < data.myvar1.length; i  )
                Column(
                  children: <Widget>[
                    FormBuilderCheckboxList(
                      attribute: "my_checkbox",
                      initialValue: null,
                      options: [
                        FormBuilderFieldOption(
                            value: data.myvar1[i].toString()),
                      ],
                    ),
                    FormBuilderDropdown(
                      attribute: "my_dropdown",
                      decoration: InputDecoration(
                          labelStyle: TextStyle(fontSize: _labelFont)),
                      initialValue: getStr(data.myvar2[i]),
                      allowClear: true,
                      hint: Text('Pick member'),
                      items: snapshot.data
                          .map((members) => DropdownMenuItem(
                              value: members, child: Text("$members")))
                          .toList(),
                      onSaved: (str) {
                        mylist[i] = str;
                        data.myvar2 = mylist;
                      },
                      onChanged: (str) {
                        mylist[i] = str;
                        data.myvar2 = mylist;
                      },
                    ),
                  ],
                ),
            ];
          } else {
            children = <Widget>[Column(children: <Widget>[])];
          }
        } else if (snapshot.hasError) {
          children = <Widget>[
            Icon(
              Icons.error_outline,
              color: Colors.red,
              size: 60,
            ),
            Padding(
              padding: const EdgeInsets.only(top: 16),
              child: Text('Error: ${snapshot.error}'),
            )
          ];
        } else {
          children = <Widget>[
            Center(
              child: Container(
                child: CircularProgressIndicator(
                  strokeWidth: 5.0,
                ),
                margin: EdgeInsets.all(5),
                width: 60,
                height: 60,
              ),
            ),
            const Padding(
              padding: EdgeInsets.only(top: 16),
              child: Text('Loading...'),
            )
          ];
        }
        return Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: children,
          ),
        );
      },
    );
  }
  

Спасибо за ответ.

Комментарии:

1. Что за переменная «данные»?

2. статические данные MyData = MyData(); и следующие myvar1, myvar2 — это var