guru_sdk/guru_ui/example/lib/pages/dialog/dialog_view.dart

503 lines
22 KiB
Dart
Raw Normal View History

import 'package:example/data/settings/ui_settings.dart';
import 'package:example/generated/assets.dart';
import 'package:example/generated/l10n.dart';
import 'package:example/pages/root/root_model.dart';
import 'package:example/pages/widgets/guru_demo_page.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:guru_utils/extensions/extensions.dart';
import 'package:guru_widgets/guru_widgets.dart';
import 'package:guru_popup/guru_popup.dart';
import '../../console/console_button.dart';
import 'dialog_controller.dart';
import 'package:guru_widgets/theme/guru_theme.dart';
import 'package:guru_widgets/pages/settings/guru_settings_page.dart';
import 'package:guru_widgets/appbar/guru_app_bar.dart';
import 'package:guru_widgets/theme/guru_theme.dart';
class DialogPage extends GetWidget<DialogController> {
DialogPage({Key? key}) : super(key: key);
final RootDesignSpec designSpec = RootDesignSpec.get();
final _divider = const HorizontalDivider(
height: 0.3,
indent: 16,
endIndent: 16,
thickness: 0.5,
color: Colors.white30,
);
Widget buildEntranceItem(String text,
{String? leadingAsset, VoidCallback? onTap, TextStyle? style}) {
final List<Widget> leadingWidgets = [];
if (leadingAsset != null) {
leadingWidgets.addAll([
Image.asset(leadingAsset,
width: designSpec.itemIconSize, height: designSpec.itemIconSize),
SizedSpacer(width: designSpec.itemIconEndSpacing)
]);
}
return Material(
color: const Color(0xFF1D1D1D),
child: Ink(
height: designSpec.itemHeight,
child: InkWell(
onTap: () {
onTap?.call();
},
child: Padding(
padding: EdgeInsetsDirectional.only(
start: designSpec.itemStartSpacing,
end: designSpec.entryItemEndSpacing),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
...leadingWidgets,
Expanded(
flex: 1,
child: AutoSizeText(text,
minFontSize: 10,
style: style ??
TextStyle(
fontSize: designSpec.itemTextFontSize,
fontWeight: GuruTheme.fwMedium,
color: Colors.white)),
),
Image.asset(Assets.imagesIcArrowRight,
width: designSpec.entryItemIconSize,
height: designSpec.entryItemIconSize,
color: Colors.white),
],
),
),
),
),
);
}
Widget buildBody(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedSpacer(height: 16),
const Padding(
padding: EdgeInsets.only(left: 12),
child: Text('Daily challenge',
style: TextStyle(color: Colors.white, fontSize: 18))),
const SizedSpacer(height: 8),
buildEntranceItem("Daily challenge", onTap: () async {
await GuruPopup.instance.showStandardDialog(
title: 'Daily Challenge',
illustration: Image.asset(
"assets/images/daily_challenge/ic_dialog_main.png"),
summary: "Well done! You've unlocked the Daily Challenge!",
primaryButtonAction: 'Check it out');
}),
const SizedSpacer(height: 16),
buildEntranceItem(
"Cancelable Loading(+8s-Error; +5s-Loading; +15s-complete)",
onTap: () async {
final BehaviorSubject<String?> subject = BehaviorSubject.seeded(null);
final completer = GuruPopup.instance
.showCancelableLoading(errorStream: subject.stream);
await Future.delayed(const Duration(seconds: 8));
subject.add("Oops! Please check your Internet connection.");
await Future.delayed(const Duration(seconds: 5));
subject.add(null);
await Future.delayed(const Duration(seconds: 15));
completer?.complete();
}),
_divider,
buildEntranceItem("Simple Loading(+5s-complete)", onTap: () async {
final completer = GuruPopup.instance.showSimpleLoading();
await Future.delayed(const Duration(seconds: 5));
completer.complete();
}),
_divider,
buildEntranceItem("Feedback Loading(+5s-complete)", onTap: () async {
final successStream = Stream.fromFuture(
Future.delayed(const Duration(seconds: 4)).then((_) => true));
final completer = GuruPopup.instance.showFeedbackLoading(
successStream: successStream,
feedbackText: "short feedback text");
await Future.delayed(const Duration(seconds: 7));
completer.complete();
}),
_divider,
buildEntranceItem("no title + no summary", onTap: () async {
await GuruPopup.instance.showPurchaseStatusDialog();
}),
_divider,
buildEntranceItem("no title + no summary", onTap: () async {
await GuruPopup.instance.showStandardDialog(
illustration: Image.asset("assets/images/pic_problems.png"),
primaryButtonAction: "OK");
}),
_divider,
buildEntranceItem("no title + summary", onTap: () async {
await GuruPopup.instance.showStandardDialog(
illustration: Image.asset("assets/images/pic_problems.png"),
primaryButtonAction: "Contact Support",
summary: "Having problems purc");
}),
_divider,
buildEntranceItem("only title", onTap: () async {
await GuruPopup.instance.showStandardDialog(
illustration: Image.asset("assets/images/pic_problems.png"),
primaryButtonAction: "Action",
title: "Main Title",
positionedBuilders: [
(context, designSpec) {
final top = designSpec.measuredMetrics.measureVertical(80.0);
final size = designSpec.measuredMetrics.measureHeight(480.0);
return Positioned(
top: top,
width: size,
height: size,
child: Container(
color: Colors.red,
));
}
]);
}),
_divider,
buildEntranceItem("title + subtitle", onTap: () async {
await GuruPopup.instance.showStandardDialog(
illustration: Image.asset(Assets.imagesIcIllustration),
primaryButtonAction: S.of(context).settings,
title: S.of(context).settings,
subtitle: S.of(context).removeBannerAndPopupAds);
}),
_divider,
buildEntranceItem("title + summary", onTap: () async {
await GuruPopup.instance.showStandardDialog(
illustration: Image.asset(Assets.imagesIcIllustration),
primaryButtonAction: "Action",
title: "Main Title",
summary:
"This is a summary, the number of lines between 1-3 lines, according to the language situation adapted.");
}),
_divider,
buildEntranceItem("two line title + summary", onTap: () async {
final String title = S.of(context).settings +
S.of(context).settings +
S.of(context).settings +
S.of(context).settings;
final String summary = S.of(context).removeBannerAndPopupAds +
S.of(context).removeBannerAndPopupAds +
S.of(context).removeBannerAndPopupAds +
S.of(context).removeBannerAndPopupAds +
S.of(context).removeBannerAndPopupAds +
S.of(context).removeBannerAndPopupAds +
S.of(context).removeBannerAndPopupAds;
await GuruPopup.instance.showStandardDialog(
illustration: Image.asset(Assets.imagesIcIllustration),
primaryButtonAction: S.of(context).settings,
secondaryButtonText: S.of(context).settings,
title: title,
subtitle: title,
summary: summary);
}),
_divider,
buildEntranceItem("title + subtitle + summary", onTap: () async {
await GuruPopup.instance.showStandardDialog(
illustration: Image.asset(Assets.imagesIcIllustration),
primaryButtonAction: "Action",
title: "Main Title",
subtitle: "This is a Subtitle",
summary:
"This is a summary, the number of lines between 1-3 lines, according to the language situation adapted.");
}),
_divider,
buildEntranceItem("2 lines title + long sub title + summary",
onTap: () async {
await GuruPopup.instance.showStandardDialog(
illustration: Image.asset(Assets.imagesIcIllustration),
primaryButtonAction: "Action",
title:
"This is a Main Title, two lines text Too long to reduce the size",
subtitle: "This is a sub title, Too long to reduce the size",
summary:
"This is a summary, the number of lines between 1-3 lines, according to the language situation adapted.");
}),
_divider,
buildEntranceItem("title + subtitle + summary + secondaryButton",
onTap: () async {
await GuruPopup.instance.showStandardDialog(
illustration: Image.asset(Assets.imagesIcIllustration),
primaryButtonAction: "Action",
title: "Main Title",
subtitle: "This is a Subtitle",
secondaryButtonText: "Secondary Button",
summary:
"This is a summary, the number of lines between 1-3 lines, according to the language situation adapted.");
}),
_divider,
buildEntranceItem("two title + subtitle + summary + secondaryButton",
onTap: () async {
await GuruPopup.instance.showStandardDialog(
illustration: Image.asset(Assets.imagesIcIllustration),
primaryButtonAction: "Action",
title: "This is two lines Main Title",
subtitle: "This is a Subtitle, This is a Subtitle",
secondaryButtonText: "Secondary Button",
summary:
"This is a summary, the number of lines between 1-3 lines, according to the language situation adapted.according to the language situation adapted.");
}),
_divider,
buildEntranceItem("title + summary + secondaryButton", onTap: () async {
await GuruPopup.instance.showStandardDialog(
illustration: Image.asset(Assets.imagesIcIllustration),
primaryButtonAction: "Action",
title: "Main Title",
secondaryButtonText: "Secondary Button",
summary:
"This is a summary, the number of lines between 1-3 lines, according to the language situation adapted.");
}),
_divider,
buildEntranceItem("two title + summary + secondaryButton",
onTap: () async {
await GuruPopup.instance.showStandardDialog(
illustration: Image.asset(Assets.imagesIcIllustration),
primaryButtonAction: "Action",
title:
"This is two lines Main TitleThis is two lines Main Title",
secondaryButtonText: "Secondary Button",
summary:
"This is a summary, the number of lines between 1-3 lines, according to the language situation adapted.");
}),
_divider,
buildEntranceItem("title + summary + customButton1", onTap: () async {
await GuruPopup.instance.showStandardDialog(
illustration: Image.asset(Assets.imagesIcIllustration),
primaryButtonChild: const GuruButton(
size: Size(271, 48),
action: "Action",
leading: Assets.imagesIcAds,
tintLeading: true,
),
title: "Main Title",
summary:
"This is a summary, the number of lines between 1-3 lines, according to the language situation adapted.");
}),
_divider,
buildEntranceItem("title + summary + customButton2", onTap: () async {
await GuruPopup.instance.showStandardDialog(
illustration: Image.asset(Assets.imagesIcIllustration),
primaryButtonAction: "Action",
primaryButtonInfo: "×100",
primaryButtonLeading: Assets.imagesIcAds,
primaryButtonTrailing: Assets.imagesIcCoin,
title: "Main Title",
summary:
"This is a summary, the number of lines between 1-3 lines, according to the language situation adapted.");
}),
_divider,
buildEntranceItem("title + summary + customButton3", onTap: () async {
await GuruPopup.instance.showStandardDialog(
illustration: Image.asset(Assets.imagesIcIllustration),
primaryButtonAction: "Action",
primaryButtonInfo: "×100",
primaryButtonLeading: Assets.imagesIcAds,
primaryButtonTrailing: Assets.imagesIcCoin,
primaryButtonSummary: "Button Summary",
title: "Main Title",
summary:
"This is a summary, the number of lines between 1-3 lines, according to the language situation adapted.");
}),
_divider,
buildEntranceItem("Confirm Dialog + no title", onTap: () async {
await GuruPopup.instance.showConfirmDialog(
summary: "A message should be a short, complete sentence.",
negativeButtonText: "Negative",
positiveButtonText: "Positive");
}),
_divider,
buildEntranceItem("Confirm Dialog", onTap: () async {
await GuruPopup.instance.showConfirmDialog(
title: 'title',
summary: "A message should be a short, complete sentence.",
negativeButtonText: "Negative",
positiveButtonText: "Positive",
);
}),
_divider,
buildEntranceItem("Confirm Dialog + adBtn", onTap: () async {
await GuruPopup.instance.showConfirmDialog(
title: 'title',
summary: "A message should be a short, complete sentence.",
negativeButtonText: "Negative",
positiveButtonText: "Positive",
positiveButtonLeading: Assets.imagesIcAds);
}),
_divider,
buildEntranceItem("Two Lines title + Confirm Dialog", onTap: () async {
await GuruPopup.instance.showConfirmDialog(
title:
'This is title, This is title, This is title,This is title,This is title',
summary:
"A message should be a short, complete sentence.A message should be a short, complete sentence.A message should be a short, complete sentence.A message should be a short, complete sentence.A message should be a short, complete sentence.",
negativeButtonText: "Negative",
positiveButtonText: "Positive",
);
}),
_divider,
buildEntranceItem("Alert Dialog + no Title", onTap: () async {
await GuruPopup.instance.showAlertDialog(
summary: "A message should be a short, complete sentence.",
negativeButtonText: "Negative",
positiveButtonText: "Positive");
}),
_divider,
buildEntranceItem("Alert Dialog", onTap: () async {
await GuruPopup.instance.showAlertDialog(
title: 'title',
summary: "A message should be a short, complete sentence.",
negativeButtonText: "Negative",
positiveButtonText: "Positive");
}),
_divider,
buildEntranceItem("two lines title + Alert Dialog", onTap: () async {
await GuruPopup.instance.showAlertDialog(
title: 'This is title, This is title, This is title',
summary:
"A message should be a short, complete sentence.A message should be a short, complete sentence.",
negativeButtonText: "Negative",
positiveButtonText: "Positive");
}),
_divider,
buildEntranceItem("title + summary", onTap: () async {
await GuruPopup.instance.showSpotlightDialog(
Image.asset('assets/images/demo.png'),
primaryButtonAction: "PLAY NOW",
title: "Classic Solitaire",
summary: "The Most Addictive Classic Solitairecard vames!");
}),
_divider,
buildEntranceItem("title + summary + customButton3", onTap: () async {
final String title = S.of(context).settings +
S.of(context).settings +
S.of(context).settings +
S.of(context).settings;
final String summary = S.of(context).removeBannerAndPopupAds +
S.of(context).removeBannerAndPopupAds +
S.of(context).removeBannerAndPopupAds +
S.of(context).removeBannerAndPopupAds;
await GuruPopup.instance.showSpotlightDialog(
Image.asset('assets/images/demo.png'),
primaryButtonAction: S.of(context).settings,
title: title,
summary: summary,
secondaryButtonText: S.of(context).settings);
}),
_divider,
buildEntranceItem("title + summary + SecondaryButton", onTap: () async {
await GuruPopup.instance.showSpotlightDialog(
Image.asset('assets/images/demo.png'),
primaryButtonAction: "Action",
title: "Main Title",
summary:
"This is a summary, the number of lines between 1-3 lines",
secondaryButtonText: "Secondary Button");
}),
_divider,
buildEntranceItem("summary + SecondaryButton", onTap: () async {
await GuruPopup.instance.showSpotlightDialog(
Image.asset('assets/images/demo.png'),
primaryButtonAction: "Action",
summary:
"This is a summary, the number of lines between 1-3 lines",
secondaryButtonText: "Secondary Button");
}),
_divider,
buildEntranceItem("summary", onTap: () async {
await GuruPopup.instance.showSpotlightDialog(
Image.asset('assets/images/demo.png'),
primaryButtonAction: "Action",
summary:
"This is a summary, the number of lines between 1-3 lines");
}),
_divider,
buildEntranceItem("extend dialog", onTap: () async {
final String title = S.of(context).settings +
S.of(context).settings +
S.of(context).settings +
S.of(context).settings;
final String summary = S.of(context).removeBannerAndPopupAds +
S.of(context).removeBannerAndPopupAds +
S.of(context).removeBannerAndPopupAds +
S.of(context).removeBannerAndPopupAds;
await GuruPopup.instance
.showExtendDialog(Image.asset('assets/images/pic.png'),
title: title,
primaryButtonAction: "Action",
summary: summary,
contentBackground: const BoxDecoration(
gradient: LinearGradient(
colors: [
Color.fromRGBO(45, 24, 77, 0),
Color.fromRGBO(45, 24, 77, 1),
Color.fromRGBO(52, 28, 89, 1),
Color.fromRGBO(45, 24, 77, 1)
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
)));
}),
_divider,
buildEntranceItem("paused dialog", onTap: () async {
// await GuruPopup.instance.showPausedDialog(
// items: [
// SwitchSetting(
// enabledTitle: "Sound Effects",
// leading: "assets/images/ic_sound.png",
// settingData: UiSettings.instance.checkedTileBol,
// onChanged: ((value) {
// UiSettings.instance.checkedTileBol.set(value);
// // controller.changeValue(value);
// })
// )
// ]
// );
}),
_divider,
],
);
}
@override
Widget build(BuildContext context) {
return GuruDemoPage(
child: Scaffold(
backgroundColor: const Color(0xFF121212),
appBar: GuruAppBar(
title: 'Guru Standard Dialog',
backgroundColor: Colors.transparent,
size: GuruAppBarSize.small,
leadingType: LeadingType.back,
actions: [
IconButton(
padding: const EdgeInsets.all(0),
splashRadius:
GuruThemeDesignSpec.get().appBarDesignSpec.actionIconSize,
icon: ImageIcon(
const AssetImage("assets/images/Ic_Award.png"),
size: GuruThemeDesignSpec.get().appBarDesignSpec.actionIconSize,
color: Colors.white,
),
onPressed: () {},
)
],
),
body: Stack(children: [
SingleChildScrollView(
child: Align(
alignment: Alignment.topCenter, child: buildBody(context))),
ConsoleButton()
]),
),
);
}
}