Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Flutter] Acceder à une instance

26 mai 2020 à 20:47:53

Bonjour,

Je suis nouveau sur Flutter et je galère un peu, j’espère trouver un peu d'aide...

Je fais un petit jeux de balistique qui gère des munitions avec des caractéristiques... toutes ses données sont stockées dans l'application en natif via un fichier json.

A partir de ce fichier je dois effectuer des opérations.

Pour l'instant j'arrive à récupérer mon fichier, mais je ne vois pas comment utiliser les données.

Voici mon fichier HomeController.dart

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

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

Future<ChargesList> loadCharge() async {
  String jsonString = await _loadChargeFromAssets();
  final jsonResponse = json.decode(jsonString);
  ChargesList charges = ChargesList.fromJson(jsonResponse);
  //print(prettyJson(charges));
  print(charges);
  //return new ChargesList.fromJson(jsonResponse);
}



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

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

class _HomeControllerState extends State<HomeController> {

  ChargesList _chargesList;
  bool _loaded = false;

  @override
  void initState() {
    super.initState();
    loadCharge().then((s) =>
        setState(() {
          _chargesList = s;
          _loaded = true;
        }));
  }

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
        onTap: (() => FocusScope.of(context).requestFocus(FocusNode())),
        child: Scaffold(
            appBar: AppBar(
              title: Text(widget.title),
            ),
            body:
            // if _loaded == true CODE sinon PRINT
              Center(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: <Widget>[
                    TextField(
                      keyboardType: TextInputType.number,
                        onChanged: (String string){
                          setState(() {
                        });
                      },
                      decoration: InputDecoration(
                        labelText: "range",
                        hintText: "Entrez une distance en mètres"
                      ),
                    ),
                  ],
                ),
              ),

    ));
  }

  prettyJson(List json) {
    // ** Documentation **
    // Permet de retourner un json plus lisible
    JsonEncoder encoder = new JsonEncoder.withIndent('  ');
    String newJson = encoder.convert(json);
    return newJson;
  }
}

Mon fichier charge.json

[
    {
        "type" : 1,
        "details" :[
            {
                "range": 800,
                "increase": 1101,
                "bond" : 10
            },
            {
                "range": 850,
                "increase": 800,
                "bond" : 23
            }
        ]
    },
    {
        "type" : 2,
        "details" :[
            {
                "range": 800,
                "increase": 1103,
                "bond" : 10
            },
            {
                "range": 850,
                "increase": 1200,
                "bond" : 23
            }
        ]
    }
]

Et ma classe Charge.dart

class ChargesList {
  final List<Charge> charges;

  ChargesList({this.charges});

  factory ChargesList.fromJson(List<dynamic> json) {
    List<Charge> charges = new List<Charge>();
    charges = json.map((i)=>Charge.fromJson(i)).toList();

    return new ChargesList(
        charges: charges
    );
  }
}

class Charge {
  final type;
  final List<Detail> details;

  Charge({this.type, this.details});

  factory Charge.fromJson(Map<String, dynamic> json) {
    var list = json['details'] as List;
    List<Detail> detailsList = list.map((i) => Detail.fromJson(i)).toList();

    return Charge(
        type: json['type'],
        details: detailsList
    );
  }
}

class Detail{
  final range;
  final increase;
  final bond;

  Detail({this.range, this.increase, this.bond});

  factory Detail.fromJson(Map<String, dynamic> json){
    return Detail(
      range: json['range'],
      increase: json['increase'],
      bond: json['bond']
    );
  }
}

Dans ma page HomeController.dart dans la fonction loadCharge, mon print('charges') me donne ceci :

I/flutter (32446): Instance of 'ChargesList'

Comment faire pour accéder à mes données afin de les utiliser dans mon application ?






  • Partager sur Facebook
  • Partager sur Twitter