Flutter flatter如何将数据从sqflite填充到下拉列表
我在stackoverflow中看到的问题与我的问题非常相似,但这些问题和答案对我来说不起作用。所以我的问题是如何将数据从sqflite填充到下拉列表。下面是我写的dart文件。请帮我解答这个问题 dbhelper.dartFlutter flatter如何将数据从sqflite填充到下拉列表,flutter,sqflite,Flutter,Sqflite,我在stackoverflow中看到的问题与我的问题非常相似,但这些问题和答案对我来说不起作用。所以我的问题是如何将数据从sqflite填充到下拉列表。下面是我写的dart文件。请帮我解答这个问题 dbhelper.dart import 'package:abc/model/manage_categories.dart'; import 'package:sqflite/sqflite.dart'; import 'dart:async'; import 'dart:io'; import '
import 'package:abc/model/manage_categories.dart';
import 'package:sqflite/sqflite.dart';
import 'dart:async';
import 'dart:io';
import 'package:path_provider/path_provider.dart';
class DatabaseHelper {
static DatabaseHelper _databaseHelper; // Singleton DatabaseHelper
static Database _database; // Singleton Database
String categoriesTable = 'categories_table';
String colId = 'id';
String colTitle = 'title';
String colDate = 'date';
DatabaseHelper._createInstance(); // Named constructor to create instance of DatabaseHelper
factory DatabaseHelper() {
if (_databaseHelper == null) {
_databaseHelper = DatabaseHelper._createInstance(); // This is executed only once, singleton object
}
return _databaseHelper;
}
Future<Database> get database async {
if (_database == null) {
_database = await initializeDatabase();
}
return _database;
}
Future<Database> initializeDatabase() async {
// Get the directory path for both Android and iOS to categories database.
Directory directory = await getApplicationDocumentsDirectory();
String path = directory.path + 'categoriess.db';
// Open/create the database at a given path
var categoriessDatabase = await openDatabase(path, version: 1, onCreate: _createDb);
return categoriessDatabase;
}
void _createDb(Database db, int newVersion) async {
await db.execute('CREATE TABLE $categoriesTable($colId INTEGER PRIMARY KEY AUTOINCREMENT, $colTitle TEXT, '
'$colDate TEXT)');
}
// Fetch Operation: Get all categories objects from database
Future<List<Map<String, dynamic>>> getCategoriesMapList() async {
Database db = await this.database;
// var result = await db.rawQuery('SELECT * FROM $categoriesTable order by $colTitle ASC');
var result = await db.query(categoriesTable, orderBy: '$colTitle ASC');
return result;
}
// Insert Operation: Insert a categories object to database
Future<int> insertCategories(Categories categories) async {
Database db = await this.database;
var result = await db.insert(categoriesTable, categories.toMap());
return result;
}
// Update Operation: Update a categories object and save it to database
Future<int> updateCategories(Categories categories) async {
var db = await this.database;
var result = await db.update(categoriesTable, categories.toMap(), where: '$colId = ?', whereArgs: [categories.id]);
return result;
}
Future<int> updateCategoriesCompleted(Categories categories) async {
var db = await this.database;
var result = await db.update(categoriesTable, categories.toMap(), where: '$colId = ?', whereArgs: [categories.id]);
return result;
}
// Delete Operation: Delete a categories object from database
Future<int> deleteCategories(int id) async {
var db = await this.database;
int result = await db.rawDelete('DELETE FROM $categoriesTable WHERE $colId = $id');
return result;
}
// Get number of categories objects in database
Future<int> getCount() async {
Database db = await this.database;
List<Map<String, dynamic>> x = await db.rawQuery('SELECT COUNT (*) from $categoriesTable');
int result = Sqflite.firstIntValue(x);
return result;
}
// Get the 'Map List' [ List<Map> ] and convert it to 'categories List' [ List<Categories> ]
Future<List<Categories>> getCategoriesList() async {
var categoriesMapList = await getCategoriesMapList(); // Get 'Map List' from database
int count = categoriesMapList.length; // Count the number of map entries in db table
List<Categories> categoriesList = List<Categories>();
// For loop to create a 'categories List' from a 'Map List'
for (int i = 0; i < count; i++) {
categoriesList.add(Categories.fromMapObject(categoriesMapList[i]));
}
return categoriesList;
}
}
import'包:abc/model/manage_categories.dart';
导入“包:sqflite/sqflite.dart”;
导入“dart:async”;
导入“dart:io”;
导入“package:path_provider/path_provider.dart”;
类数据库助手{
静态DatabaseHelper _DatabaseHelper;//单例DatabaseHelper
静态数据库_Database;//单例数据库
字符串categoriesTable='categories_table';
字符串colId='id';
字符串colTitle='title';
字符串colDate='date';
DatabaseHelper._createInstance();//用于创建DatabaseHelper实例的命名构造函数
FactoryDatabaseHelper(){
if(_databaseHelper==null){
_databaseHelper=databaseHelper.\u createInstance();//这只执行一次,singleton对象
}
return\u databaseHelper;
}
未来获取数据库异步{
如果(_database==null){
_数据库=等待初始化数据库();
}
返回数据库;
}
Future initializeDatabase()异步{
//获取Android和iOS到categories数据库的目录路径。
目录目录=等待getApplicationDocumentsDirectory();
字符串路径=directory.path+'categoriess.db';
//在给定路径上打开/创建数据库
var categoriesdatabase=await openDatabase(路径,版本:1,onCreate:_createDb);
返回分类数据库;
}
void\u createDb(数据库数据库数据库,int新版本)异步{
wait db.execute('CREATE TABLE$categoriesTable($colId INTEGER主键自动递增,$colTitle TEXT,'
“$colDate TEXT)”;
}
//获取操作:从数据库获取所有类别对象
将来的getCategoriesMapList()异步{
Database db=等待此数据库;
//var result=await db.rawQuery($colTitle ASC从$categoriesTable订单中选择*);
var result=await db.query(categoriesTable,orderBy:“$colTitle ASC”);
返回结果;
}
//插入操作:将类别对象插入数据库
未来insertCategories(类别)异步{
Database db=等待此数据库;
var result=await db.insert(categoriesTable,categories.toMap());
返回结果;
}
//更新操作:更新类别对象并将其保存到数据库
未来更新类别(类别)异步{
var db=wait this.database;
var result=await db.update(categoriesTable,categories.toMap(),其中:“$colId=?”,其中rgs:[categories.id]);
返回结果;
}
未来更新类别已完成(类别)异步{
var db=wait this.database;
var result=await db.update(categoriesTable,categories.toMap(),其中:“$colId=?”,其中rgs:[categories.id]);
返回结果;
}
//删除操作:从数据库中删除类别对象
未来删除类别(int-id)异步{
var db=wait this.database;
int result=await db.rawDelete('DELETE FROM$categoriesTable,其中$colId=$id');
返回结果;
}
//获取数据库中对象的类别数
Future getCount()异步{
Database db=等待此数据库;
List x=wait db.rawQuery('SELECT COUNT(*)from$categoriesTable');
int result=Sqflite.firstIntValue(x);
返回结果;
}
//获取“地图列表”[List]并将其转换为“类别列表”[List]
Future getCategoriesList()异步{
var categoriesMapList=wait getCategoriesMapList();//从数据库获取“映射列表”
int count=categoriesMapList.length;//统计数据库表中的映射条目数
List categoriesList=List();
//For循环从“地图列表”创建“类别列表”
for(int i=0;i
添加\u商店\u物品。省道
import 'package:flutter/material.dart';
import 'package:abc/database/dbhelper_categories.dart';
import 'package:abc/database/dbhelper_manage_inventory.dart';
import 'package:abc/model/Manageinventory_class.dart';
import 'package:abc/model/manage_categories.dart';
class AddStoreItem extends StatefulWidget {
final Inventory inventory;
AddStoreItem(this.inventory);
@override
State<StatefulWidget> createState() => new AddStoreItemState();
}
class AddStoreItemState extends State<AddStoreItem> {
DatabaseHelper databaseHelper = DatabaseHelper();
List<Categories> categoriesList = <Categories>[];
int count = 0;
DBProvider _db = DBProvider();
TextEditingController _itemController;
TextEditingController _quantityController;
TextEditingController _categoryController;
TextEditingController _unitController;
TextEditingController _locationController;
@override
void initState() {
super.initState();
_loadCategorieslist();
_itemController = new TextEditingController(text: widget.inventory.item);
_quantityController = new TextEditingController(text: widget.inventory.quantity);
_categoryController = new TextEditingController(text: widget.inventory.category);
_unitController = new TextEditingController(text: widget.inventory.unit);
_locationController = new TextEditingController(text: widget.inventory.location);
}
_loadCategorieslist()async{
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Add Inventory')
),
body: SingleChildScrollView(
child: Container(
margin: EdgeInsets.all(15.0),
alignment: Alignment.center,
child: Column(
children: <Widget>[
SizedBox(height: 10),
TextField(
controller: _itemController,
decoration: InputDecoration(labelText: 'Item'),
),
SizedBox(height: 10),
TextField(
controller: _quantityController,
decoration: InputDecoration(labelText: 'Quantity'),
),
SizedBox(height: 10),
DropdownButton<String>(
value: categoriesList,
items: categoriesList.map((String){
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}),
isExpanded: true,
onChanged: (value) {
print("value: $value");
},
hint: Text(
"Units",
style: TextStyle(
// color: Colors.black,
),
),
),
DropdownButton<String>(
items: [
DropdownMenuItem<String>(
value: "1",
child: Text(
"First",
),
),
DropdownMenuItem<String>(
value: "2",
child: Text(
"Second",
),
),
],
isExpanded: true,
onChanged: (value) {
print("value: $value");
},
hint: Text(
"Location",
style: TextStyle(
// color: Colors.black,
),
),
),
SizedBox(height: 10),
RaisedButton(
child: (widget.inventory.id != null) ? Text('Update') : Text('Add Inventory'),
onPressed: () {
_addInventory();
},
),
],
),
),
),
);
}
void _addInventory() {
if (widget.inventory.id != null) {
_db
.updateNote(Inventory.withId(
widget.inventory.id,
_itemController.text,
_quantityController.text,
_categoryController.text,
_unitController.text,
_locationController.text,
))
.then((_) => Navigator.pop(context, 'update'));
} else {
_db
.saveNote(Inventory(
_itemController.text,
_quantityController.text,
_categoryController.text,
_unitController.text,
_locationController.text,
))
.then((_) => Navigator.pop(context, 'save'));
}
}
}
进口“包装:颤振/材料.省道”;
导入“package:abc/database/dbhelper_categories.dart”;
导入“package:abc/database/dbhelper_manage_inventory.dart”;
导入“包装:abc/model/Manageinventory_class.dart”;
导入“包:abc/model/manage_categories.dart”;
类AddStoreItem扩展StatefulWidget{
最终库存;
AddStoreItem(本目录);
@凌驾
State createState()=>new AddStoreItemState();
}
类AddStoreItemState扩展了状态{
DatabaseHelper DatabaseHelper=DatabaseHelper();
列表分类列表=[];
整数计数=0;
DBProvider _db=DBProvider();
text编辑控制器_itemController;
TextEditingController\u quantityController;
文本编辑控制器\u类别控制器;
text编辑控制器_单元控制器;
TextEditingController\u locationController;
@凌驾
void initState(){
super.initState();
_loadCategorieslist();
_itemController=newTextEditingController(文本:widget.inventory.item);
_quantityController=新文本编辑控制器(文本:widget.inventory.quantity);
_categoryController=新文本编辑控制器(文本:widget.inventory.category);
_unitController=新文本编辑控制器(文本:widget.inventory.unit);
_locationController=新文本编辑控制器(文本:widget.inventory.location);
}
_loadCategorieslist()异步{
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“添加库存”)
),
正文:SingleChildScrollView(
子:容器(
边距:所有边缘集(15.0),
对齐:对齐.center,
子:列(
儿童:[
尺寸箱(高度:10),
文本字段(
控制器:_itemController,
装饰:输入装饰(标签文本:“项目”),
Future<List<Categories>> _loadCategorieslist() async => databaseHelper.getCategoriesMapList();
class Barcode {
String code;
String itemNo;
Barcode({
this.code,
this.itemNo,
});
Map<String, dynamic> toMap() => {
'code': code,
'itemNo': itemNo,
};
factory Barcode.fromJson(Map<String, dynamic> parsedJson) {
return Barcode(
code: parsedJson['code'],
itemNo: parsedJson['itemNo'],
);
}
}
static Future<List<Barcode>> getAll() async {
final db = await DbUtil.database;
var response = await db.query(tableName);
List<Barcode> list = response.map((c) => Barcode.fromJson(c)).toList();
return list;
}
static Future<Barcode> get(String barcode) async {
final db = await DbUtil.database;
var response = await db.query(tableName, where: "$pkName = ?", whereArgs: ['$barcode']);
return response.isNotEmpty ? Barcode.fromJson(response.first) : null;
}
var barcode = await BarcodeDb.get(scanText);
DatabaseHelper databaseHelper = DatabaseHelper();
List<Categories> categoriesList ;
Categories _category;
Center(
child: DropdownButtonFormField<Categories>(
hint: Text('Categories'),
value: _category,
onChanged: (Categories value){
setState(() {
_category = value;
});
},
items: categoriesList.map((user) => DropdownMenuItem<Categories>(
child: Text(user.cname),
value: user,
)
).toList(),
),
),