首页 > 解决方案 > 收听 FutureProvider 的变化

问题描述

我一直试图找到一些关于ListView.builder如何使用FutureProvider. 我的目标是拥有一个搜索功能,我可以在其中查询SQFlite并返回一个新列表,该列表将重新分配给ListView.builder. 我的代码运行良好,但似乎我在FutureProvider. 我错过了什么?

主要.dart

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        FutureProvider<List<BillingData>>(
          create: (context) => BillingDataService().getBillingData(),
        ),
      ],
      child: MaterialApp(),
    );
  }
}

billing_data_service.dart

  Future<List<BillingData>> getBillingData() async{
    var dbClient = await locator.get<SQLService>().getDatabase;
    var billingData = await dbClient.rawQuery(//some query here);
    
    return billingData.map((e) => BillingData.fromDB(e)).toList();
  }


  Future<List<BillingData>> searchConcessionaire(String value) async{
    var dbClient = await locator.get<SQLService>().getDatabase;
    var searchResult = await dbClient.rawQuery(//some search query);

    return searchResult.map((e) => BillingData.fromDB(e)).toList();
  }

giveaire_screen.dart

Widget build(BuildContext context) {
  List<BillingData> billingData = Provider.of<List<BillingData>>(context);
  return Scaffold(
      appBar: AppBar(),
      body: (billingData == null)
              ? Center(
            child: CircularProgressIndicator(),
          )
              : ListView.builder(
              itemCount: billingData.length,
              itemBuilder: (context, index) {
                return ConcessionaireCard(
                    index: index,
                    fullName: billingData[index].fullName,
                    ctName: billingData[index].ctName,
                    mtrNo: billingData[index].mtrNo,
                    prevReading: billingData[index].prevReading,
                    curReading: billingData[index].curReading,
                );
              }),
        ,
      );
}

标签: flutterflutter-provider

解决方案


推荐阅读