必须向文本小部件提供非空字符串。我知道这个问题有很多答案,但它对我不起作用
我是颤振新手,我知道这个问题有很多答案,但它对我不起作用,请帮助我。这些是我的代码
这是我的数据模型
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);
}
}
这是数据库助手
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();
}
单击按钮时添加数据
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);
}
}
这是列出数据库中的数据
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,
);
},
);
}
}
这是主屏幕
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);
}
请帮助我解决这些错误。
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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论