0

Iam new to flutter and i know there is a lot of answers for this question but its not working for me, please help me with this. These are my code

This is my data model

class SubjectModel {
  int? id;
  final String sub;


  SubjectModel({required this.sub, this.id}): assert(sub != null);

  static SubjectModel fromMap(Map<String, Object?>map)
  {
    final id = map['id'] as int;
    final sub = map['name'] as String;

    return SubjectModel(id: id,sub: sub);
  }
}

This is db helper

import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:schoolmanagement/subject/datamodel3.dart';
import 'package:sqflite/sqflite.dart';
// import 'datamodel2.dart';

ValueNotifier<List<SubjectModel>> subjectlistNotifier = ValueNotifier([]);

late Database _db;

Future<void> initializeDataBasess()async{
  _db = await openDatabase('subject.db',
      version: 1,
      onCreate: (Database db, int version) async{
        await db.execute(
            'CREATE TABLE subject(id INTEGER PRIMARY KEY, sub TEXT) ');
      });
}

Future<void> addSubject(SubjectModel valuess) async{
  await _db.rawQuery(
      'INSERT INTO subject(sub) VALUES(?)',[valuess.sub]);
  getAllSubject();
}

Future<void> getAllSubject() async{
  final _valuess = await _db.rawQuery('SELECT * FROM subject');
  print(_valuess);
  subjectlistNotifier.value.clear();
  _valuess.forEach((map){
    final subj = SubjectModel.fromMap(map);
    subjectlistNotifier.value.add(subj);
    subjectlistNotifier.notifyListeners();
  });
}

Future<void> deleteSubject(int id) async{
  await _db.rawDelete('DELETE FROM subject WHERE id = ?', [id]);
  getAllSubject();
}

Adding data when clicking button

import 'package:flutter/material.dart';
import 'datamodel3.dart';
import 'function3.dart';

class AddSubjectWidget extends StatelessWidget {
  AddSubjectWidget({Key? key}) : super(key: key);

  final _subController = TextEditingController();


  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: EdgeInsets.all(20),
      child: Column(
        children: [
          TextFormField(
            controller: _subController,
            decoration: InputDecoration(
                border: OutlineInputBorder(),
                hintText: 'Name'
            ),
          ),
          SizedBox(height: 20,),
          // Row(
          //   children: [
          ElevatedButton.icon(
            onPressed: () {
              onAddSubjectButtonClicked();
            },
            icon: Icon(Icons.add),
            label: Text('Add Subject'),
          ),
          SizedBox(width: 20,),
        ],
      ),
    );
  }

  Future<void> onAddSubjectButtonClicked() async {
    final _sub = _subController.text.trim();
    if (_sub.isEmpty) {
      return;
    }
    final _subject = SubjectModel(sub: _sub);
    addSubject(_subject);
  }
}

This is listing data from database

import 'package:flutter/material.dart';
import 'datamodel3.dart';
import 'function3.dart';

class ListSubjectWidget extends StatefulWidget {
  const ListSubjectWidget({Key? key}) : super(key: key);

  @override
  State<ListSubjectWidget> createState() => _ListSubjectWidgetState();
}
class _ListSubjectWidgetState extends State<ListSubjectWidget> {

  @override
  Widget build(BuildContext context) {
    return ValueListenableBuilder(
      valueListenable: subjectlistNotifier,
      builder: (BuildContext ctxs,
          List<SubjectModel> subjectList,
          Widget? child){
        return ListView.separated(
          itemBuilder: (ctxs, indexs) {
            final datass = subjectList[indexs];
            return ListTile(
              title: Text(datass.sub),
              isThreeLine: true,
              trailing: IconButton(onPressed: (){
                if (datass.id != null){
                  deleteSubject(datass.id!);
                }else{
                  print("Subject is null, unable to delete");
                }
              },
                icon: Icon(Icons.delete,color: Colors.red,),),
            );
          },
          separatorBuilder: (ctxs, indexs){
            return Divider();
          },
          itemCount: subjectList.length,
        );
      },
    );
  }
}

This is the home screen

import 'package:dropdownfield2/dropdownfield2.dart';
import 'package:flutter/material.dart';
import 'datamodel3.dart';
import 'function3.dart';
import 'list3.dart';

class Subscreen extends StatefulWidget {
  const Subscreen({Key? key}) : super(key: key);

  @override
  State<Subscreen> createState() => _SubscreenState();
}

class _SubscreenState extends State<Subscreen> {
  final subjectselected = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Select Subject"),
        centerTitle: true,
      ),
      body: Container(
        // height: MediaQuery.of(context).size.height,
        // width: MediaQuery.of(context).size.width,
        padding: EdgeInsets.all(20),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            SizedBox(height: 20,),
            DropDownField(
              controller: subjectselected,
              hintText: "Select Subject",
              enabled: true,
              items: subject,
              itemsVisibleInDropdown: 5,
              onValueChanged: (value){
                setState(() {
                  selectsubject = value;
                });
              },
            ),
            SizedBox(height: 30,),
                  Text(
                selectsubject,
              style: TextStyle(
                fontSize: 20
              ),
              textAlign: TextAlign.center,),
            TextFormField(
              controller: subjectselected,
            ),
            ElevatedButton.icon(
              onPressed: () {
                // onAddSubjectButtonClicked();
              },
              icon: Icon(Icons.add),
              label: Text('Add Subject'),
            ),
            // Expanded(child: ListSubjectWidget()),
            Container(
                height:100,
                width: 100,
                child: ListSubjectWidget()),
                  // ListSubjectWidget()
                  // Expanded(child: ListSubjectWidget()),
            ]
        ),
      ),
    );
  }
}


String selectsubject = "";
final subjectselected = TextEditingController();

  List<String> subject = [
    "Maths",
    "Physics",
    "Chemistry",
    "Biology",
    "Electronics",
    "English",
    "Hindi",
    "Social",
    "PT",
    "Computer",
  ];

Future<void> onAddSubjectButtonClicked() async {
  final _sub = subjectselected.text.trim();
  if (_sub.isEmpty) {
    return;
  }
  final _subject = SubjectModel(sub: _sub);
  addSubject(_subject);
}

Please help me with these error.

  • Somewhere, you are giving null value to a Text Widget. Make sure that the value you provided via variable to Text Widget is not null. – Muhammad Usama Siddiqui Mar 22 '22 at 11:00
  • You should check null safety, Text(value ?? ''), – ajay Mar 22 '22 at 12:07
  • Does this answer your question? [A non-null String must be provided to a Text widget](https://stackoverflow.com/questions/56351386/a-non-null-string-must-be-provided-to-a-text-widget) – ajay Mar 22 '22 at 12:07
  • No it shows like this......."Warning: Operand of null-aware operation '??' has type 'String' which excludes null." – Najil Nizarin VB Mar 23 '22 at 04:09
  • Can you describe exactly what isn't working for you about the existing question/answer? – Ryan M Mar 24 '22 at 07:50

0 Answers0