Closed. This question is
not reproducible or was caused by typos。它当前不接受答案。
想改善这个问题吗?更新问题,以便将其作为
on-topic用于堆栈溢出。
3个月前关闭。
Improve this question
我尝试实现此示例,每次遇到相同的错误
E/flutter (18880): #18855 GestureBinding._handlePointerDataPacket
(package:flutter/src/g E/flutter (18880):
[ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception:
NoSuchMethodError: The method 'insert' was called on null. E/flutter
(18880): Receiver: null E/flutter (18880): Tried calling:
insert("Person ", _LinkedHashMap len:4) E/flutter (18880): #0
Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
E/flutter (18880): #1 DbHelper.addPersonToDatabase
package:db_sqflite/helper/db_helper.dart:30 E/flutter (18880):
<asynchronous suspension
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'dart:async';
class DbHelper {
DbHelper._();
static final DbHelper dbHelper = DbHelper._();
Future <Database> _database;
Future<Database> get database async {
if (database != null) return _database;
_database = getDatabaseInstance();
return _database;
}
Future<Database> getDatabaseInstance() async {
var databasePath = await getDatabasesPath();
String path = join(databasePath, 'person.db');
final Future<Database> database = openDatabase(path, version: 1,
onCreate: (Database db, int version) async {
await db.execute(
"CREATE TABLE Person(id INTEGER PRIMARY KEY , name TEXT , email TEXT ,carModel TEXT )");
});
return database;
}
Future<List<Person>> getAllPersons() async {
final db = await database;
var result = await db.query('Person');
List<Person> list = result.map((e) => Person.fromMap(e)).toList();
return list;
}
Future<Person> getPersonWithId(int id) async {
final db = await database;
var result = await db.query("Person", where: "id=?", whereArgs: [id]);
return result.isEmpty ? Person.fromMap(result.first) : null;
}
addPersonToDatabase(Person person) async {
final db = await database;
var raw = await db.insert(
"Person",
person.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace,
);print('$raw');
return raw;
}
deletePersonWithId(int id )async{
final db = await database;
var result = db.delete("person",where:"id=?",whereArgs:[id]);
print('$id');
return result;
}
deleteAllPersons()async{
final db = await database;
db.delete("person");
}
updatePerson(Person person)async{
final db = await database;
var result = db.update("Person", person.toMap(),where: "id=?",whereArgs: [person.id]);
print('$result');
return result;
}
}
class Person {
int id;
String name;
String email;
String carModel;
Person({this.id, this.name, this.email, this.carModel});
Person.withOutId({this.name, this.email, this.carModel});
Map<String, dynamic> toMap() =>
{'id': id, 'name': name, 'email': email, 'carModel': carModel};
factory Person.fromMap(Map<String, dynamic> map) => Person(
id: map['id'],
name: map['name'],
email: map['email'],
carModel: map['carModel']);
}
然后这是要继续的屏幕
import 'package:flutter/material.dart';
import 'package:db_sqflite/helper/db_helper.dart';
class AddPerson extends StatefulWidget {
final Person person;
AddPerson({this.person});
@override
_AddPersonState createState() => _AddPersonState();
}
class _AddPersonState extends State<AddPerson> {
TextEditingController nameController = TextEditingController();
TextEditingController emailController = TextEditingController();
TextEditingController carModelController = TextEditingController();
final _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Person List')),
body: Form(
key: _formKey,
child: Padding(
padding: EdgeInsets.all(8.0),
child: SingleChildScrollView(
child: Column(
children: [
TextFormField(
controller: nameController,
),
TextFormField(
controller: emailController,
),
TextFormField(
controller: carModelController,
),
RaisedButton(
child: Text('Submit'),
onPressed: () async {
var res= await DbHelper.dbHelper.addPersonToDatabase(Person(
name: nameController.text,
email: emailController.text,
carModel: carModelController.text));
FormState().save();
print(res);
})
],
),
),
),
),
);
}
}
这是主要功能
import 'package:db_sqflite/add_person.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: AddPerson(),
);
}
}
这是 flutter 医生-v
[√] Flutter (Channel beta, 1.20.0-7.2.pre, on Microsoft Windows [Version 10.0.19041.388], locale en-US)
• Flutter version 1.20.0-7.2.pre at D:\flutter
• Framework revision a2bde82fbd (5 days ago), 2020-07-18 15:16:35 -0700
• Engine revision 60b269d898
• Dart version 2.9.0 (build 2.9.0-21.2.beta)
[√] Android toolchain - develop for Android devices (Android SDK version 30.0.0)
• Android SDK at D:\android\Android\SDK
• Platform android-30, build-tools 30.0.0
• ANDROID_HOME = D:\android\Android\SDK
• Java binary at: D:\android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
• All Android licenses accepted.
[√] Android Studio (version 4.0)
• Android Studio at D:\android\Android Studio
• Flutter plugin version 47.1.2
• Dart plugin version 193.7361
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
[√] IntelliJ IDEA Community Edition (version 2019.3)
• IntelliJ at D:\JetBrains\IntelliJ IDEA Community Edition 2019.3.1
• Flutter plugin version 42.1.4
• Dart plugin version 193.6015.9
[√] Connected device (1 available)
• Android SDK built for x86 (mobile) • emulator-5556 • android-x86 • Android 10 (API 29) (emulator)
• No issues found!
为什么会这样?