Как написать тест виджета для экрана, который использует провайдера с использованием макета или макета?

как писать тесты виджетов с использованием макета или макета для экрана, который вызывает API от провайдера в initState?

экран ниже вызывает API от провайдера в initState. Итак, здесь я хочу написать тестовые примеры для проверки состояния экрана, такого как пустой, загрузка, загруженные данные и состояние ошибки.

Экранный виджет -

      class ListScreen extends StatefulWidget {
 const ListScreen({Key? key}) : super(key: key);

 @override
 State<ListScreen> createState() => _ListScreenState();
}

class _ListScreenState extends State<ListScreen> {
 late HomeProvider _homeProvider;
 late Future _list;

 @override
 void initState() {
   _homeProvider = Provider.of(context, listen: false);

   WidgetsBinding.instance.addPostFrameCallback((_) {
     _list = _homeProvider.getTheData(context);
   });

   super.initState();
 }

 @override
 Widget build(BuildContext context) {
   return Scaffold(
     appBar: AppBar(),
     body: Consumer<HomeProvider>(
       builder: (context, provider, _) {
         return provider.isLoading
             ? const Center(
                 child: CircularProgressIndicator(),
               )
             : provider.products.isNotEmpty
                 ? ListView.builder(
                     itemCount: provider.products.length,
                     itemBuilder: (context, index) {
                       var product = provider.products[index];
                       String name = product['title'];
                       return ListTile(
                         title: Text(name),
                       );
                     },
                   )
                 : const Center(
                     child: Text('List is Empty'),
                   );
       },
     ),
   );
 }
}

Класс провайдера -

      class HomeProvider extends ChangeNotifier {
 final HttpClientHelper httpClientHelper;
 HomeProvider({
   required this.httpClientHelper,
 });

 bool isLoading = false;
 List<Map<String,dynamic>> products = [];

 Future<void> getTheData(BuildContext context) async {
   isLoading = true;
   notifyListeners();
   try {
     var res = await httpClientHelper.get("https://fakestoreapi.com/products");
     if (res.status) {
       products = List<Map<String,dynamic>>.from(res.data);
     } else {
       products = [];
     }
   } catch (e) {
     debugPrint(e.toString());
     products = [];
   }

   isLoading = false;
   notifyListeners();
 }

0 ответов

Другие вопросы по тегам