从JSON获取数据并添加到initState()的列表中

时间:2019-05-17 14:25:00

标签: dart flutter

我下面有JSON文件。

Data.json

[{
    "rownum": 1,
    "total": 10.99793271,
    "total2": 106.65666751,
}, {
    "rownum": 2,
    "total": 10.99793271,
    "total2": 106.65666751,
}]

以及class ItemList

List <Item> item;
class Item {
  String row;
  String total;
  String total2;
  Student({this.row, this.total, this.total2});
  }

如何从data.jsonadd将数据获取到List <Item> item上的initState()中?

class MyAppState extends State<MyApp> {
  @override
  void initState() {
  Future<String> _loadAStudentAsset() async {
  return await rootBundle.loadString('assets/data.json');
}
//....some code to add value into list
    super.initState();
  }

2 个答案:

答案 0 :(得分:1)

该解决方案对您也有效:

Flutter: How to display a short text file from assets on screen of phone?

如果我们用相同的模板制作另一个示例:

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart' show rootBundle;

void main() {
  runApp(Test());
}

class Test extends StatefulWidget {
  @override
  _TestState createState() => _TestState();
}

class _TestState extends State<Test> {
  Future _future;

  Future<String> loadString() async =>
      await rootBundle.loadString('assets/data.json');

  @override
  void initState() {
    _future = loadString();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: FutureBuilder(
          future: _future,
          builder: (context, AsyncSnapshot snapshot) {
            if (!snapshot.hasData) {
              return Text('Loading...');
            }
            List<dynamic> parsedJson = jsonDecode(snapshot.data);
            items = parsedJson.map((element) {
              return Item(
                row: element['rownum'].toString(),
                total: element['total'].toString(),
                total2: element['total2'].toString(),
              );
            }).toList();
            ;

            return ListView.builder(
              itemCount: items.length,
              itemBuilder: (context, index) {
                final item = items[index];
                return Column(
                  children: <Widget>[
                    Text(item.row),
                    Text(item.total),
                    Text(item.total2),
                  ],
                );
              },
            );
          },
        ),
      ),
    );
  }
}

List<Item> items;

class Item {
  String row;
  String total;
  String total2;

  Item({this.row, this.total, this.total2});
}

答案 1 :(得分:0)

class Item {
  static final String db_row = "rownum";
  static final String db_total = "total";
  static final String db_total2 = "total2";

  int row;
  double total;
  double total2;

  Item({this.row, this.total, this.total2});

  Item.fromMap(Map map) {
    this.row = map[Item.db_row];
    this.total = map[Item.db_total];
    this.total2 = map[Item.db_total2];
  }

  Map toMap() =>
      {Item.db_row: row, Item.db_total: total, Item.db_total2: total2};

  static List<Item> fromMapList(mapList) {
    List<Item> items = new List();
    new List.from(mapList).forEach((mapItem) {
      items.add(Item.fromMap(mapItem));
    });
    return items;
  }
}

List <Item> items = Item.fromMapList(await rootBundle.loadString('assets/data.json'));