Flutter: Как установить условия для динамических c данных (String, int, double) из Json - PullRequest
0 голосов
/ 12 июля 2020

У меня есть JSON вот так (ссылка API)

[
  {
    "value": 12
  },
  {
    "value": 12.0
  },
  {
    "value": "twelve"
  }
]

Как установить условия данных на:

  • Если значение int then => Text('Int ${_value[i].value.toString()}')
  • Если значение double then => Text('Double ${_value[i].value.toString()}')
  • Если значение String then => Text('String ${_value[i].value}')

будет отображаться как изображение ниже введите описание изображения здесь

поэтому, пожалуйста, помогите мне, это файл модели:

import 'dart:convert';

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

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

class Value {
  Value({
    this.value,
  });

  dynamic value;

  factory Value.fromJson(Map<String, dynamic> json) => Value(
    value: json["value"],
  );

  Map<String, dynamic> toJson() => {
    "value": value,
  };
}

, а это главный файл:

import 'package:ask/model/value_model.dart';
import 'package:ask/services/value_services.dart';
import 'package:flutter/material.dart';

class Page4 extends StatefulWidget {
  @override
  _Page4State createState() => _Page4State();
}

class _Page4State extends State<Page4> {
  List<Value> _value = [];
  @override
  void initState() {
    super.initState();

    ValueServices.getValue().then((value) {
      setState(() {
        _value = value;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Value')),
      body: Column(
        children: [
          for (int i = 0; i < _value.length; i++)
            // How to set Conditions here
        ],
      ),
    );
  }
}

1 Ответ

0 голосов
/ 12 июля 2020

Используйте свойство getTimeType с ListView.builder. A для l oop не подойдет.

body: ListView.builder(
        itemCount: _value.length,
        builder: (context, pos){
                    var typeName = getTypeName(_value[pos]['value]).toString();
                    return Text("$typeName $_value[pos]['value]");
                  }
        ),

...