LCOV - code coverage report
Current view: top level - src/providers - canvas_provider.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 40 40 100.0 %
Date: 2021-10-03 15:54:23 Functions: 0 0 -

          Line data    Source code
       1             : import 'dart:async';
       2             : 
       3             : import 'package:flutter/material.dart';
       4             : import 'package:widgetbook/src/models/organizers/story.dart';
       5             : import 'package:widgetbook/src/providers/canvas_state.dart';
       6             : import 'package:widgetbook/src/providers/provider.dart';
       7             : import 'package:widgetbook/src/repositories/selected_story_repository.dart';
       8             : import 'package:widgetbook/src/repositories/story_repository.dart';
       9             : 
      10             : class CanvasBuilder extends StatefulWidget {
      11             :   final Widget child;
      12             :   final StoryRepository storyRepository;
      13             :   final SelectedStoryRepository selectedStoryRepository;
      14             : 
      15           1 :   const CanvasBuilder({
      16             :     Key? key,
      17             :     required this.child,
      18             :     required this.storyRepository,
      19             :     required this.selectedStoryRepository,
      20           1 :   }) : super(key: key);
      21             : 
      22           1 :   @override
      23           1 :   _CanvasBuilderState createState() => _CanvasBuilderState();
      24             : }
      25             : 
      26             : class _CanvasBuilderState extends State<CanvasBuilder> {
      27             :   CanvasState state = CanvasState.unselected();
      28             :   late CanvasProvider provider;
      29             : 
      30           1 :   void setProvider() {
      31           2 :     provider = CanvasProvider(
      32           2 :       storyRepository: widget.storyRepository,
      33           2 :       selectedStoryRepository: widget.selectedStoryRepository,
      34           1 :       state: state,
      35           1 :       onStateChanged: (CanvasState state) {
      36           2 :         setState(() {
      37           1 :           this.state = state;
      38           1 :           setProvider();
      39             :         });
      40             :       },
      41           2 :       child: widget.child,
      42             :     );
      43             :   }
      44             : 
      45           1 :   @override
      46             :   void initState() {
      47           1 :     setProvider();
      48           5 :     widget.storyRepository.getStreamOfItems().forEach((_) {
      49           2 :       provider.updateStory();
      50             :     });
      51             : 
      52           1 :     super.initState();
      53             :   }
      54             : 
      55           1 :   @override
      56             :   Widget build(BuildContext context) {
      57           1 :     return provider;
      58             :   }
      59             : }
      60             : 
      61             : class CanvasProvider extends Provider<CanvasState> {
      62             :   final StoryRepository storyRepository;
      63             :   final SelectedStoryRepository selectedStoryRepository;
      64             : 
      65           1 :   const CanvasProvider({
      66             :     required this.storyRepository,
      67             :     required this.selectedStoryRepository,
      68             :     required CanvasState state,
      69             :     required ValueChanged<CanvasState> onStateChanged,
      70             :     required Widget child,
      71             :     Key? key,
      72           1 :   }) : super(
      73             :           state: state,
      74             :           onStateChanged: onStateChanged,
      75             :           child: child,
      76             :           key: key,
      77             :         );
      78             : 
      79           1 :   static CanvasProvider? of(BuildContext context) {
      80           1 :     return context.dependOnInheritedWidgetOfExactType<CanvasProvider>();
      81             :   }
      82             : 
      83           1 :   void updateStory() {
      84           2 :     if (state.isStorySelected) {
      85           3 :       var currentStoryPath = state.selectedStory!.path;
      86           2 :       if (storyRepository.doesItemExist(currentStoryPath)) {
      87           2 :         var story = storyRepository.getItem(currentStoryPath);
      88           1 :         selectStory(story);
      89             :       } else {
      90           1 :         deselectStory();
      91             :       }
      92             :     }
      93             :   }
      94             : 
      95           1 :   void selectStory(Story? story) {
      96           2 :     selectedStoryRepository.setItem(story);
      97           1 :     emit(
      98           1 :       CanvasState(
      99             :         selectedStory: story,
     100             :       ),
     101             :     );
     102             :   }
     103             : 
     104           1 :   void deselectStory() {
     105           2 :     selectedStoryRepository.deleteItem();
     106           1 :     emit(
     107           1 :       CanvasState.unselected(),
     108             :     );
     109             :   }
     110             : }

Generated by: LCOV version 1.15