除非弹出屏幕并重新加载,否则无状态小部件将不显示提供程序数据

时间:2020-10-21 11:32:19

标签: flutter dart

我有一个无状态的小部件,它显示ListTiles的列表。 它从提供者那里获取数据并将其设置为最终数据。

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import '../providers/inspections.dart';
import '../widgets/inspection_list_tile.dart';

class ExistingInspectionsScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    Provider.of<Inspections>(context, listen: false).fetchAndSetInspections();
    final inspections =
        Provider.of<Inspections>(context, listen: false).inspections;
    return Scaffold(
      appBar: AppBar(
        title: Text('Previous Inspections'),
      ),
      body: Container(
        child: ListView.builder(
            itemCount: inspections.length,
            itemBuilder: (context, index) {
              return InspectionListTile(
                inspection: inspections[index],
                onTap: () {
                  Navigator.pushNamed(context, '/sections_list_screen',
                      arguments: {'report': inspections[index]});
                },
              );
            }),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          return Navigator.pushNamed(context, '/create_inspection_screen');
        },
        child: Icon(Icons.add),
      ),
    );
  }
}

我加载此屏幕,列表为空,但是如果我弹出屏幕并重新加载列表,则该列表存在。 如何获取数据以在屏幕的第一次加载时显示。尽管尽管fetchAndSetInspections是提供程序中的异步方法,但它会使应用程序等待从sqlite数据库中检索数据。

import 'package:flutter/material.dart';

import '../models/inspection.dart';
import '../helpers/inspection_db_helper.dart';

class Inspections with ChangeNotifier {
  List<Inspection> _inspections = [];

  List<Inspection> get inspections {
    return [..._inspections];
  }

  Future<void> fetchAndSetInspections() async {
    final InspectionDBHelper inspectionDBHelper = InspectionDBHelper();
    _inspections = await inspectionDBHelper.getInspections();
    notifyListeners();
  }
}

这似乎吸引了我很多,而且我似乎无法掌握发生的情况。

请帮助。

0 个答案:

没有答案