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

503 lines
22 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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()
]),
),
);
}
}