Flutter - DrowpdownMunu Элементы, не попадающие в список - PullRequest
0 голосов
/ 27 февраля 2019

Я застрял с DrowdownButton, который не заполняет никакие данные.

Он заполняется из списка, переданного с предыдущего экрана.

Моя отладка показывает, что в списке есть данные, которые можно проанализировать.Выходные данные просто создают пустой DropdownButton.

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'menuList.dart';
import 'package:flutter_calendar_carousel/flutter_calendar_carousel.dart' show CalendarCarousel;

class OrderInitiate extends StatefulWidget {
  final List childData;

  OrderInitiate(this.childData);

  @override
  _OrderInitiateState createState() => new _OrderInitiateState();
}

class _OrderInitiateState extends State<OrderInitiate> {

  double buttonWidth = 200.0;
  DateTime selectedDate = DateTime.now();
  DateTime tempDate = DateTime.now();

  @override
  void initState() {
    print("OrderInitiate: initstate begin");
    print("ChildData: " + widget.childData.toString());
  }

  _dateSelected(date) {
    setState(() {
      selectedDate = date;
    });
  }


  String itemSel;

  @override
  Widget build(BuildContext context) => new Scaffold(

        appBar: new AppBar(title: new Text("Start an Order"), actions: 
        <Widget>[
        ]),
        body: new Column(
          children: <Widget>[
            Center(
              child: Column(
                mainAxisSize: MainAxisSize.min,
                children: <Widget>[
                  Text("Select child:"),
                  new DropdownButton<String>(
                    value: itemSel,
                    onChanged: null,
                    hint: Text("Select child"),
                    items:
                      widget.childData.map ((item) {
                      print("DropDownButton item: " + item.toString());
                      print("Child Id: " + item['ChildId']);
                      return new DropdownMenuItem<String>(
                          value: item['ChildId'],
                          child:
                          new Text("ChildFirstName"),
                      );
                    }).toList(),
                  ),

                  Text("${selectedDate.toLocal()}"),
                  SizedBox(
                    height: 20.0,
                  ),
                ],
              ),
            ),
            SizedBox(
              width: buttonWidth,
              child: RaisedButton(
                onPressed: () => _StartOrder(this.context),
                child: Text('Start Order'),
              ),
            ),
          ],
        ),
      );

  _StartOrder(BuildContext context) {
    Navigator.push(
        context,
        new MaterialPageRoute(
            builder: (BuildContext context) => new MenuList()));
  }
}

Мои строки отладки дают следующий вывод:

Элемент DropDownButton: {ParentId: 4, ParentLastName: testparent, ParentFirstName: TestParentSur,ParentUserName: TestParent, ChildId: 3, ChildLastName: Test2Last, ChildFirstName: Test2, ChildUserName: test2}

Child Id: 3

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

Я безуспешно изучил многочисленные учебники по созданию списков и предметов и предметы стекового потока.

1 Ответ

0 голосов
/ 27 февраля 2019

Попробуйте изменить значение onChanged вашего DropDownButton на:

onChanged: (int i) {
  setState(() => itemSel = i);
},

Если onChanged == null, то поле по существу отключено, поэтому, хотя ваши данные могут быть там, оно ничего не отображаеткогда вы нажмете это.Выбранное значение поля также не обновляется автоматически, поэтому важно установить состояние с новым выбранным значением.

...