error Exception caught by widgets library Incorrect use of ParentDataWidget

Viewed 22

i have this error when i run app directly show :

I/flutter (25326): ************************** your table above ****************************
I/flutter (25326): ***********************onChange******************************* -- TasksCubit, Change { currentState: Instance of 'GetdatabaseLoadingState', nextState: Instance of 'GetFromDataBase' }

════════ Exception caught by widgets library ═══════════════════════════════════
The following assertion was thrown while applying parent data.:
Incorrect use of ParentDataWidget.

The ParentDataWidget Expanded(flex: 1) wants to apply ParentData of type FlexParentData to a RenderObject, which has been set up to accept ParentData of incompatible type ParentData.

Usually, this means that the Expanded widget has the wrong ancestor RenderObjectWidget. Typically, Expanded widgets are placed directly inside Flex widgets.
The offending Expanded is currently placed inside a ColoredBox widget.

The ownership chain for the RenderObject that received the incompatible parent data was:
  Column ← Expanded ← ColoredBox ← Container ← Row ← ColoredBox ← Container ← Padding ← FractionalTranslation ← SlideTransition ← ⋯
When the exception was thrown, this was the stack

and this is my homeLayout screen : its have four sections in the scaffold : appbar, body, fab, and bottom navigation bar

import 'package:conditional_builder_null_safety/conditional_builder_null_safety.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:intl/intl.dart';
import 'package:my_first_app/shared/componants/componants.dart';
import 'package:my_first_app/shared/mycubitclasses/taskscubit_class.dart';
import 'package:my_first_app/shared/mycubitclasses/taskstates.dart';

class HomeLayout extends StatelessWidget 
{
  //======================variables===============================
    var scaffoldkey = GlobalKey<ScaffoldState>();
  var formkey = GlobalKey<FormState>();
  var titleController = TextEditingController();
  var timeController = TextEditingController();
  var dateController = TextEditingController();



  // scaffold contain in this screen :
  // 1. appBar  2. FAB floatingActionButton 3. body 4. bottomNavigationBar

