#flutter
Вопрос:
я пытаюсь ввести текстовое поле в данные sqflite, но получаю это сообщение об ошибке, в котором отсутствует конкретная реализация «State.build». Попробуйте реализовать отсутствующий метод или сделайте класс абстрактным. может ли кто-нибудь помочь мне, пожалуйста
Полный пример с соответствующим параметром StatefulWidget
import 'package:flutter/material.dart';
import 'dart:async';
import '../sql.dart';
class AddItem extends StatefulWidget {
const AddItem({Key? key}) : super(key: key);
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<AddItem> {
// All journals
List<Map<String, dynamic>> _journals = [];
bool _isLoading = true;
// This function is used to fetch all data from the database
void _refreshJournals() async {
final data = await SQLHelper.getItems();
setState(() {
_journals = data;
_isLoading = false;
});
}
@override
void initState() {
super.initState();
_refreshJournals(); // Loading the diary when the app starts
}
TextEditingController _nameController = new TextEditingController();
TextEditingController _mobileController = new TextEditingController();
TextEditingController _adressController = new TextEditingController();
// This function will be triggered when the floating button is pressed
// It will also be triggered when you want to update an item
void _showForm(int? id) async {
if (id != null) {
// id == null -> create new item
// id != null -> update an existing item
final existingJournal =
_journals.firstWhere((element) => element['id'] == id);
_nameController.text = existingJournal['name'];
_mobileController.text = existingJournal['mobile'];
_adressController.text = existingJournal['adress'];
}
// Insert a new journal to the database
Future<void> _addItem() async {
await SQLHelper.createItem(
_nameController.text, _mobileController.text, _adressController.text);
_refreshJournals();
}
// Update an existing journal
Future<void> _updateItem(int id) async {
await SQLHelper.updateItem(id, _nameController.text,
_mobileController.text, _adressController.text);
_refreshJournals();
}
// Delete an item
void _deleteItem(int id) async {
await SQLHelper.deleteItem(id);
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text('Successfully deleted a journal!'),
));
_refreshJournals();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Jaber'),
),
body: Container(
padding: EdgeInsets.all(15),
width: double.infinity,
height: 300,
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
TextField(
controller: _nameController,
decoration: InputDecoration(hintText: 'Name'),
),
SizedBox(
height: 10,
),
TextField(
controller: _mobileController,
decoration: InputDecoration(hintText: 'mobile'),
keyboardType: TextInputType.number,
),
TextField(
controller: _adressController,
decoration: InputDecoration(hintText: 'adress'),
),
SizedBox(
height: 20,
),
ElevatedButton(
onPressed: () async {
// Save new journal
if (id == null) {
await _addItem();
}
if (id != null) {
await _updateItem(id);
}
// Clear the text fields
_nameController.text = '';
_mobileController.text = '';
_adressController.text = '';
// Close the bottom sheet
Navigator.of(context).pop();
},
child: Text(id == null ? 'Create New' : 'Update'),
)
],
),
));
}
}
}
Это мой код, но я никогда не меняю страницу . Ошибка = Неопределенное имя «контекст».
Попробуйте исправить имя на то, которое определено, или определить имя.