0
════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
type 'StateError' is not a subtype of type 'String'
The relevant error-causing widget was: 
  FutureBuilder<List<User>> file:///C:/Users/Personal/Desktop/park_parcel/lib/Json%20Service/json_Delivery_Data.dart:31:14
════════════════════════════════════════════════════════════════════════════════════════════════════

This is the Excpetion/Error I get where I must get Json data from the server and it must bind to a listview.builder through future.builder inside a stack!

Stack(
                  children: <Widget>[
                    Container(
                      height: _height * 1,
                      width: _width * 1,
                      child: DeliveryBody(),
                    ),
                    Positioned(
                      right: _width / 8,
                      bottom: _height / 5,
                      child: Container(
                        height: _height * 0.18,
                        margin: EdgeInsets.only(right: 20),
                        alignment: Alignment.bottomRight,
                        child: RaisedButton.icon(
                          shape: RoundedRectangleBorder(
                            borderRadius: BorderRadius.circular(30.0),
                          ),
                          color: Colors.green[600],
                          icon: Icon(Icons.camera_alt, color: Colors.white),
                          label: Text(
                            'Scan Deliver',
                            style: TextStyle(
                              color: Colors.white,
                            ),
                          ),
                          onPressed: () {
                            _scanQR();
                          },
                        ),
                      ),
                    ),

My Stack Ends here then I have the Code below from new Page !

Future<List<User>> _getData() async {
  var response = await http.get(Uri.encodeFull(url));
  print(response.body);
  if (response.statusCode == 200) {
    return compute(parcelList, response.body);
  } else {
    throw Exception('Unable to fetch products from the REST API');
  }
}

FutureOr<List<User>> parcelList(String responseBody) {
  //FutureOr mean Either Future values or List values
  var parsed = jsonDecode(responseBody).cast<Map<String, dynamic>>();
  return parsed.map<User>((json) => User.fromJson(json)).toList();
}

class DeliveryBody extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: FutureBuilder<List<User>>(
        future: _getData(),
        builder: (context, snapshot) {
          if (snapshot.hasError) print(Text(snapshot.error));
          return snapshot.hasData ? Parcels(item: snapshot.data) : NoParcel();
        },
      ),
    );
  }
}

class Parcels extends StatelessWidget {
  final List<User> item;

  const Parcels({Key key, this.item}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final _height = MediaQuery.of(context).size.height -
        MediaQuery.of(context).padding.top -
        kToolbarHeight;
    final _width = MediaQuery.of(context).size.width;

    return Builder(
      builder: (context) => Container(
        height: _height * 1,
        width: _width * 1,
        child: item != null
            ? ListView.builder(
                itemCount: item.length,
                itemBuilder: (BuildContext context, int index) {
                  return Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      ListTile(
                        tileColor: Colors.green[600],
                        title: Text(
                          item[index].id.toString(),
                          style: TextStyle(
                              fontWeight: FontWeight.w900,
                              color: Colors.white,
                              fontSize: 25.0),
                        ),
                      ),
                      ListTile(
                        onTap: () {
                          return Column(
                            children: <Widget>[
                              Container(
                                height: _height / 10,
                                width: _width * 1,
                                color: Colors.white,
                                margin: EdgeInsets.only(top: _height / 20),
                                child: Text(
                                  'Parcel Details',
                                  textAlign: TextAlign.center,
                                  style: TextStyle(
                                    fontSize: _height / 20,
                                    decorationColor: Colors.black,
                                    textBaseline: TextBaseline.alphabetic,
                                  ),
                                ),
                              ),
                              Container(
                                height: _height / 10,
                                width: _width * 1,
                                color: Colors.white,
                                margin: EdgeInsets.only(top: _height / 20),
                                child: Text(
                                  item[index].id.toString(),
                                  textAlign: TextAlign.center,
                                  style: TextStyle(
                                    fontSize: _height / 20,
                                    decorationColor: Colors.black,
                                    textBaseline: TextBaseline.alphabetic,
                                  ),
                                ),
                              ),
                            ],
                          );
                        },
                        tileColor: Colors.white,
                        title: Column(
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: [
                            SizedBox(
                              height: 7.0,
                            ),
                            Text(
                              "To: " + item[index].name,
                              style: TextStyle(
                                  fontWeight: FontWeight.w800, fontSize: 30.0),
                            ),
                            SizedBox(
                              height: 6.0,
                            ),
                            Text(item[index].parcelNumber.toUpperCase(),
                                style: TextStyle(
                                    fontWeight: FontWeight.w700,
                                    fontSize: 24.0)),
                            SizedBox(
                              height: 7.0,
                            ),
                            Text(item[index].address,
                                style: TextStyle(
                                    fontWeight: FontWeight.w500,
                                    fontSize: 20.2)),
                            SizedBox(
                              height: 7.0,
                            ),
                            Text("Parcels Size:" + item[index].parcelSize,
                                style: TextStyle(
                                    fontWeight: FontWeight.w500,
                                    fontSize: 20.0)),
                            SizedBox(
                              height: 7.0,
                            ),
                          ],
                        ),
                        trailing: Icon(
                          Icons.arrow_forward_ios,
                          size: 18.0,
                        ),
                      ),
                    ],
                  );
                },
              )
            : NoParcel(),
      ),
    );
  }
}

This Code Works Fine in Emulators below Android Version 10 and builds me a Lisview with the json data but gives me the Following Exception/Error in real Device and Emulators above Android Version 10.. Plz Help dont know what the problem is and I have Added all the Plugins in my pubspec.ymal file and Android.Xml file even the Permission of Accessing The Internet from The User..!!

Syed Muheeb
  • 11
  • 1
  • 4
  • Seems like you have a casting exception. If it works on emulator and not on real device, that's probably means on real device something doesn't work. And it's not a problem related to the type of device you're building to. As you can see, you're getting StateError instead of String. Check if you've added permission to the right manifest file (there are several) – Alex.Marynovskyi Nov 02 '20 at 10:47
  • Thank You for Replying but I am Pretty sure I have Added The Required Permission Which is of Internet in AndroidManifest.Xml file which is under the folder : Android>app>src>main..! Is there other Place were I should Add?! – Syed Muheeb Nov 02 '20 at 13:28

0 Answers0