Как анализировать массив json в dart - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь сделать игру с Flutter. Для этого у меня есть много данных в приложении, хранящихся в json (заряд. json). Я хочу, чтобы в соответствии с диапазоном, выбранным пользователем, просмотреть мой json, сравнить различные нагрузки, которые имеют желаемый диапазон (пример 800 м), и восстановить всю информацию о нагрузке, которая имеет желаемый диапазон и увеличение, наиболее близкое к 1100 при этом оставаясь превосходным.

Понятия не имею, как это сделать ...

Вот мой json:

{
    "ammo_1" : [
        {
            "range": 800,
            "increase": 1000,
            "speed" : 10
        },
        {
            "range": 850,
            "increase": 1100,
            "speed" : 23
        }
    ],
    "ammo_2" : [
        {
            "range": 800,
            "increase": 1150,
            "speed" : 12
        },
        {
            "range": 850,
            "increase": 1200,
            "speed" : 25
        }
    ]
}

Вот мои models.dart:

class Charge {

  final int range;
  final int increase;
  final int speed;

  Charge({this.range, this.increase, this.speed});

  factory Charge.fromJson(Map<String, dynamic> json){
    return Charge(
        range: json['range'] as int,
        increase: json['increase'] as int,
        speed: json['speed'] as int,
    );
  }
}

Здесь home.dart:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'dart:convert';
import 'dart:async';
import 'package:mortierapp/models/models.dart';

class Home extends StatefulWidget {
  Home({Key key, this.title}) : super(key: key);
  final String title;

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

class _HomeState extends State<Home> {

  Future<String> loadChargeFromAssets() async{
    return await rootBundle.loadString('json/charge.json');
  }

  Future loadCharge() async{
    String jsonString = await loadChargeFromAssets();
    final jsonResponse = json.decode(jsonString);
    Charge charge = Charge.fromJson(jsonResponse);
    print(jsonResponse);

    print('increase ${charge.increase}');
  }


  @override
  void initState(){
    super.initState();
    loadCharge();
  }

  @override
  Widget build(BuildContext context) {

    return GestureDetector(
        onTap: (() => FocusScope.of(context).requestFocus(FocusNode())),
        child: Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: <Widget>[
                TextField(
                  keyboardType: TextInputType.number,
                  onChanged: (String string){
                    setState(() {
                    });
                  },
                  decoration: InputDecoration(
                      labelText: "range",
                      hintText: "Enter a range in meter"
                  ),
                ),
              ],
            ),
          ),
        )
    );
  }

}

Для моего примера, если я выберу 800 м, он должен увидеть, что есть боеприпасы 1 и 2, которые имеют этот диапазон, но он должен вернуть мне это боекомплект 2, потому что увеличивается на 1150, это значение, наиболее близкое к 1100 к лучшему. Поэтому я должен иметь доступ ко всем его скоростным характеристикам,…

Подходит ли моя структура json для этого?

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