Как заполнить раскрывающийся список на основе ввода в TextField во флаттере? - PullRequest
0 голосов
/ 20 октября 2019

Как заполнить выпадающий список на основе ввода в TextField во флаттере?

1 Ответ

0 голосов
/ 21 октября 2019

Разобрать строку json и затем заполнить ее строкой
Разобрать с помощью

 payload = payloadFromJson(jsonString)

Вы можете увидеть подробный класс, связанный с полным кодом

полный код

import 'package:flutter/material.dart';
// To parse this JSON data, do
//
//     final payload = payloadFromJson(jsonString);

import 'dart:convert';

List<Payload> payloadFromJson(String str) => List<Payload>.from(json.decode(str).map((x) => Payload.fromJson(x)));

String payloadToJson(List<Payload> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));

class Payload {
  String poId;
  String poNumber;
  String itemName;

  Payload({
    this.poId,
    this.poNumber,
    this.itemName,
  });

  factory Payload.fromJson(Map<String, dynamic> json) => Payload(
    poId: json["po_id"] == null ? null : json["po_id"],
    poNumber: json["po_number"] == null ? null : json["po_number"],
    itemName: json["item_name"] == null ? null : json["item_name"],
  );

  Map<String, dynamic> toJson() => {
    "po_id": poId == null ? null : poId,
    "po_number": poNumber == null ? null : poNumber,
    "item_name": itemName == null ? null : itemName,
  };
}

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

/// This Widget is the main application widget.
class MyApp extends StatelessWidget {
  static const String _title = 'Flutter Code Sample';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: _title,
      home: Scaffold(
        appBar: AppBar(title: const Text(_title)),
        body: MyStatefulWidget(),
      ),
    );
  }
}

class MyStatefulWidget extends StatefulWidget {
  MyStatefulWidget({Key key}) : super(key: key);

  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  Payload dropdownValue;
  static String jsonStr = '[{"po_id":"2","po_number":"4678576341","item_name":"Keyboard"},{"po_id":"3","po_number":"Mouse986786","item_name":"Mouse"}]';
  List<Payload> payloadList = payloadFromJson(jsonStr);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: <Widget>[
          Center(
            child: DropdownButton<Payload>(
              //isDense: true,
              hint: Text('Choose a po'),
              value: dropdownValue,
              icon: Icon(Icons.check_circle_outline),
              iconSize: 24,
              elevation: 16,
              style: TextStyle(color: Colors.deepPurple),
              underline: Container(
                height: 2,
                color: Colors.blue[300],
              ),
              onChanged: (Payload newValue) {
                setState(() {
                  dropdownValue = newValue;
                });
              },
              items:payloadList.map<DropdownMenuItem<Payload>>((Payload value) {
                return DropdownMenuItem<Payload>(
                  value: value,
                  child: Text(value.poNumber + ' '  + value.itemName),
                );
              }).toList(),
            ),
          ),
        ],
      ),
    );
  }
}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...