diff --git a/src/ui/flutter_app/lib/widgets/game_settings_page.dart b/src/ui/flutter_app/lib/widgets/game_settings_page.dart index fb99e771..bfc20c23 100644 --- a/src/ui/flutter_app/lib/widgets/game_settings_page.dart +++ b/src/ui/flutter_app/lib/widgets/game_settings_page.dart @@ -16,9 +16,10 @@ along with this program. If not, see . */ -import 'dart:io'; +import 'dart:async'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:sanmill/common/config.dart'; import 'package:sanmill/common/settings.dart'; import 'package:sanmill/generated/l10n.dart'; @@ -35,13 +36,93 @@ class GameSettingsPage extends StatefulWidget { } class _GameSettingsPageState extends State { - // create some values Color pickerColor = Color(0xFF808080); Color currentColor = Color(0xFF808080); + int _counter = 0; + late StreamController _events; + Timer? _timer; + @override void initState() { super.initState(); + _events = StreamController.broadcast(); + _events.add(10); + } + + void _startTimer() { + _counter = 10; + if (_timer != null) { + _timer!.cancel(); + } + _timer = Timer.periodic(Duration(seconds: 1), (timer) { + (_counter > 0) ? _counter-- : _timer!.cancel(); + _events.add(_counter); + }); + } + + void _incrementCounter() { + setState(() { + _counter++; + }); + } + + void _restore() async { + final profile = await Settings.instance(); + await profile.restore(); + } + + void showCountdownDialog(BuildContext ctx) { + var alert = AlertDialog( + content: StreamBuilder( + stream: _events.stream, + builder: (BuildContext context, AsyncSnapshot snapshot) { + print("Count down: " + snapshot.data.toString()); + + if (snapshot.data == 0) { + _restore(); + SystemChannels.platform.invokeMethod('SystemNavigator.pop'); + } + + return Container( + height: 128, + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + snapshot.data != null + ? '${snapshot.data.toString()}' + : "10", + style: TextStyle( + fontSize: 64, + )), + SizedBox( + height: 32, + ), + InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Container( + child: Center( + child: Text( + S.of(ctx).cancel, + style: TextStyle( + color: Colors.black, + fontSize: 16, + fontWeight: FontWeight.bold), + )), + ), + ), + ], + ), + ); + })); + showDialog( + context: ctx, + builder: (BuildContext c) { + return alert; + }); } SliderTheme _skillLevelSliderTheme(context, setState) { @@ -89,10 +170,8 @@ class _GameSettingsPageState extends State { restoreFactoryDefaultSettings() async { confirm() async { Navigator.of(context).pop(); - if (Config.developerMode) return; - final profile = await Settings.instance(); - await profile.restore(); - exit(0); + _startTimer(); + showCountdownDialog(context); } cancel() => Navigator.of(context).pop();