首页 > 解决方案 > 尝试在颤振中使用已映射的json列表实现多选

问题描述

我需要同样的帮助实际上,我想为我的颤振项目使用多选。我已经有了 JSON-map 列表形式的项目。但我不知道如何做到。例如在一个单独的页面上,我创建了一个角色列表视图。在新页面上,我想在多选中获取角色列表以发送通知

我的角色存储库-

Future<Stream<Roles>> getRoleslist() async {
  final String accessToken = '${currentUser.value.accesstoken}';
  final url = '$api/role_list';
  Map<String, dynamic> _queryParams = {'access_token': accessToken};
  var uri = Uri.parse(url).replace(queryParameters: _queryParams);
  try {
    final client = new http.Client();
    final streamedRest = await client.send(http.Request('post', uri));
    return streamedRest.stream
        .transform(utf8.decoder)
        .transform(json.decoder)
        .map((data) => Helper.getdata(data))
        .expand((data) => (data as List))
        .map((data) => Roles.fromJSON(data));
  } catch (e) {
    print(CustomTrace(StackTrace.current, message: url.toString()).toString());
    return new Stream.value(new Roles.fromJSON({}));
  } }

我的榜样——

class Roles {
  String roleslack;
  String rolecode;
  String label;
  String status;
  String createdby;
  String updateby;
  Roles();
  Roles.fromJSON(Map<String, dynamic> jsonMap) {
    try {
      roleslack = jsonMap['slack'].toString();
      rolecode = jsonMap['role_code'].toString();
      label = jsonMap['label'].toString();
      status = jsonMap['status']['label'].toString();
      createdby = jsonMap['created_by']['fullname'].toString();
      updateby = jsonMap['updated_by']['fullname'].toString();
    } catch (e) {
      roleslack = '';
      rolecode = '';
      label = '';
      status = '';
      createdby = '';
      updateby = '';

      print(e);
    }} }

和角色控制器 -

List<Roles> roles = [];
  GlobalKey<ScaffoldState> scaffoldKey;

  RolesController() {
    this.scaffoldKey = new GlobalKey<ScaffoldState>();
  }

  void listRoles({String message}) async {
    final Stream<Roles> stream = await getRoleslist();
    stream.listen((Roles _roles) {
      setState(() => roles.add(_roles));
    }, onError: (a) {
      print(a);
      // ignore: deprecated_member_use
      scaffoldKey?.currentState?.showSnackBar(SnackBar(
        content: Text('Verify your internet connection'),
      ));
    }, onDone: () {
      if (message != null) {
        // ignore: deprecated_member_use
        scaffoldKey?.currentState?.showSnackBar(SnackBar(
          content: Text(message),
        ));
      }
    });
  }

我对如何实现已经映射的 Jason 列表来进行多选感到非常困惑。

 class Animal {
      final int id;
      final String name;
     Animal({
        this.id,
        this.name,
      });
    }
  class _MyHomePageState extends State<MyHomePage> {
      static List<Animal> _animals = [
        Animal(id: 1, name: "Lion"),
        Animal(id: 2, name: "Flamingo"),
        Animal(id: 3, name: "Hippo"),
        Animal(id: 4, name: "Horse"),
        Animal(id: 5, name: "Tiger"),
        Animal(id: 6, name: "Penguin"),
        Animal(id: 7, name: "Spider"),
        Animal(id: 8, name: "Snake"),
        Animal(id: 9, name: "Bear"),
        Animal(id: 10, name: "Beaver"),
        Animal(id: 11, name: "Cat"),
        Animal(id: 12, name: "Fish"),
        Animal(id: 13, name: "Rabbit"),
        Animal(id: 14, name: "Mouse"),
        Animal(id: 15, name: "Dog"),
        Animal(id: 16, name: "Zebra"),
        Animal(id: 17, name: "Cow"),
        Animal(id: 18, name: "Frog"),
        Animal(id: 19, name: "Blue Jay"),
        Animal(id: 20, name: "Moose"),
        Animal(id: 21, name: "Gecko"),
        Animal(id: 22, name: "Kangaroo"),
        Animal(id: 23, name: "Shark"),
        Animal(id: 24, name: "Crocodile"),
        Animal(id: 25, name: "Owl"),
        Animal(id: 26, name: "Dragonfly"),
        Animal(id: 27, name: "Dolphin"),
      ];
      final _items = _animals
          .map((animal) => MultiSelectItem<Animal>(animal, animal.name))
          .toList();

我想将此静态动物定义列表转换​​为我已经映射的 JSON 角色列表

标签: fluttermulti-select

解决方案


推荐阅读