【问题标题】:How can I get list of items from existing database and view it on flutter?如何从现有数据库中获取项目列表并在 Flutter 上查看?
【发布时间】:2021-03-29 16:30:52
【问题描述】:

我使用 sqflite Open an asset database 将我现有的 database.db 文件添加到我的项目中 (我将此添加到我的 db_helper.dart 文件中的 initializeDB() 函数中。) 没有遇到错误,一切正常,但是...... 我想列出项目,但如何从数据库表中获取数据到 ListView? 哪些函数必须添加到db_helper.dart 以及如何从main.dart 调用它们?

这是模型Country.dart文件:

  int _id;
  String _countryName;
  String _image;

  //Constructor
  Countries(this._id, this._countryName, this._image);

  //Gettters
  int get id => _id;
  String get name => _countryName;
  String get image => _image;

  // Extract a Product Object from a Map Oject
  Countries.fromMapObject(Map<String, dynamic> map) {
    this._id = map['country_id'];
    this._countryName = map['country_name'];
    this._image = map['image'];
  }```

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    在您的 db_helper.dart 文件中添加一个函数来执行查询并将结果转换为您的模型。

     Future<List<Countries>> getCountries() async {
        List<Map> list = await _db.rawQuery('SELECT * FROM Countries');
        return list.map((countries) => Countries.fromMapObject(countries)).toList();
      }
    

    然后你可以从你的 main.dart 初始化你的数据库,然后在未来的构建器中运行查询。

    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      //Initialize class in db_helper.dart file and initialize Database
      final dbHelper = DBHelper()
      @override
      void initState() {
        dbHelper.initializeDB();
        super.initState();
      }
    
      @override
      void dispose() {
        //close Database Connection
        dbHelper.closeDB();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: FutureBuilder<Countries>(
            future: dbHelper.getCountries(),
            builder: (context, snapshot) {
              return ListView.builder(
                itemCount: snapshot.data.length,
                itemBuilder: (context,index){
                  ListTile(leading: Image.network(snapshot.data[index].image),title: Text(snapshot.data[index].name),)
                },
              );
            }
          ),
        );
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-24
      • 2020-08-18
      • 1970-01-01
      • 2019-02-19
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多