mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-11-25 14:29:22 +00:00
Start to update tour route
This commit is contained in:
parent
a022e8bfd1
commit
46f9c917b5
@ -1,4 +1,5 @@
|
||||
import 'package:comunic/models/api_request.dart';
|
||||
import 'package:comunic/models/config.dart';
|
||||
import 'package:comunic/ui/dialogs/record_audio_dialog.dart';
|
||||
import 'package:comunic/ui/routes/image_editor_route.dart';
|
||||
import 'package:comunic/utils/files_utils.dart';
|
||||
@ -202,6 +203,7 @@ class _BottomSheetPickOption extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => Container(
|
||||
color: config().splashBackgroundColor,
|
||||
height: 255,
|
||||
child: Center(
|
||||
child: ConstrainedBox(
|
||||
@ -209,8 +211,9 @@ class _BottomSheetPickOption extends StatelessWidget {
|
||||
child: ListView.builder(
|
||||
itemCount: options.length,
|
||||
itemBuilder: (c, i) => ListTile(
|
||||
leading: Icon(options[i].icon),
|
||||
title: Text(options[i].label),
|
||||
leading: Icon(options[i].icon, color: Colors.white),
|
||||
title: Text(options[i].label,
|
||||
style: TextStyle(color: Colors.white)),
|
||||
onTap: () => onOptionSelected(options[i].value),
|
||||
),
|
||||
),
|
||||
|
@ -2,10 +2,12 @@ import 'package:comunic/helpers/preferences_helper.dart';
|
||||
import 'package:comunic/helpers/users_helper.dart';
|
||||
import 'package:comunic/models/user.dart';
|
||||
import 'package:comunic/ui/routes/push_notifications_route.dart';
|
||||
import 'package:comunic/ui/routes/settings/account_image_settings.dart';
|
||||
import 'package:comunic/ui/widgets/account_image_widget.dart';
|
||||
import 'package:comunic/ui/widgets/async_screen_widget.dart';
|
||||
import 'package:comunic/ui/widgets/login_routes_theme.dart';
|
||||
import 'package:comunic/ui/widgets/tour/account_image_tour_pane.dart';
|
||||
import 'package:comunic/ui/widgets/tour/first_pane.dart';
|
||||
import 'package:comunic/ui/widgets/tour/last_pane.dart';
|
||||
import 'package:comunic/ui/widgets/tour/presentation_pane.dart';
|
||||
import 'package:comunic/utils/account_utils.dart';
|
||||
import 'package:comunic/utils/intl_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@ -39,24 +41,13 @@ class _TourRouteState extends State<TourRoute> {
|
||||
}
|
||||
|
||||
List<Widget> get _list => [
|
||||
_FirstPane(),
|
||||
FirstTourPane(),
|
||||
|
||||
// Account image
|
||||
_PresentationPane(
|
||||
iconWidget: AccountImageWidget(user: currUser, width: 50),
|
||||
title: tr("Account image"),
|
||||
text: tr(
|
||||
"Account image allow to quickly recognize people.\n\nYou can decide to define one now!"),
|
||||
actionTitle: tr("Upload an account image"),
|
||||
onActionTap: (ctx) async {
|
||||
await uploadNewAccountImage(context);
|
||||
_defaultIndex = DefaultTabController.of(ctx).index;
|
||||
await key.currentState.refresh();
|
||||
},
|
||||
),
|
||||
AccountImageTourPane(user: currUser),
|
||||
|
||||
// Notifications
|
||||
_PresentationPane(
|
||||
PresentationPane(
|
||||
icon: Icons.notifications,
|
||||
title: tr("Push notifications"),
|
||||
child: (c) => PushNotificationsConfigurationWidget(
|
||||
@ -68,31 +59,31 @@ class _TourRouteState extends State<TourRoute> {
|
||||
onTapNext: (c) => _pushNotificationsKey.currentState.submit(),
|
||||
),
|
||||
|
||||
_PresentationPane(
|
||||
PresentationPane(
|
||||
icon: Icons.group_add,
|
||||
title: tr("Friends"),
|
||||
text: tr(
|
||||
"You can search the people you know and ask them to become your friends!\n\nThis will help you to reach them to exchange information!"),
|
||||
),
|
||||
_PresentationPane(
|
||||
PresentationPane(
|
||||
icon: Icons.question_answer,
|
||||
title: tr("Conversations"),
|
||||
text: tr(
|
||||
"With Comunic, you can have conversations with all your friends.\n\nIt is also possible to make video calls!"),
|
||||
),
|
||||
_PresentationPane(
|
||||
PresentationPane(
|
||||
icon: Icons.group,
|
||||
title: tr("Groups"),
|
||||
text: tr(
|
||||
"You can join groups where people share the same interests as you!\n\nIt is also easy to create your own groups!"),
|
||||
),
|
||||
_PresentationPane(
|
||||
PresentationPane(
|
||||
icon: Icons.lock,
|
||||
title: tr("Privacy"),
|
||||
text: tr(
|
||||
"Your data is YOUR DATA. We will never use it or sell it.\n\nIf you do not trust us, you can always check out our source code to verify it!"),
|
||||
),
|
||||
_LastPane(),
|
||||
LastTourPane(),
|
||||
];
|
||||
|
||||
@override
|
||||
@ -130,8 +121,8 @@ class __RouteBodyState extends State<_RouteBody> {
|
||||
|
||||
bool get _isLastPane => _controller.index >= widget.panes.length - 1;
|
||||
|
||||
_PresentationPane get _currPane =>
|
||||
widget.panes[_controller.index] is _PresentationPane
|
||||
PresentationPane get _currPane =>
|
||||
widget.panes[_controller.index] is PresentationPane
|
||||
? widget.panes[_controller.index]
|
||||
: null;
|
||||
|
||||
@ -195,132 +186,3 @@ class __RouteBodyState extends State<_RouteBody> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class _PresentationPane extends StatelessWidget {
|
||||
final IconData icon;
|
||||
final Widget iconWidget;
|
||||
final String title;
|
||||
final String text;
|
||||
final Function(BuildContext) child;
|
||||
final String actionTitle;
|
||||
final Function(BuildContext) onActionTap;
|
||||
final bool canGoNext;
|
||||
final Future<bool> Function(BuildContext) onTapNext;
|
||||
|
||||
const _PresentationPane({
|
||||
Key key,
|
||||
this.icon,
|
||||
this.iconWidget,
|
||||
@required this.title,
|
||||
this.text,
|
||||
this.child,
|
||||
this.actionTitle,
|
||||
this.onActionTap,
|
||||
this.canGoNext = true,
|
||||
this.onTapNext,
|
||||
}) : assert(icon != null || iconWidget != null),
|
||||
assert(title != null),
|
||||
assert(text != null || child != null),
|
||||
super(key: key);
|
||||
|
||||
bool get _hasAction => actionTitle != null && onActionTap != null;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (text != null)
|
||||
return Column(
|
||||
children: <Widget>[
|
||||
Spacer(flex: 3),
|
||||
icon != null ? Icon(icon, color: Colors.white, size: 50) : iconWidget,
|
||||
Spacer(flex: 1),
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(fontSize: 20),
|
||||
),
|
||||
Spacer(flex: 1),
|
||||
_FixedSizeTextArea(text),
|
||||
Spacer(flex: 1),
|
||||
_hasAction
|
||||
? OutlinedButton(
|
||||
onPressed: () => onActionTap(context),
|
||||
child: Text(
|
||||
actionTitle,
|
||||
style: TextStyle(color: Colors.white),
|
||||
),
|
||||
)
|
||||
: Opacity(
|
||||
opacity: 0,
|
||||
child: OutlinedButton(
|
||||
onPressed: null,
|
||||
child: Text(""),
|
||||
),
|
||||
),
|
||||
Spacer(flex: 3),
|
||||
],
|
||||
);
|
||||
|
||||
return Column(
|
||||
children: <Widget>[
|
||||
Spacer(flex: 1),
|
||||
icon != null ? Icon(icon, color: Colors.white, size: 50) : iconWidget,
|
||||
Spacer(flex: 1),
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(fontSize: 20),
|
||||
),
|
||||
Spacer(flex: 1),
|
||||
ConstrainedBox(
|
||||
constraints: BoxConstraints(maxHeight: 300),
|
||||
child: SingleChildScrollView(child: child(context))),
|
||||
Spacer(flex: 1),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _FirstPane extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Spacer(flex: 3),
|
||||
Text(
|
||||
"Comunic",
|
||||
style: TextStyle(fontSize: 25),
|
||||
),
|
||||
Spacer(flex: 2),
|
||||
_FixedSizeTextArea(tr(
|
||||
"Welcome to Comunic, the social network that respect your privacy !")),
|
||||
Spacer(flex: 1),
|
||||
_FixedSizeTextArea(tr(
|
||||
"Let's configure a few things and present you some features of the network...")),
|
||||
Spacer(flex: 3),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _LastPane extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Center(
|
||||
child: Text(
|
||||
tr("The application is yours"),
|
||||
style: TextStyle(fontSize: 25),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _FixedSizeTextArea extends StatelessWidget {
|
||||
final String text;
|
||||
|
||||
const _FixedSizeTextArea(this.text);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => ConstrainedBox(
|
||||
constraints: BoxConstraints(maxWidth: 300),
|
||||
child: Text(text, textAlign: TextAlign.justify),
|
||||
);
|
||||
}
|
||||
|
19
lib/ui/widgets/tour/account_image_tour_pane.dart
Normal file
19
lib/ui/widgets/tour/account_image_tour_pane.dart
Normal file
@ -0,0 +1,19 @@
|
||||
import 'package:comunic/models/user.dart';
|
||||
import 'package:comunic/ui/routes/settings/account_image_settings.dart';
|
||||
import 'package:comunic/ui/widgets/account_image_widget.dart';
|
||||
import 'package:comunic/ui/widgets/tour/presentation_pane.dart';
|
||||
import 'package:comunic/utils/intl_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class AccountImageTourPane extends PresentationPane {
|
||||
AccountImageTourPane({@required User user})
|
||||
: super(
|
||||
iconWidget: AccountImageWidget(user: user, width: 50),
|
||||
title: tr("Account image"),
|
||||
text: tr(
|
||||
"Account image allow to quickly recognize people.\n\nYou can decide to define one now!"),
|
||||
actionTitle: tr("Upload an account image"),
|
||||
onActionTap: (ctx) async {
|
||||
await uploadNewAccountImage(ctx);
|
||||
});
|
||||
}
|
30
lib/ui/widgets/tour/first_pane.dart
Normal file
30
lib/ui/widgets/tour/first_pane.dart
Normal file
@ -0,0 +1,30 @@
|
||||
import 'package:comunic/ui/widgets/tour/fixed_tour_size_text_area.dart';
|
||||
import 'package:comunic/utils/intl_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// First tour pane
|
||||
///
|
||||
/// @author Pierre Hubert
|
||||
|
||||
class FirstTourPane extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Spacer(flex: 3),
|
||||
Text(
|
||||
"Comunic",
|
||||
style: TextStyle(fontSize: 25),
|
||||
),
|
||||
Spacer(flex: 2),
|
||||
FixedTourSizeTextArea(tr(
|
||||
"Welcome to Comunic, the social network that respect your privacy!")),
|
||||
Spacer(flex: 1),
|
||||
FixedTourSizeTextArea(tr(
|
||||
"Let's configure a few things and present you some features of the network...")),
|
||||
Spacer(flex: 3),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
16
lib/ui/widgets/tour/fixed_tour_size_text_area.dart
Normal file
16
lib/ui/widgets/tour/fixed_tour_size_text_area.dart
Normal file
@ -0,0 +1,16 @@
|
||||
/// Fixed tour size text area
|
||||
///
|
||||
/// @author Pierre Hubert
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class FixedTourSizeTextArea extends StatelessWidget {
|
||||
final String text;
|
||||
|
||||
const FixedTourSizeTextArea(this.text);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => ConstrainedBox(
|
||||
constraints: BoxConstraints(maxWidth: 300),
|
||||
child: Text(text, textAlign: TextAlign.justify),
|
||||
);
|
||||
}
|
18
lib/ui/widgets/tour/last_pane.dart
Normal file
18
lib/ui/widgets/tour/last_pane.dart
Normal file
@ -0,0 +1,18 @@
|
||||
import 'package:comunic/utils/intl_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// Last tour pane
|
||||
///
|
||||
/// @author Pierre Hubert
|
||||
|
||||
class LastTourPane extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Center(
|
||||
child: Text(
|
||||
tr("The application is yours"),
|
||||
style: TextStyle(fontSize: 25),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
87
lib/ui/widgets/tour/presentation_pane.dart
Normal file
87
lib/ui/widgets/tour/presentation_pane.dart
Normal file
@ -0,0 +1,87 @@
|
||||
/// Application presentation tour pane
|
||||
///
|
||||
/// @author Pierre Hubert
|
||||
import 'package:comunic/ui/widgets/tour/fixed_tour_size_text_area.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class PresentationPane extends StatelessWidget {
|
||||
final IconData icon;
|
||||
final Widget iconWidget;
|
||||
final String title;
|
||||
final String text;
|
||||
final Function(BuildContext) child;
|
||||
final String actionTitle;
|
||||
final Function(BuildContext) onActionTap;
|
||||
final bool canGoNext;
|
||||
final Future<bool> Function(BuildContext) onTapNext;
|
||||
|
||||
const PresentationPane({
|
||||
Key key,
|
||||
this.icon,
|
||||
this.iconWidget,
|
||||
@required this.title,
|
||||
this.text,
|
||||
this.child,
|
||||
this.actionTitle,
|
||||
this.onActionTap,
|
||||
this.canGoNext = true,
|
||||
this.onTapNext,
|
||||
}) : assert(icon != null || iconWidget != null),
|
||||
assert(title != null),
|
||||
assert(text != null || child != null),
|
||||
super(key: key);
|
||||
|
||||
bool get _hasAction => actionTitle != null && onActionTap != null;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (text != null)
|
||||
return Column(
|
||||
children: <Widget>[
|
||||
Spacer(flex: 3),
|
||||
icon != null ? Icon(icon, color: Colors.white, size: 50) : iconWidget,
|
||||
Spacer(flex: 1),
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(fontSize: 20),
|
||||
),
|
||||
Spacer(flex: 1),
|
||||
FixedTourSizeTextArea(text),
|
||||
Spacer(flex: 1),
|
||||
_hasAction
|
||||
? OutlinedButton(
|
||||
onPressed: () => onActionTap(context),
|
||||
child: Text(
|
||||
actionTitle,
|
||||
style: TextStyle(color: Colors.white),
|
||||
),
|
||||
)
|
||||
: Opacity(
|
||||
opacity: 0,
|
||||
child: OutlinedButton(
|
||||
onPressed: null,
|
||||
child: Text(""),
|
||||
),
|
||||
),
|
||||
Spacer(flex: 3),
|
||||
],
|
||||
);
|
||||
|
||||
return Column(
|
||||
children: <Widget>[
|
||||
Spacer(flex: 1),
|
||||
icon != null ? Icon(icon, color: Colors.white, size: 50) : iconWidget,
|
||||
Spacer(flex: 1),
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(fontSize: 20),
|
||||
),
|
||||
Spacer(flex: 1),
|
||||
ConstrainedBox(
|
||||
constraints: BoxConstraints(maxHeight: 300),
|
||||
child: SingleChildScrollView(child: child(context))),
|
||||
Spacer(flex: 1),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user