showTour static method
Future<void>
showTour(
- BuildContext context,
- Config config, {
- required List tours,
- required ScrollController scrollController,
Implementation
static Future<void> showTour(BuildContext context, Config config,
{required List<dynamic> tours, required ScrollController scrollController
// required Widget widget,
}) async {
var isDarkTheme = Theme.of(context).brightness == Brightness.dark;
List<TargetFocus> targets = [];
for (int i = 0; i < tours.length; i++) {
String body = tours[i]["body"].toString();
final key = config.keys[tours[i]["element"].toString()];
await scrollToTarget(key, scrollController);
WebViewController webViewController = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setNavigationDelegate(
NavigationDelegate(
onProgress: (int progress) {
// Update loading bar.
},
onPageStarted: (String url) {},
onPageFinished: (String url) {},
onHttpError: (HttpResponseError error) {},
onWebResourceError: (WebResourceError error) {},
onNavigationRequest: (NavigationRequest request) {
if (request.url.startsWith('https://www.youtube.com/')) {
return NavigationDecision.prevent;
}
return NavigationDecision.navigate;
},
),
);
targets.add(
TargetFocus(
identify: "",
shape: tours[i]["shape"].toString().toLowerCase() == "rect"
? ShapeLightFocus.RRect
: ShapeLightFocus.Circle,
keyTarget: config.keys[tours[i]["element"].toString()],
alignSkip: Alignment.topRight,
enableOverlayTab: true,
contents: [
TargetContent(
align: ContentAlign.bottom,
builder: (context, TCMcontroller) {
return Column(
children: [
Container(
decoration: BoxDecoration(
color: tours[i]["background"] != null
? hexToColor(tours[i]["background"])
: isDarkTheme
? Colors.black
: Colors.white,
borderRadius: BorderRadius.circular(borderRadius),
),
padding: EdgeInsets.all(borderRadius),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
tours[i]["title"].toString(),
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: tours[i]["textColor"] != null
? hexToColor(tours[i]["textColor"])
: isDarkTheme
? Colors.white
: Colors.black,
),
),
// Text(tours[i]["description"].toString()),
body.startsWith("http")
? SizedBox(
height: 200,
width: 200,
child: WebViewWidget(
controller: webViewController),
)
: Text(
tours[i]["body"].toString(),
style: TextStyle(
color: tours[i]["textColor"] != null
? hexToColor(tours[i]["textColor"])
: isDarkTheme
? Colors.white
: Colors.black,
),
),
],
),
),
const SizedBox(height: 20),
previousAndNextButtons(
i, tours.length - 1, tours, config, scrollController),
],
);
},
),
],
),
);
if (body.startsWith("http")) {
webViewController.loadRequest(Uri.parse(body));
}
}
if (targets.isNotEmpty && tours.isNotEmpty) {
final firstKey = config.keys[tours[0]["element"].toString()];
await scrollToTarget(firstKey, scrollController);
}
PagePilot.initTutorialCoachMark(targets);
tutorialCoachMark.show(context: context);
}