Skip to content
Snippets Groups Projects
tutorial.dart 1.30 KiB
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:tutorial_coach_mark/tutorial_coach_mark.dart';

import '../data/models/app_cubit.dart';
import 'ui_helpers.dart';

abstract class Tutorial {
  Tutorial({
    required this.tutorialId,
    required this.context,
  }) {
    _tutorial = TutorialCoachMark(
      targets: createTargets(),
      // colorShadow: Colors.red,
      textSkip: tr('skip').toUpperCase(),
      // hideSkip: true,
      // paddingFocus: 10,
      // opacityShadow: 0.8,
      onFinish: () {
        context.read<AppCubit>().onFinishTutorial(tutorialId);
      },
      onClickTarget: (TargetFocus target) {},
      onClickTargetWithTapPosition:
          (TargetFocus target, TapDownDetails tapDetails) {},
      onClickOverlay: (TargetFocus target) {},
      onSkip: () {
        context.read<AppCubit>().onFinishTutorial(tutorialId);
      },
    );
  }

  late TutorialCoachMark _tutorial;
  final BuildContext context;
  final String tutorialId;
  bool showAlways = false;

  List<TargetFocus> createTargets();

  void showTutorial() {
    if ((inDevelopment && showAlways) ||
        !context.read<AppCubit>().wasTutorialShown(tutorialId)) {
      _tutorial.show(context: context);
    }
  }
}