  //=================================================================
  @override
  Widget build(BuildContext context) 
  {
    return BlocProvider (
      
      create:  (context) 
      {
        return  TasksCubit()..creatDataBase();
      },
      child :BlocConsumer<TasksCubit,TasksStates>(
          listener: (BuildContext context,TasksStates State)
          {
            if(State is InsertDataBase)
            Navigator.pop(context);
          },
        builder: (BuildContext context, TasksStates State)
          {
              TasksCubit cubitt = TasksCubit.get(context);
           return  Scaffold(
          key: scaffoldkey,
          //========================app bar =================================
          appBar: AppBar(
            title: Text(
              cubitt.titls[cubitt.currentindex],
            ),
          ),
          //===========================body ======================================
           
          body: ConditionalBuilder(
            condition: State is! GetdatabaseLoadingState,
             builder:(context) =>   cubitt.screens[cubitt.currentindex],
              fallback:(context) =>  Center(child: CircularProgressIndicator()),
              ) ,

          //===========================FAB======================================
          floatingActionButton: FloatingActionButton(
            onPressed: () 
            {
              if (cubitt. isBottomSheetShown) 
              {
              //  if(formkey.currentState!.validate ())
              //  {
                cubitt.InserttTODataBase(
                  titel: titleController.text,
                  date: dateController.text,
                  time: timeController.text,
                  status: 'new',
                ).then((value) {
                  print( '*************************** Insert succesfully  **************************');
                 
                  cubitt.ChangeBottomState(false,Icons.edit);
                 });
                print("helllloooo  you are pressed button");
              // }
              }
              else // if bottomsheet closed
              {
                scaffoldkey.currentState!.showBottomSheet(
                      (context) => Container(
                        padding: EdgeInsets.all(20.0),
                        color: Colors.grey[200],
                        child: Column(
                          mainAxisSize: MainAxisSize.min,
                          children:
                           [
                            DefoultFormField(
                              controller: titleController,
                              label: 'input title',
                              prefix: Icons.title,
                              type: TextInputType.text,
                             //validate: ((String value) {}),
                              validate: (String? value){
                                if(value!.isEmpty)
                                {
                                  return' must title not empty ';
                                }
                                return null ;
                              },
                            ),
                            SizedBox(
                              height: 5.0,
                            ),
                            //////////////////////////////////////////////////////////////////////
                            DefoultFormField(
                              controller: timeController,
                              label: 'input time',
                              prefix: Icons.watch,
                              type: TextInputType.datetime,
                            //  validate: ((String value) {}),
                               validate: (String? value){
                                  if(value!.isEmpty)
                                  {
                                    return' must time not empty ';
                                  }
                                 // return null ;
                                },
                              ontap: () {
                                showTimePicker(
                                  context: context,
                                  initialTime: TimeOfDay.now(),
                                ).then((value) {
                                  return timeController.text =
                                      value!.format(context);
                                });
                              },
                            ),
                            ///////////////////////////// formfiled  date /////////////////////////////////////////
                            SizedBox(
                              height: 5.0,
                            ),
                            DefoultFormField(
                              controller: dateController,
                              label: 'input date',
                              prefix: Icons.calendar_today,
                              type: TextInputType.datetime,
                            //  validate: ((String value) {}),
                              validate: (String value){
                                if(value.isEmpty)
                                return' must date not empty ';
                                return null ;
                              }, 
                              ontap: () {
                                showDatePicker(
                                  context: context,
                                  initialDate: DateTime.now(),
                                  firstDate: DateTime.now(),
                                  lastDate: DateTime.parse('2023-05-05'),
                                ).then((value) {
                                  return dateController.text =
                                      DateFormat.yMMMd().format(value!);
                                });
                              },
                            ),
          
                            //////////////////////////////////////////////////////////////////////
                          ],
                        ),
                      ),
                      // if i closed the bottomSheet in my hand not in FAB will give error so i did this :
                    )
                    .closed .then((value)
                     {
                      
                    cubitt.ChangeBottomState(false,Icons.edit);
                }); // closed func
          
                cubitt.ChangeBottomState(true,Icons.add);
              }
            },
            child: Icon(
           cubitt. fabicon,
            ),
          ),
          //========================  BottomNavigationBar =========================================
          bottomNavigationBar: BottomNavigationBar(
            type: BottomNavigationBarType.fixed,
            elevation: 50.0,
            currentIndex: cubitt.currentindex,
            onTap: (index) {
              cubitt.ChangeIndex(index);
            },
            backgroundColor: Colors.blue[200],
            items:
                [
              BottomNavigationBarItem(
                icon: Icon(
                  Icons.menu,
                ),
                label: 'NEW TASK',
              ),
              BottomNavigationBarItem(
                icon: Icon(
                  Icons.done_all,
                ),
                label: 'DONE TASK',
              ),
              BottomNavigationBarItem(
                icon: Icon(
                  Icons.archive,
                ),
                label: 'ARCHIVE TASK',
              ),
            ],
          ),
        );
          },
       ),
      );
  }
//============================ finish scaffold =======================================
}

and this is my taskCubit class that have a database sqflite and its work in bloc mode


import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:my_first_app/moduls/new_task_screen/new_task.dart';
import 'package:my_first_app/shared/mycubitclasses/taskstates.dart';
import 'package:sqflite/sqflite.dart';
import '../../moduls/archive_task_screen/archive_task.dart';
import '../../moduls/done_task_screen/done_task.dart';

class TasksCubit extends Cubit<TasksStates>
{
  
 TasksCubit():super ( InitailTasksState());
static TasksCubit get(context)=>BlocProvider.of(context);
//============================================================================
//============================================================================
int currentindex = 0;
 List<Widget> screens = [
    NewTask(),
    DoneTask(),
    ArchiveTask(),
  ];
  List<String> titls = [
    'new task',
    'done task ',
    'archive task',
  ];
  void ChangeIndex (index)
  {
    currentindex =index;
    emit(changBottomNavBar());
  }
  //**********************************************
  var isBottomSheetShown = false;
  IconData fabicon = Icons.add;

void ChangeBottomState ( bool isShow ,IconData icon )
{
  isBottomSheetShown=isShow;
  fabicon=icon;
  emit(changBottomSheet());

}

  // **************************** DataBase ************************************

late Database Mydatabase;
//List<Map> tasks =[];
List<Map> newtasks=[];
List<Map> archivetasks =[];
List<Map> donetasks=[];

  void creatDataBase() async
   {
   Mydatabase= await openDatabase(
      'todo.db',
      version: 1,
      onCreate: (db, version) {
        print(
            '************************** daataBase Created  ****************************');
        db.execute(
                'CREATE TABLE tasks (id INTEGER PRIMARY KEY,titel TEXT,date TEXT,time TEXT,status TEXT)')
            .then((value)
             {
          print(
              '************************** table creaated  ****************************');
        }).catchError((err) {
          print(
              '************************** error in create table  ****************************${err.toString()}');
        });
      },
      onOpen: (db) 
      {
        // ignore: avoid_print
        print(
            '************************** daataBase opened  ****************************');
             GetDataFromDataBase(db);
      },
    ).then((value) 
    {
     return Mydatabase=value;
      emit(CreatDataBase());
    });
  }
//============================================================================================
//========================== insert data to dataBase =========================================

