You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
RSGDoctorApp/lib/widgets/shared/user-guid/app_showcase_widget.dart

98 lines
2.1 KiB
Dart

/*
* Copyright © 2020, Simform Solutions
* All rights reserved.
* https://github.com/simformsolutions/flutter_showcaseview
*/
/*
Customized By: Ibrahim Albitar
*/
import 'package:flutter/material.dart';
class ShowCaseWidget extends StatefulWidget {
final Builder builder;
final VoidCallback onFinish;
const ShowCaseWidget({@required this.builder, this.onFinish});
static activeTargetWidget(BuildContext context) {
return context
.dependOnInheritedWidgetOfExactType<_InheritedShowCaseView>()
.activeWidgetIds;
}
static ShowCaseWidgetState of(BuildContext context) {
ShowCaseWidgetState state =
context.findAncestorStateOfType<ShowCaseWidgetState>();
if (state != null) {
return context.findAncestorStateOfType<ShowCaseWidgetState>();
} else {
throw Exception('Please provide ShowCaseView context');
}
}
@override
ShowCaseWidgetState createState() => ShowCaseWidgetState();
}
class ShowCaseWidgetState extends State<ShowCaseWidget> {
List<GlobalKey> ids;
int activeWidgetId;
void startShowCase(List<GlobalKey> widgetIds) {
setState(() {
this.ids = widgetIds;
activeWidgetId = 0;
});
}
void completed(GlobalKey id) {
if (ids != null && ids[activeWidgetId] == id) {
setState(() {
++activeWidgetId;
if (activeWidgetId >= ids.length) {
_cleanupAfterSteps();
if (widget.onFinish != null) {
widget.onFinish();
}
}
});
}
}
void dismiss() {
setState(() {
_cleanupAfterSteps();
});
}
void _cleanupAfterSteps() {
ids = null;
activeWidgetId = null;
}
@override
Widget build(BuildContext context) {
return _InheritedShowCaseView(
child: widget.builder,
activeWidgetIds: ids?.elementAt(activeWidgetId),
);
}
}
class _InheritedShowCaseView extends InheritedWidget {
final GlobalKey activeWidgetIds;
_InheritedShowCaseView({
@required this.activeWidgetIds,
@required child,
}) : super(child: child);
@override
bool updateShouldNotify(_InheritedShowCaseView oldWidget) =>
oldWidget.activeWidgetIds != activeWidgetIds;
}