以下 ArgumentError 被抛出构建 SubCategoriesScreen(dirty, state: _SubCategoriesScreenState#cbb58):

时间:2021-02-17 20:02:02

标签: flutter

我有一个用于按钮的小部件,我为哪个屏幕将返回值提供了参数。当我将此 empyCard 放入主类别屏幕时,一切正常,但是当我将它放入任何类别的子类别屏幕时,当用户点击空卡添加屏幕打开时,但当用户说添加子类别时,应用程序崩溃,错误如下所示。 enter image description here

这是我的空卡片小部件和子类别屏幕小部件。

class EmptyCard extends StatelessWidget {
  EmptyCard({this.where});
  final String where;
  @override
  Widget build(BuildContext context) {
    return Container(
      child: TextButton(
        onPressed: (){
          if(where=="homeScreen"){
            showModalBottomSheet(
              context: context,
              builder: (BuildContext context)=> AddMenuScreen(buttonText: "Menü Ekle",route:where),
            );
          }
          else if(where=="subCategoryScreen"){
            showModalBottomSheet(
              context: context,
              builder: (BuildContext context)=> AddMenuScreen(buttonText: "Tarif Ekle",route:where),
            );
          }
        },
        child: Container(
          height: 180,
          width: 180,
          decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(30),
            color: Colors.black12.withOpacity(0.1),
          ),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              Icon(Icons.add_circle_outline_outlined,size: 100,color: Colors.grey.shade400,),
            ],
          ),
        ),
      ),
    );
  }
}
class SubCategoriesScreen extends StatefulWidget {

  SubCategoriesScreen({this.categoryId,this.subCategoryName, this.subCategoryImagePath});
  static String id="subCategoriesScreen";
  final String subCategoryName;
  final String subCategoryImagePath;
  final int categoryId;
  Widget buildBottomSheet(BuildContext context)=>AddMenuScreen(categoryId: categoryId,buttonText: "Tarif Ekle",route: "subCategoryScreen",);


  @override
  _SubCategoriesScreenState createState() => _SubCategoriesScreenState();
}

class _SubCategoriesScreenState extends State<SubCategoriesScreen> {

  void initState(){
    super.initState();
    if(widget.categoryId!=null && widget.subCategoryImagePath!=null && widget.subCategoryName!=null){
      addSubCategory();
      }
    }

    void addSubCategory(){
      SubCategoryModel subCategoryModel=SubCategoryModel(
          subCategoryId:widget.categoryId,
          subCategoryImagePath: widget.subCategoryImagePath,
          subCategoryName: widget.subCategoryName.toUpperCase(),
          categoryColor: Color((Random().nextDouble() * 0xFFFFFF).toInt()).withOpacity(0.5));
      if(categoryModels!=null){
        for (var categoryModel in categoryModels){
          if (categoryModel.categoryId == subCategoryModel.subCategoryId){
            categoryModel.subCategoryModels.insert(categoryModel.subCategoryModels.length-1,subCategoryModel);
          }
        }
      }
    }



  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        appBar: AppBar(
          automaticallyImplyLeading: false,
          centerTitle: true,
          title: BorderedText(
            child:Text(
              categoryModels[widget.categoryId].categoryName,
              style: TextStyle(
                  color: Color(0XFFFFFB00),
                  fontSize: 30,
                  fontFamily: "OpenSans"
              ),
            ),
            strokeWidth: 5,
            strokeColor: Colors.black,
          ),
          elevation: 5,
          backgroundColor: Color(0xFFF2C3D4).withOpacity(1),
          leading: IconButton(
            icon: Icon(Icons.arrow_back),
            onPressed: (){
              Navigator.pop(context);
            },
            iconSize: 40,
            color: Color(0xFFA2000B),
          ),
          actions: [
            CircleAvatar(
              radius: 27,
              backgroundColor: Colors.transparent,
              backgroundImage: AssetImage("images/cuttedlogo.PNG"),
            )
          ],
        ),
        body: Container(
          decoration: BoxDecoration(
            image: DecorationImage(
              image: AssetImage("images/logoBGopacity.png"),
              fit: BoxFit.cover,
            ),
          ),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: [
              Expanded(
                child: GridView.builder(
                    scrollDirection: Axis.vertical,
                    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
                    itemCount:categoryModels[widget.categoryId].subCategoryModels.length,
                    itemBuilder: (context,index){
                      if(categoryModels[widget.categoryId].subCategoryModels[index].subCategoryId==-1){
                        return EmptyCard(where: "subCategoryScreen");
                      }
                      return SubCategoryCard(subCategoryId:widget.categoryId,subcategoryName: categoryModels[widget.categoryId].subCategoryModels[index].subCategoryName,
                        subCategoryImagePath: categoryModels[widget.categoryId].subCategoryModels[index].subCategoryImagePath,
                        subCategoryColor: categoryModels[widget.categoryId].subCategoryModels[index].categoryColor,);
                    }
                ),
              ),
              Column(
                mainAxisAlignment: MainAxisAlignment.end,
                crossAxisAlignment: CrossAxisAlignment.stretch,
                children: [
                  Padding(
                    padding: EdgeInsets.all(10),
                    child: Container(
                      decoration: BoxDecoration(
                        border: Border.all(style: BorderStyle.solid),
                        color: kColorTheme7,
                        borderRadius: BorderRadius.circular(40),
                      ),
                      child: TextButton(
                        onPressed: (){
                          showModalBottomSheet(
                            context: context,
                            builder: (BuildContext context)=> AddMenuScreen(categoryId:widget.categoryId,buttonText: "Tarif Ekle", route:"subCategoryScreen"),
                          );
                        },
                        child: BorderedText(
                          strokeWidth: 5,
                          strokeColor: Colors.black,
                          child:Text("Tarif Ekle",style: TextStyle(
                            color: Colors.white,
                            fontFamily:'OpenSans',
                            fontSize:30,
                          ),
                          ),
                        ),
                      ),
                    ),
                  ),
                ],
              )
            ],
          ),
        ),
      ),
    );
  }
}



class CategoryModel{
  CategoryModel({this.categoryId,this.categoryImagePath,this.categoryName,this.categoryColor,this.subCategory});
  int categoryId;
  final SubCategoryModel subCategory;
  final Color categoryColor;
  final String categoryImagePath;
  final String categoryName;
  final List<SubCategoryModel> subCategoryModels=[SubCategoryModel(subCategoryId: -1)];

}
class SubCategoryModel{
  SubCategoryModel({this.subCategoryId,this.subCategoryImagePath,this.subCategoryName, this.categoryColor});
  int subCategoryId;
  final Color categoryColor;
  final subCategoryImagePath;
  final subCategoryName;
  final List<SubCategoryRecipeModel> subCategoryRecipeModelProperties=[];

}

class SubCategoryRecipeModel{
  SubCategoryRecipeModel({this.recipeId,this.ingredients,this.recipeText, this.recipePhoto});
  final double recipeId;
  final Map<String,int> ingredients;
  final String recipeText;
  final String recipePhoto;

0 个答案:

没有答案