RangeError (index): 索引超出范围:没有有效的索引:0 - Flutter
RangeError (index): Index out of range: no indices are valid: 0 - Flutter
我是 Flutter 新手。
当我尝试将列表数据添加到 Text 的小部件 RealAppcard 时
列表数据是“${extractRooms[0]}”
我收到这个错误
RangeError(索引):索引超出范围:没有索引有效:0
但没有添加这些数据一切正常
我在这里做错了什么?
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:gs/card_real_app.dart';
import 'package:gs/homescreen.dart';
import 'package:gs/network.dart';
import 'package:gs/pic_model.dart';
import 'package:gs/reusable_card.dart';
import 'package:dotted_border/dotted_border.dart';
import 'Custom_textfield.dart';
import 'order.dart';
import 'dart:convert' as convert;
import 'package:http/http.dart' as http;
import 'ordertile.dart';
const cardinactiveColor = Color(0xFF0a1529);
const cardActivecolor = Color(0xFFffb700);
var orderData;
// List<Order> orders = <Order>[];
List<Order> OrdersItems = [];
List<dynamic> feedbacks = [];
List<dynamic> pics = [];
late final String? picData;
late final String? statusData;
List<dynamic> filteredOrdersItems = [];
List<dynamic> feedbpics = [];
// final assetController = TextEditingController();
String currentSearch = '';
// String? statusOrder;
// String? picOrder;
// String? myStr = 'shalom';
List<dynamic> extractRooms = [];
List<dynamic> extractStatus = [];
List<dynamic> extractType = [];
List<dynamic> extractMap = [];
dynamic getRooms() {
filteredOrdersItems.forEach((item) {
extractRooms.insert(0, item.rooms);
// print('${item.pic}');
});
}
dynamic getType() {
filteredOrdersItems.forEach((item) {
extractType.insert(0, item.type);
// print('${item.pic}');
});
}
dynamic getSatausData() {
filteredOrdersItems.forEach((item) {
extractStatus.insert(0, item.status);
// print('${item.pic}');
});
}
dynamic getPicData() {
filteredOrdersItems.forEach((item) {
extractMap.insert(0, item.pic);
// print('${item.pic}');
});
}
var data;
var parsedJsonText = jsonDecode(data);
class searchScreen extends StatefulWidget {
// firstScreen({Key? key}) : super(key: key);
@override
State<searchScreen> createState() => _searchScreenState();
}
class _searchScreenState extends State<searchScreen> {
@override
void initState() {
super.initState();
getOrders().then((
OrderItems,
) {
setState(() {
// this.OrderItems = OrderItems;
// filteredOrdersItems = OrderItems;
});
});
}
// void initState() {
// super.initState();
// getOrders().then((
// feedbackItems,
// ) {
// setState(() {
// // this.feedbackItems = feedbackItems;
// // this.filteredFeedbackItems = feedbackItems;
// });
// });
// }
// List<OrderModel> orders = <OrderModel>[];
Color cardColor = cardinactiveColor;
void updateColor() {
if (cardColor == cardinactiveColor) {
cardColor = cardActivecolor;
} else {
cardColor = cardinactiveColor;
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
// ignore: prefer_const_literals_to_create_immutables
Container(
height: 400,
color: Color(0xFF0a1529),
child: Column(
children: [
const Icon(
Icons.real_estate_agent_outlined,
color: Colors.white,
size: 80,
),
// data: Icons.real_estate_agent_outlined,
SizedBox(height: 5),
Text(
'ברוכים הבאים לאפליקצית חיפוש נכסים',
style: TextStyle(
fontSize: 20.0,
color: Colors.blue,
),
),
SizedBox(height: 15),
CustomTextField(
data: Icons.search,
// controller: null,
hintText: 'חיפוש נכס',
enabled: true,
// controller: assetController,
),
SizedBox(height: 15),
DottedBorder(
color: Color(0xFFffb700),
strokeWidth: 1,
child: Card(
color: Colors.transparent,
elevation: 0,
child: Container(
width: 400,
height: 140,
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: const [
Padding(
padding: EdgeInsets.all(10.0),
child: Icon(
FontAwesomeIcons.crown,
// Icons.workspace_premium,
color: Color(0xFFffb700),
),
),
Padding(
padding: EdgeInsets.all(10.0),
child: Text(
'מיוחדים',
style: TextStyle(
color: Colors.white,
),
),
),
],
),
Text(
'מוזמנים להתנסות במערכת הנפלאה',
style: TextStyle(
color: Color(0xFF8d8e98),
),
),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
GestureDetector(
onTap: () {},
child: Card(
color: cardColor,
child: Container(
child: Row(
children: [
ButtonTheme(
minWidth: 30.0,
height: 15.0,
child: RaisedButton(
color: Colors.amber,
child: Text(
'בצעו חיפוש',
style: TextStyle(
fontSize: 20,
),
),
onPressed: () async {
feedbacks = await getOrders();
// pics = await getPic();
// feedbpics =
// pics.where((element) {
// return element.id ==
// currentSearch;
// }).toList();
// print(feedbpics);
print(feedbacks);
filteredOrdersItems =
feedbacks.where((element) {
return element.address ==
currentSearch;
}).toList();
filteredOrdersItems
.forEach((item) {
print('${item.pic}');
});
// picData = getStatus();
// statusData = getPic();
// print('pic $picData');
// print('status $statusData');
// getPic();
getPicData();
getType();
getSatausData();
getRooms();
print(
'checking ${filteredOrdersItems[0]}');
print(
'list map${filteredOrdersItems}');
print('list $extractMap');
print(extractMap[0]);
print(
'status ${extractStatus[0]}');
print(
'rooms ${extractRooms[0]}');
// print(
// 'status ${extractMapStatus}');
setState(() {});
}),
),
// Text(
// 'בדקו עכשיו',
// style: TextStyle(
// color: Colors.white,
// ),
// ),
Icon(
FontAwesomeIcons.arrowRight,
// Icons.workspace_premium,
color: Color(0xFFffb700),
),
],
),
),
),
)
],
),
],
),
),
),
),
],
),
),
Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(24),
),
color: Colors.white,
elevation: 5,
child: Container(
width: 500,
height: 500,
decoration:
BoxDecoration(borderRadius: BorderRadius.circular(25)),
child: Column(
children: [
// Text('${feedbpics[0]}'),
if (filteredOrdersItems.isEmpty) ...{
Text(
"לא נמצאו תוצאות נסו שנית",
style: TextStyle(
fontSize: 20,
),
),
} else ...{
Text(
'${extractType[0]}',
style: TextStyle(
fontSize: 20,
),
),
SizedBox(height: 20),
Card(
elevation: 8,
child: Image.network(
'${extractMap[0]}',
width: 200,
height: 100,
),
),
},
// SizedBox(height: 10),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'כתובת מלאה',
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.bold,
color: Color(0xFFA435F0),
),
),
Text('ניקוד נכס'),
],
),
// SizedBox(height: 10),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
realAppCard(
text: 'חדרים',
quantity: '${extractRooms[0]}',
),
realAppCard(
text: 'גודל דירה',
quantity: '120',
),
realAppCard(
text: 'מחיר',
quantity: '1.5',
),
],
),
SizedBox(height: 10),
Card(
color: Colors.green,
elevation: 10,
child: Container(
width: 100,
height: 30,
child: Text(
'status',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20,
),
),
),
),
SizedBox(height: 5),
Center(
child: Text(
'''
הרשות פרסמה את ממצאי התחקיר שערכה על הרג כתבת אל ג'זירה,
ממנו עולה שהחיילים ירו בה בכוונה, למרות שראו שמדובר בעיתונאית.
לטענת התובע, הקליע, שהשימוש בו לא היה חוקי
''',
textAlign: TextAlign.center,
),
),
SizedBox(height: 5),
Card(
elevation: 2,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomRight: Radius.circular(10),
topRight: Radius.circular(10)),
side: BorderSide(width: 1, color: Colors.blueGrey)),
child: ListTile(
leading: Icon(Icons.message_outlined),
trailing: Text('משה כהן'),
title: Text('052-3567104'),
),
),
SizedBox(height: 5),
ElevatedButton(
onPressed: null,
child: Text('שליחת ווטסאפ'),
),
],
)),
// Center(
// child: Container(
// width: 300,
// child: TextField(
// decoration: const InputDecoration(
// border: OutlineInputBorder(), hintText: 'הקלידו הזמנה'),
// onChanged: (String newstr) {
// currentSearch = newstr;
// // print('first: ${currentSearch}');
// // print(newstr);
// // feedbackItems.forEach((element) {
// // print(element.status);
// // });
// },
// ),
// ),
// ),
// SizedBox(height: 20),
// ButtonTheme(
// minWidth: 200.0,
// height: 30.0,
// child: RaisedButton(
// color: Colors.amber,
// child: Text(
// 'בצעו חיפוש',
// style: TextStyle(
// fontSize: 20,
// ),
// ),
// onPressed: () async {
// feedbacks = await getOrders();
// print(feedbacks);
// filteredOrdersItems = feedbacks.where((element) {
// return element.id == currentSearch;
// }).toList();
// print(filteredOrdersItems);
// setState(() {});
// }),
// ),
// SizedBox(height: 10),
// ignore: sdk_version_ui_as_code
)
],
),
);
}
}
Future<List<dynamic>> getOrders() async {
String url =
'https://script.google.com/macros/s/AKfycbyT3xsBV2nrxgCotCA8-hyZ1DNTNt1ET0wuKilQZr29ac8pbpXMk7nMrCnz2_7NPW1j/exec';
var response = await http.get(Uri.parse(url));
var jsonData = convert.jsonDecode(response.body) as List;
String data = response.body;
// var parsedJson = json.decode(response.body);
// var orderModel = jsonDecode(data)[0]['pic'];
// print('this is my natun ${orderModel}');
// print('response body ${data}');
// print(jsonData);
return jsonData.map((json) => Order.fromJson(json)).toList();
// for (var order in jsonData) {
// OrdersItems.add(Order(order['id'], order['name'], order['status']));
// OrdersItems.forEach((element) {
// print("id : ${element.id}");
// });
// }
// // filteredOrdersItems =
// // OrdersItems.where((ord) => ord['id'] == 'test').toList();
// print(OrdersItems[1].id);
// print(OrdersItems);
// print(filteredOrdersItems);
// return OrdersItems;
}
// Future<List<dynamic>> getPic() async {
// String url =
// 'https://script.google.com/macros/s/AKfycbz12UnYLSmxvwGdeUH2EI7VQ8AnLMACE6IEy3bl3TcmhnyWa0Wmfxxr17swWWXCoXqd/exec';
// var response = await http.get(Uri.parse(url));
// var jsonData = convert.jsonDecode(response.body) as List;
// // print(jsonData);
// return jsonData.map((json) => Pic.fromJson(json)).toList();
// }
如果您遇到错误,这意味着抛出此错误的 extractRoom 之一是空的,因此您可以做什么,在显示其内容之前检查 extractRoom 是否不为空。
realAppCard(
text: 'מחיר',
quantity: extractRoom.isNotEmpty ? extractRoom[0] : '0.0',
),
这样就可以了
我是 Flutter 新手。 当我尝试将列表数据添加到 Text 的小部件 RealAppcard 时 列表数据是“${extractRooms[0]}” 我收到这个错误 RangeError(索引):索引超出范围:没有索引有效:0 但没有添加这些数据一切正常 我在这里做错了什么?
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:gs/card_real_app.dart';
import 'package:gs/homescreen.dart';
import 'package:gs/network.dart';
import 'package:gs/pic_model.dart';
import 'package:gs/reusable_card.dart';
import 'package:dotted_border/dotted_border.dart';
import 'Custom_textfield.dart';
import 'order.dart';
import 'dart:convert' as convert;
import 'package:http/http.dart' as http;
import 'ordertile.dart';
const cardinactiveColor = Color(0xFF0a1529);
const cardActivecolor = Color(0xFFffb700);
var orderData;
// List<Order> orders = <Order>[];
List<Order> OrdersItems = [];
List<dynamic> feedbacks = [];
List<dynamic> pics = [];
late final String? picData;
late final String? statusData;
List<dynamic> filteredOrdersItems = [];
List<dynamic> feedbpics = [];
// final assetController = TextEditingController();
String currentSearch = '';
// String? statusOrder;
// String? picOrder;
// String? myStr = 'shalom';
List<dynamic> extractRooms = [];
List<dynamic> extractStatus = [];
List<dynamic> extractType = [];
List<dynamic> extractMap = [];
dynamic getRooms() {
filteredOrdersItems.forEach((item) {
extractRooms.insert(0, item.rooms);
// print('${item.pic}');
});
}
dynamic getType() {
filteredOrdersItems.forEach((item) {
extractType.insert(0, item.type);
// print('${item.pic}');
});
}
dynamic getSatausData() {
filteredOrdersItems.forEach((item) {
extractStatus.insert(0, item.status);
// print('${item.pic}');
});
}
dynamic getPicData() {
filteredOrdersItems.forEach((item) {
extractMap.insert(0, item.pic);
// print('${item.pic}');
});
}
var data;
var parsedJsonText = jsonDecode(data);
class searchScreen extends StatefulWidget {
// firstScreen({Key? key}) : super(key: key);
@override
State<searchScreen> createState() => _searchScreenState();
}
class _searchScreenState extends State<searchScreen> {
@override
void initState() {
super.initState();
getOrders().then((
OrderItems,
) {
setState(() {
// this.OrderItems = OrderItems;
// filteredOrdersItems = OrderItems;
});
});
}
// void initState() {
// super.initState();
// getOrders().then((
// feedbackItems,
// ) {
// setState(() {
// // this.feedbackItems = feedbackItems;
// // this.filteredFeedbackItems = feedbackItems;
// });
// });
// }
// List<OrderModel> orders = <OrderModel>[];
Color cardColor = cardinactiveColor;
void updateColor() {
if (cardColor == cardinactiveColor) {
cardColor = cardActivecolor;
} else {
cardColor = cardinactiveColor;
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
// ignore: prefer_const_literals_to_create_immutables
Container(
height: 400,
color: Color(0xFF0a1529),
child: Column(
children: [
const Icon(
Icons.real_estate_agent_outlined,
color: Colors.white,
size: 80,
),
// data: Icons.real_estate_agent_outlined,
SizedBox(height: 5),
Text(
'ברוכים הבאים לאפליקצית חיפוש נכסים',
style: TextStyle(
fontSize: 20.0,
color: Colors.blue,
),
),
SizedBox(height: 15),
CustomTextField(
data: Icons.search,
// controller: null,
hintText: 'חיפוש נכס',
enabled: true,
// controller: assetController,
),
SizedBox(height: 15),
DottedBorder(
color: Color(0xFFffb700),
strokeWidth: 1,
child: Card(
color: Colors.transparent,
elevation: 0,
child: Container(
width: 400,
height: 140,
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: const [
Padding(
padding: EdgeInsets.all(10.0),
child: Icon(
FontAwesomeIcons.crown,
// Icons.workspace_premium,
color: Color(0xFFffb700),
),
),
Padding(
padding: EdgeInsets.all(10.0),
child: Text(
'מיוחדים',
style: TextStyle(
color: Colors.white,
),
),
),
],
),
Text(
'מוזמנים להתנסות במערכת הנפלאה',
style: TextStyle(
color: Color(0xFF8d8e98),
),
),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
GestureDetector(
onTap: () {},
child: Card(
color: cardColor,
child: Container(
child: Row(
children: [
ButtonTheme(
minWidth: 30.0,
height: 15.0,
child: RaisedButton(
color: Colors.amber,
child: Text(
'בצעו חיפוש',
style: TextStyle(
fontSize: 20,
),
),
onPressed: () async {
feedbacks = await getOrders();
// pics = await getPic();
// feedbpics =
// pics.where((element) {
// return element.id ==
// currentSearch;
// }).toList();
// print(feedbpics);
print(feedbacks);
filteredOrdersItems =
feedbacks.where((element) {
return element.address ==
currentSearch;
}).toList();
filteredOrdersItems
.forEach((item) {
print('${item.pic}');
});
// picData = getStatus();
// statusData = getPic();
// print('pic $picData');
// print('status $statusData');
// getPic();
getPicData();
getType();
getSatausData();
getRooms();
print(
'checking ${filteredOrdersItems[0]}');
print(
'list map${filteredOrdersItems}');
print('list $extractMap');
print(extractMap[0]);
print(
'status ${extractStatus[0]}');
print(
'rooms ${extractRooms[0]}');
// print(
// 'status ${extractMapStatus}');
setState(() {});
}),
),
// Text(
// 'בדקו עכשיו',
// style: TextStyle(
// color: Colors.white,
// ),
// ),
Icon(
FontAwesomeIcons.arrowRight,
// Icons.workspace_premium,
color: Color(0xFFffb700),
),
],
),
),
),
)
],
),
],
),
),
),
),
],
),
),
Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(24),
),
color: Colors.white,
elevation: 5,
child: Container(
width: 500,
height: 500,
decoration:
BoxDecoration(borderRadius: BorderRadius.circular(25)),
child: Column(
children: [
// Text('${feedbpics[0]}'),
if (filteredOrdersItems.isEmpty) ...{
Text(
"לא נמצאו תוצאות נסו שנית",
style: TextStyle(
fontSize: 20,
),
),
} else ...{
Text(
'${extractType[0]}',
style: TextStyle(
fontSize: 20,
),
),
SizedBox(height: 20),
Card(
elevation: 8,
child: Image.network(
'${extractMap[0]}',
width: 200,
height: 100,
),
),
},
// SizedBox(height: 10),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'כתובת מלאה',
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.bold,
color: Color(0xFFA435F0),
),
),
Text('ניקוד נכס'),
],
),
// SizedBox(height: 10),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
realAppCard(
text: 'חדרים',
quantity: '${extractRooms[0]}',
),
realAppCard(
text: 'גודל דירה',
quantity: '120',
),
realAppCard(
text: 'מחיר',
quantity: '1.5',
),
],
),
SizedBox(height: 10),
Card(
color: Colors.green,
elevation: 10,
child: Container(
width: 100,
height: 30,
child: Text(
'status',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20,
),
),
),
),
SizedBox(height: 5),
Center(
child: Text(
'''
הרשות פרסמה את ממצאי התחקיר שערכה על הרג כתבת אל ג'זירה,
ממנו עולה שהחיילים ירו בה בכוונה, למרות שראו שמדובר בעיתונאית.
לטענת התובע, הקליע, שהשימוש בו לא היה חוקי
''',
textAlign: TextAlign.center,
),
),
SizedBox(height: 5),
Card(
elevation: 2,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomRight: Radius.circular(10),
topRight: Radius.circular(10)),
side: BorderSide(width: 1, color: Colors.blueGrey)),
child: ListTile(
leading: Icon(Icons.message_outlined),
trailing: Text('משה כהן'),
title: Text('052-3567104'),
),
),
SizedBox(height: 5),
ElevatedButton(
onPressed: null,
child: Text('שליחת ווטסאפ'),
),
],
)),
// Center(
// child: Container(
// width: 300,
// child: TextField(
// decoration: const InputDecoration(
// border: OutlineInputBorder(), hintText: 'הקלידו הזמנה'),
// onChanged: (String newstr) {
// currentSearch = newstr;
// // print('first: ${currentSearch}');
// // print(newstr);
// // feedbackItems.forEach((element) {
// // print(element.status);
// // });
// },
// ),
// ),
// ),
// SizedBox(height: 20),
// ButtonTheme(
// minWidth: 200.0,
// height: 30.0,
// child: RaisedButton(
// color: Colors.amber,
// child: Text(
// 'בצעו חיפוש',
// style: TextStyle(
// fontSize: 20,
// ),
// ),
// onPressed: () async {
// feedbacks = await getOrders();
// print(feedbacks);
// filteredOrdersItems = feedbacks.where((element) {
// return element.id == currentSearch;
// }).toList();
// print(filteredOrdersItems);
// setState(() {});
// }),
// ),
// SizedBox(height: 10),
// ignore: sdk_version_ui_as_code
)
],
),
);
}
}
Future<List<dynamic>> getOrders() async {
String url =
'https://script.google.com/macros/s/AKfycbyT3xsBV2nrxgCotCA8-hyZ1DNTNt1ET0wuKilQZr29ac8pbpXMk7nMrCnz2_7NPW1j/exec';
var response = await http.get(Uri.parse(url));
var jsonData = convert.jsonDecode(response.body) as List;
String data = response.body;
// var parsedJson = json.decode(response.body);
// var orderModel = jsonDecode(data)[0]['pic'];
// print('this is my natun ${orderModel}');
// print('response body ${data}');
// print(jsonData);
return jsonData.map((json) => Order.fromJson(json)).toList();
// for (var order in jsonData) {
// OrdersItems.add(Order(order['id'], order['name'], order['status']));
// OrdersItems.forEach((element) {
// print("id : ${element.id}");
// });
// }
// // filteredOrdersItems =
// // OrdersItems.where((ord) => ord['id'] == 'test').toList();
// print(OrdersItems[1].id);
// print(OrdersItems);
// print(filteredOrdersItems);
// return OrdersItems;
}
// Future<List<dynamic>> getPic() async {
// String url =
// 'https://script.google.com/macros/s/AKfycbz12UnYLSmxvwGdeUH2EI7VQ8AnLMACE6IEy3bl3TcmhnyWa0Wmfxxr17swWWXCoXqd/exec';
// var response = await http.get(Uri.parse(url));
// var jsonData = convert.jsonDecode(response.body) as List;
// // print(jsonData);
// return jsonData.map((json) => Pic.fromJson(json)).toList();
// }
如果您遇到错误,这意味着抛出此错误的 extractRoom 之一是空的,因此您可以做什么,在显示其内容之前检查 extractRoom 是否不为空。
realAppCard(
text: 'מחיר',
quantity: extractRoom.isNotEmpty ? extractRoom[0] : '0.0',
),
这样就可以了