Muhammed Jack
Muhammed Jack

Reputation: 97

_TypeError (type 'String' is not a subtype of type 'Category List')

iam trying to add data from my data base (MYSQL DATABASE) as Json and i got this error can any one help me because I looked for a solution to the problem, and I could not find it

    import 'package:flutter/material.dart';
import 'package:youtubeclone/pages/class/categores.dart';
import 'package:youtubeclone/pages/componets/appbarallproject.dart';
import 'package:youtubeclone/pages/componets/mydrawer.dart';
import 'dart:io';
import 'package:image_picker/image_picker.dart';
import '../class/dropdownmenuclass.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

class Upload extends StatefulWidget {
  @override
  _UploadState createState() => _UploadState();
}

class _UploadState extends State<Upload> {
  GlobalKey<ScaffoldState> _drawerKey = GlobalKey();

  CategoresList _selectedCategory2;
  List<CategoresList> listcategory = <CategoresList>[];

  Future<List<CategoresList>> getCategories() async {
    var url = "http://10.0.2.2/videoTube/chosecategories.php";
    var response = await http.get(url);
    var responsebody = jsonDecode(response.body);
    for (int i = 0; i < responsebody.length; i++) {
      listcategory.add(responsebody[i]['name']);
    }
  }

  @override
  void initState() {
    getCategories();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _drawerKey,
      drawer: MyDrawer(),
      appBar: AppBarAllProject(drawerKey: _drawerKey),
      body: Container(
        child: Center(
          child: AnimatedContainer(
            duration: Duration(milliseconds: 600),
            curve: Curves.easeOutBack,
            width: MediaQuery.of(context).size.width - 40,
            height: 1000,
            child: Card(
              elevation: 5.0,
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  DropdownButton<CategoresList>(
                    hint: Text("Select Categore"),
                    value: _selectedCategory2,
                    onChanged: (CategoresList catey) {
                      setState(() {
                        _selectedCategory2 = catey;
                      });
                    },
                    items: listcategory?.map((CategoresList categoreslist) {
                          return DropdownMenuItem<CategoresList>(
                            value: categoreslist,
                            child: Row(
                              children: <Widget>[
                                Text(
                                  categoreslist.name,
                                ),
                              ],
                            ),
                          );
                        })?.toList() ??
                        [],
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}

this is the function that i got erro on it i got the error Specifically on the line listcategory.add(responsebody[i]['name'])

    Future<List<CategoresList>> getCategories() async {
    var url = "http://10.0.2.2/videoTube/chosecategories.php";
    var response = await http.get(url);
    var responsebody = jsonDecode(response.body);
    for (int i = 0; i < responsebody.length; i++) {
      listcategory.add(responsebody[i]['name']);
    }
  }

this class CategoresList

    import 'package:flutter/material.dart';

class CategoresList {
  final name;

  CategoresList({this.name});
}

Upvotes: 0

Views: 38

Answers (1)

samaprak
samaprak

Reputation: 32

The error message is self explanatory. You are trying to add a string to a list which holds CategoresList types.

Create a new CategoresList from responsebody[i]['name'] before you add it to listcategory.add();

var name = responsebody[i]['name'];
var category = CategoresList(name: name);
listcategory.add(category);

Upvotes: 1

Related Questions