简体   繁体   English

RangeError(索引):索引超出范围:没有有效的索引:0 - Flutter

[英]RangeError (index): Index out of range: no indices are valid: 0 - Flutter

I'm new to flutter.我是新来的颤振。 When I'm trying to add list data to the widget RealAppcard of Text the list data is '${extractRooms[0]}' I'm getting this error RangeError (index): Index out of range: no indices are valid: 0 but without this data added everything is working what am I doing wrong here?当我尝试将列表数据添加到 Text 的小部件 RealAppcard 时,列表数据为 '${extractRooms[0]}' 我收到此错误 RangeError (index): Index out of range: no indices are valid: 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();
// }

if you getting the error, it means one of the extractRoom throwing this is empty, so what you can do it check if the extractRoom is not empty before displaying its content.如果您收到错误,则表示其中一个引发此错误的 extractRoom 为空,因此您可以在显示其内容之前检查 extractRoom 是否为空。

realAppCard(
  text: 'מחיר',
  quantity: extractRoom.isNotEmpty ? extractRoom[0] : '0.0',
),

this will do the work这将完成工作

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM