ЗАГРУЗИТЕ ЛОКАЛЬНЫЙ ФАЙЛ JSON С ПОМОЩЬЮ КОНСТРУКТОРА БУДУЩЕГО

#json #database #flutter #local

Вопрос:

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

 class _PlantPageState extends Statelt;PlantPagegt; {    Listlt;Plantsgt; planty = [];  Future getPlantsLocally() async {  final assetBundle = DefaultAssetBundle.of(context);  final data = await assetBundle.loadString('assets/plants.json');  final body = await json.decode(data);   var list = body["plant"] as Listlt;dynamicgt;;  setState(() {  planty = list.map((e) =gt; Plants.fromJson(e)).toList();   });  }    @override  Widget build(BuildContext context) =gt; Scaffold(  body: FutureBuilder(  future: getPlantsLocally(),  builder:(context, snapshot) {  switch (snapshot.connectionState) {  case ConnectionState.waiting:  return Center(child: CircularProgressIndicator());  default:  if (planty.length gt; 0) {  return Container(  height: 200,  child: ListView.builder(  itemCount: planty.length,  itemBuilder: (BuildContext context, index) {  return Card(  margin: EdgeInsets.all(15.0),  color: Colors.green[600],  child: ListTile(  title: Text(planty[index].name?? 'name',),  ),  );  }  ),  );  }  else {  return Center(child: Text('Error Error'),);  }  }  

это образец моей базы данных . я уже анализирую его с помощью генератора классов данных. неужели моя база данных не в порядке ? или мой файл для извлечения ?

 {  "plant":  [  {  "id": "1",  "name": "ALOCASIA-ELEPHANT EARS",  "image": "assets/images/ALOCASIA.jpeg",  "descript": "Alocasia plant (Alocasia mortfontanensis) is a hybrid species between Alocasia longiloba and Alocasia sanderiana. The Alocasia is known for its large leaves and wide variety of cultivars within the species. Alocasia plant is native to tropical Asia and Australia.",  "charac": [{  "planttype": "Herb",  "lifespan": "Perennial",  "bloomtime": "Spring, summer",  "plantheight": "1-2 feet",  "spread": "7 feet",  "leafColor": "PurpleGreenGreySilver"  }  ],  "scienclass": [  {  "genus": "Alocasia - Elephant's-ears, Taro, Kris plant",  "family": " Araceae - Arum, Aroids ",  "order": "Alismatales - Water plantains and allies",  "classes": "Liliopsida - Monocotyledons, Monocots ",  "phylum":"Tracheophyta - Vascular plants, Seed plants, Ferns, Tracheophytes"  }  ],  "pestdesease": " Stem rot, crown rot, root rot, leaf spot, mealy bugs, aphids",  "requirements":[{  "difficultyrating": "Alocasia plant is super easy to take care of, with resistance to almost all pests and diseases. It is a perfect option for gardeners with brown thumbs.",  "sunlight": "Full shade to partial sun",  "hardenesszone": " 9-11 ",  "soil": "Loose, fertile and well-drained humus soil"  }  ],  "careguide":[  {  "water": "Moisture-loving, keep the soil moist but do not let water accumulate.",  "fertilizaton": "Fertilization once in spring. ",   "pruning": "Fertilization once in spring. ",   "plantingtime": "Spring, summer, autumn ",  "propagation": "Division ",  "pottingsuggestion": " Needs excellent drainage in pots."  }  ],  "toxictohuman": "Is the alosdadadsadadsa",  },  

как вы думаете, ребята, в чем ошибка этого потока ?

Ответ №1:

Вам нужно изменить свой getPlantsLocally() , чтобы вернуть список, и futurBuilder вы должны использовать getPlantsLocally() возвращенный список, а не локальную переменную planty . надеюсь, это сработает.

 class _PlantPageState extends Statelt;PlantPagegt; {    Futurelt;Listgt; getPlantsLocally() async {  final assetBundle = DefaultAssetBundle.of(context);  final data = await assetBundle.loadString('assets/plants.json');  final body = await json.decode(data);   var list = body["plant"] as Listlt;dynamicgt;;  var planty = list.map((e) =gt; Plants.fromJson(e)).toList();   return planty;  }    @override  Widget build(BuildContext context) =gt; Scaffold(  body: FutureBuilder(  future: getPlantsLocally(),  builder:(context, snapshot) {  switch (snapshot.connectionState) {  case ConnectionState.waiting:  return Center(child: CircularProgressIndicator());  default:  if (snapshot.hasData amp;amp; snapshot.data!.length gt; 0) {  return Container(  height: 200,  child: ListView.builder(  itemCount: snapshot.data!.length,  itemBuilder: (BuildContext context, index) {  return Card(  margin: EdgeInsets.all(15.0),  color: Colors.green[600],  child: ListTile(  title: Text(snapshot.data[index].name?? 'name',),  ),  );  }  ),  );  }  else {  return Center(child: Text('Error Error'),);  }  }  

Комментарии:

1. всем привет. я попробовал твою идею. снимок.данные! [индекс].имя. это для названия. Но когда я запускаю систему. он показывает остальное, что является ошибкой Ошибка

Ответ №2:

 class PlantsApi {  static Futurelt;Listlt;Plantgt;gt; getPlantsLocally(BuildContext context) async {  final assetBundle = DefaultAssetBundle.of(context);  final data = await assetBundle.loadString('assets/plants.json');  final body = await json.decode(data);  var list = body["plant"] as Listlt;dynamicgt;;  var planty = list.map((e) =gt; Plant.fromMap(e)).toList();  return planty;  } }  

проблема заключается в извлечении данных. Спасибо. я удаляю растение из списка = []