Flutter flatter如何将数据从sqflite填充到下拉列表

Flutter 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 '

我在stackoverflow中看到的问题与我的问题非常相似,但这些问题和答案对我来说不起作用。所以我的问题是如何将数据从sqflite填充到下拉列表。下面是我写的dart文件。请帮我解答这个问题

dbhelper.dart

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(),

              ),
            ),