#flutter #dart
Вопрос:
Всем привет, я новичок в flutter. Я пытаюсь получить данные из API. Когда я пытаюсь взять, я могу получить тело, но я не могу получить данные из него. Я получаю ошибку типа «I/flutter ( 8981): тип «Строка» не является подтипом типа «Описание»». Вот скриншот с моей консоли, когда я запускаю код: Вывод консоли
и вот мой код:
import 'dart:convert';
import 'dart:ffi';
import 'package:feedme_start/main.dart';
import 'package:feedme_start/model/AnaEkran_modeli.dart';
import 'package:feedme_start/model/branch_list.dart';
import 'package:feedme_start/model/restourantList.dart';
import 'package:feedme_start/widgets/Navigation_Drawer_Widget.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class restaurantPage extends StatefulWidget {
const restaurantPage({Key? key}) : super(key: key);
@override
_restaurantPageState createState() => _restaurantPageState();
}
final datas = [];
final datas_oneri = [];
class _restaurantPageState extends State<restaurantPage> {
int counter = 0;
var personalResu<
Future getapidata() async {
//orjinal api denemesi
String url =
"https://www.mobilonsoft.com/fpsapi/default.aspx?op=branch_listamp;firmuid=feedmekktcamp;device_id=web_20210813180900001amp;device_platform=4amp;lang=en";
try {
Response responsee = await get(Uri.parse(url)); //yanıtı alır
if (responsee.statusCode == 200) {
// yanıt onaylanırsa
Map sonuc = jsonDecode(responsee.body); //içeriği alır
print("apideki veriler ;");
print(sonuc);
**Branchlist liste = Branchlist.fromJson(sonuc);**
print(liste.result.branchList.toString());
} else {}
} catch (e) {
print(e.toString());
print("verileri çekerken hata oluştu");
}
}
@override
void initState() {
getapidata();
}
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
elevation: 0,
leading: IconButton(
onPressed: () {
Navigator.push(
context, MaterialPageRoute(builder: (context) => MyApp()));
},
icon: Icon(Icons.arrow_back)),
backgroundColor: Colors.red,
actions: <Widget>[
IconButton(
onPressed: () {
showSearch(context: context, delegate: dataSearch());
},
icon: Icon(Icons.search)),
],
),
backgroundColor: Colors.white,
body: Center(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: ListView.builder(
itemCount: counter,
itemBuilder: (context, index) {
return ListTile(
title: Text(personalResult.data[index].firstName
" "
personalResult.data[index].lastName),
subtitle: Text(personalResult.data[index].email),
leading: CircleAvatar(
backgroundImage:
NetworkImage(personalResult.data[index].avatar),
),
);
}),
),
),
),
);
}
}
class dataSearch extends SearchDelegate<String> {
@override
List<Widget> buildActions(BuildContext context) {
// actions for appbar
return [
IconButton(
onPressed: () {
query = "";
},
icon: Icon(Icons.clear))
];
}
@override
Widget buildLeading(BuildContext context) {
// leading icon on the left of the app bar
return IconButton(
icon: AnimatedIcon(
icon: AnimatedIcons.menu_arrow, progress: transitionAnimation),
onPressed: () {
close(context, query);
},
);
}
@override
Widget buildResults(BuildContext context) {
// show some result based on the selection
return Container(
color: Colors.red,
child: Card(),
);
throw UnimplementedError();
}
@override
Widget buildSuggestions(BuildContext context) {
// show when someone searches for something
final datasOnerisi = query.isEmpty
? datas_oneri
: datas.where((p) => p.startsWith(query)).toList();
return ListView.builder(
itemBuilder: (context, index) => ListTile(
onTap: () {
showResults(context);
},
leading: Icon(Icons.search),
title: RichText(
text: TextSpan(
text: datasOnerisi[index].substring(0, query.length),
style:
TextStyle(color: Colors.black, fontWeight: FontWeight.bold),
children: [
TextSpan(
text: datasOnerisi[index].substring(query.length),
style: TextStyle(color: Colors.grey))
]),
),
),
itemCount: datasOnerisi.length,
);
throw UnimplementedError();
}
}
Комментарии:
1. В какой строке вы получаете эту ошибку?
2. я не получаю никаких ошибок. Это ответ api, вы можете увидеть его на картинке… он отправляет сообщение об ошибке в раздел «Поймать» и показывает мне это на консоли. Когда я ставлю точку останова, она отправляет в ловушку » Список ветвей liste = Список ветвей.FromJSON(sonuc);» он помечен в коде
Ответ №1:
Я решил эту проблему, изменив класс модели… В этом были некоторые ошибки. «Строка» была сохранена как «описание», вот почему она выдавала эту ошибку. Поэтому я изменил его с помощью строки, и это решило проблему. Это была небольшая, но коварная ошибка
Комментарии:
1. Пожалуйста, добавьте дополнительные сведения, чтобы расширить свой ответ, например, ссылки на рабочий код или документацию.