flutter_introduction/lib/flutter_introduction.dart

75 lines
1.9 KiB
Dart
Raw Normal View History

2022-11-01 08:27:11 +01:00
// SPDX-FileCopyrightText: 2022 Iconica
//
// SPDX-License-Identifier: BSD-3-Clause
2022-10-07 15:31:07 +02:00
library flutter_introduction;
import 'package:flutter/material.dart';
import 'package:flutter_introduction_service/flutter_introduction_service.dart';
import 'package:flutter_introduction_widget/flutter_introduction_widget.dart';
export 'package:flutter_introduction_widget/flutter_introduction_widget.dart';
export 'package:flutter_introduction_service/flutter_introduction_service.dart';
class Introduction extends StatefulWidget {
const Introduction({
required this.navigateTo,
required this.options,
2022-10-21 14:03:35 +02:00
this.child,
2022-10-07 15:31:07 +02:00
this.physics,
this.service,
super.key,
});
final Function navigateTo;
final IntroductionService? service;
final IntroductionOptions options;
final ScrollPhysics? physics;
2022-10-21 14:03:35 +02:00
final Widget? child;
2022-10-07 15:31:07 +02:00
@override
State<Introduction> createState() => _IntroductionState();
}
class _IntroductionState extends State<Introduction> {
late IntroductionService _service;
@override
void initState() {
super.initState();
if (widget.service == null) {
_service = IntroductionService();
} else {
_service = widget.service!;
}
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: _service.shouldShow(),
builder: (context, snapshot) {
if (snapshot.data == null || snapshot.data!) {
2022-10-07 15:31:07 +02:00
return IntroductionScreen(
options: widget.options,
onComplete: () async {
_service.onComplete();
widget.navigateTo();
},
physics: widget.physics,
2022-10-07 15:59:02 +02:00
onSkip: () async {
2022-10-07 15:31:07 +02:00
_service.onComplete();
widget.navigateTo();
},
);
} else {
2022-10-21 14:03:35 +02:00
WidgetsBinding.instance!.addPostFrameCallback((_) {
widget.navigateTo();
});
return widget.child ?? const CircularProgressIndicator();
2022-10-07 15:31:07 +02:00
}
},
);
}
}