在 flutter 中使用来自 sqlite 数据库的数据填充下拉菜单

Populating dropdown menu with data from sqlite database in flutter

我正在开发一个列表应用,想在下拉菜单按钮中加载主页的任务类别。

我已经使用 SQflite 将类别保存在 table。

当我点击下拉菜单时,菜单上似乎没有加载值。这只是一个空列表。

代码如下:

class _HomeState extends State<Home> {

  TodoService _todoService;
  var _selectedValue;

  var _categories = List<DropdownMenuItem>();

  List<Todo>_todoList=List<Todo>();
  final GlobalKey<ScaffoldState> _globalKey=GlobalKey<ScaffoldState>();
   
  @override
  initState(){
    super.initState();
    getAllTodos();
  }
  _loadCategories() async {
    var _categoryService = CategoryService();
    var categories = await _categoryService.readCategory();
    categories.forEach((category) {
      setState(() {
        _categories.add(DropdownMenuItem(
          child: Text(category['name']),
          value: category['name'],
        ));
      });
    });
  }

  getAllTodos()async{
    _todoService=TodoService();
    _todoList=List<Todo>();

    var todos= await _todoService.readTodo();

    todos.forEach((todo){
      setState(() {
        var model=Todo();
        model.id=todo['id'];
        model.title=todo['title'];
        model.dueDate=todo['dueDate'];
        model.category=todo['category'];
        model.isFinished=todo['isFinished'];
        _todoList.add(model);
      });
    });
  }
 
 


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _globalKey,
      appBar: AppBar(
        actions: <Widget>[
          DropdownButton(
            value: _selectedValue,
            items: _categories,
            onChanged: (value) {
              setState(() {
                _selectedValue = value;
                _loadCategories();
              });
            },
          ),

您忘记将 List<Object> 映射到 DropdownButtonitems 中。

DropdownButton _dropdownButton(List<Object> categoriesList) {
  return DropdownButton(
    value: _selectedValue,
    onChanged: (dynamic newValue) {
      setState(() {
        _selectedValue = newValue;
      });
    },
    items: categoriesList
          .map<DropdownMenuItem<Object>>((Object value) {
        return DropdownMenuItem<Object>(
          value: value,
          child: Text(value.getTxt()), // Replace this with getter for the value you want to display
        );
      }).toList(),
    );
  }

你查过服务电话了吗? 也许,SQFlite 数据库中没有填充您要检索的值。

首先尝试使用一组虚拟值,例如:

items: <String>['One', 'Two', 'Free', 'Four']
          .map<DropdownMenuItem<String>>((String value) {
        return DropdownMenuItem<String>(
          value: value,
          child: Text(value),
        );
      }).toList(),

如果上述方法有效,请确保通过服务调用调用 insert 查询来填充 table。

或者您可以使用 SQFlite 的内置支持来执行原始插入。这意味着您可以使用 SQL 字符串使用 rawInsert().