   InserttTODataBase
   (
      {
      required String titel,
      required String date,
      required String time,
      required String status
      }) async 
      {
    await Mydatabase.transaction((txn)
     {
      return txn.rawInsert('INSERT INTO tasks (titel,date,time,status) VALUES ("$titel","$date","$time","$status")')
          .then((value) 
       {
        print('************************** inserted successfulyt to  id ${value}  ****************************');
        emit(InsertDataBase());
         GetDataFromDataBase(Mydatabase);

      }).catchError((err) 
      {
        print('************************** error when inserted to record  ****************************${err.toString()}');
      });

    });
  }

 /////////////////////////// get data from dataBase////////////////////////////////////
 //============================================================================================

Future GetDataFromDataBase (database) 
{
 newtasks=[];
 archivetasks =[];
 donetasks=[];
  emit(GetdatabaseLoadingState());
 return database.rawQuery('SELECT * FROM tasks').then((value) 
            {
               print( '************************** your table next ****************************');
            print(value);
               print('************************** your table above ****************************');

               value.forEach((element)
               {
                if(element['status']=='new')
                  newtasks.add(element);
                  else if (element['status']=='done')
                  donetasks.add(element);
                  else archivetasks.add(element);
               });
                 emit(GetFromDataBase());
            });

}
 /////////////////////////// UPDATE data from dataBase////////////////////////////////////
 //============================================================================================

Future updateDatabase ({
  required String status,
  required int id ,
}) 
{
  return  Mydatabase.rawUpdate(
    'UPDATE tasks SET status = ? WHERE id = ? ',
    ['$status',id] 
  ).then((value) 
  {
    GetDataFromDataBase(Mydatabase);
     emit(UPDATEDataBase());
  });
}

 /////////////////////////// DELETE data from dataBase////////////////////////////////////
 //============================================================================================
  Future deleteFromDatabase ({required int id })
  {
    return Mydatabase.rawDelete(
      'DELETE FROM tasks WHERE id = ? ',
      [id],
    ).then((value) {
      GetDataFromDataBase(Mydatabase);
      emit(DeleteDataBase());
    });
  }
}

and main.dart file :

import 'package:bloc/bloc.dart';
import 'package:flutter/material.dart';
import 'package:my_first_app/layout/homelayout.dart';
import 'package:my_first_app/moduls/login/login.dart';
import 'package:my_first_app/moduls/messanger/messangerscreen.dart';
import 'package:my_first_app/moduls/counter/counter_screen.dart';
import 'package:my_first_app/moduls/messanger/mydesign.dart';
import 'moduls/homescreen/HomeScreen.dart';
import 'moduls/counter/counter_screen.dart';
import 'moduls/bmiscreen/ibm_calculator.dart';
import 'shared/bloc_observ.dart';

void main() {
    Bloc.observer = MyBlocObserver(); 
 return runApp(MyApp());
}
//=========================================================
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) 
  {  
    return MaterialApp( 
      debugShowCheckedModeBanner: false  ,
      home: HomeLayout(),
    );
  }
}

and this is a newTask screen i have it contain a listView and the app have 3 screens like this

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:my_first_app/shared/mycubitclasses/taskscubit_class.dart';
import 'package:my_first_app/shared/mycubitclasses/taskstates.dart';
import '../../shared/componants/componants.dart';
class NewTask extends StatelessWidget
{
  @override
  Widget build(BuildContext context)
   {
    
 return BlocConsumer<TasksCubit,TasksStates>(

   listener:  (BuildContext context, TasksStates state)=>{},
     builder: (BuildContext context, TasksStates state)
      {
      var tasks=TasksCubit.get(context).newtasks; 
      return ListView.separated(

      itemBuilder:(context, index) {
        return BiuldTASKSItems(tasks[index],context);
      }, 
      separatorBuilder:(context, index) {
       return Container(
        height: 1.0,
        width: double.infinity,
        color: Colors.grey,
      );
      },
      itemCount: tasks.length,
      );
      } 
 );
}
}

i rode some things on internet and don't found problem that can help me

0 Answers
Related