大幅変更&環境バージョンアップ
This commit is contained in:
56
lib/widgets/GameState/CheckinState.dart
Normal file
56
lib/widgets/GameState/CheckinState.dart
Normal file
@ -0,0 +1,56 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gifunavi/widgets/GameState/Colors.dart';
|
||||
|
||||
class LocationVisitedWidget extends StatelessWidget {
|
||||
final int count;
|
||||
final bool minimized;
|
||||
|
||||
const LocationVisitedWidget(
|
||||
{super.key, required this.count, this.minimized = false});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (minimized) {
|
||||
return Container(
|
||||
height: 40,
|
||||
width: 40,
|
||||
decoration: const BoxDecoration(
|
||||
color: JapaneseColors.mizu,
|
||||
shape: BoxShape.circle,
|
||||
),
|
||||
child: Center(
|
||||
child: Text(
|
||||
'$count',
|
||||
style: const TextStyle(
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 14,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return Container(
|
||||
padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 8),
|
||||
decoration: BoxDecoration(
|
||||
color: JapaneseColors.matcha,
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Icon(Icons.check_circle_outline, color: Colors.white, size: 24),
|
||||
const SizedBox(width: 8),
|
||||
Text(
|
||||
'$count チェックイン', // "X Check-ins" in Japanese
|
||||
style: const TextStyle(
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 16),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
12
lib/widgets/GameState/Colors.dart
Normal file
12
lib/widgets/GameState/Colors.dart
Normal file
@ -0,0 +1,12 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class JapaneseColors {
|
||||
static const Color mizu = Color(0xFFA4DDED); // Mizu (light blue)
|
||||
static const Color matcha = Color(0xFFC5E1A5);
|
||||
static const Color ume = Color(0xFFE1A8A8); // Ume (plum)
|
||||
static const Color take = Color(0xFF7B8D42); // Take (bamboo)
|
||||
static const Color sora = Color(0xFFA1CAF1);
|
||||
static const Color indigo = Color(0xFF264653); // Aizome
|
||||
static const Color sakuraPink = Color(0xFFFAD2E1); // Sakura-iro
|
||||
/// Matcha (green tea)
|
||||
}
|
||||
72
lib/widgets/GameState/ConnectionStatus.dart
Normal file
72
lib/widgets/GameState/ConnectionStatus.dart
Normal file
@ -0,0 +1,72 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gifunavi/widgets/GameState/Colors.dart';
|
||||
|
||||
enum ConnectionStatus { none, mobile, wifi }
|
||||
|
||||
class ConnectionStatusIndicator extends StatelessWidget {
|
||||
final ConnectionStatus connectionStatus;
|
||||
final bool minimized;
|
||||
|
||||
const ConnectionStatusIndicator({
|
||||
super.key,
|
||||
required this.connectionStatus,
|
||||
this.minimized = false,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
Color backgroundColor;
|
||||
IconData iconData;
|
||||
String text;
|
||||
|
||||
switch (connectionStatus) {
|
||||
case ConnectionStatus.none:
|
||||
backgroundColor = JapaneseColors.ume;
|
||||
iconData = Icons.signal_cellular_off;
|
||||
text = 'No Connection';
|
||||
break;
|
||||
case ConnectionStatus.mobile:
|
||||
backgroundColor = JapaneseColors.take;
|
||||
iconData = Icons.signal_cellular_alt;
|
||||
text = 'Mobile Data';
|
||||
break;
|
||||
case ConnectionStatus.wifi:
|
||||
backgroundColor = JapaneseColors.sora;
|
||||
iconData = Icons.wifi;
|
||||
text = 'Wi-Fi';
|
||||
break;
|
||||
default:
|
||||
backgroundColor = Colors.grey; // Fallback color
|
||||
iconData = Icons.device_unknown;
|
||||
text = 'Unknown';
|
||||
}
|
||||
|
||||
return Container(
|
||||
height: minimized ? 40 : null,
|
||||
width: minimized ? 40 : null,
|
||||
padding:
|
||||
minimized ? null : const EdgeInsets.symmetric(vertical: 8, horizontal: 16),
|
||||
decoration: BoxDecoration(
|
||||
color: backgroundColor,
|
||||
shape: minimized ? BoxShape.circle : BoxShape.rectangle,
|
||||
borderRadius: minimized ? null : BorderRadius.circular(10),
|
||||
),
|
||||
child: minimized
|
||||
? Center(
|
||||
child: Icon(iconData, color: Colors.white, size: 24),
|
||||
)
|
||||
: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Icon(iconData, color: Colors.white),
|
||||
const SizedBox(width: 8),
|
||||
Text(
|
||||
text,
|
||||
style: const TextStyle(
|
||||
color: Colors.white, fontWeight: FontWeight.bold),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
51
lib/widgets/GameState/DashboardWidget.dart
Normal file
51
lib/widgets/GameState/DashboardWidget.dart
Normal file
@ -0,0 +1,51 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gifunavi/widgets/GameState/CheckinState.dart';
|
||||
import 'package:gifunavi/widgets/GameState/game_on_off.dart';
|
||||
|
||||
class DashboardWidget extends StatelessWidget {
|
||||
final bool gameStarted;
|
||||
final int locationsVisited;
|
||||
final bool isMinimized;
|
||||
|
||||
const DashboardWidget({
|
||||
super.key,
|
||||
required this.gameStarted,
|
||||
required this.locationsVisited,
|
||||
this.isMinimized = false,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
List<Widget> widgets = [
|
||||
GameStatusIndicator(gameStarted: gameStarted, minimized: isMinimized),
|
||||
SizedBox(
|
||||
height: isMinimized ? 0 : 8, width: isMinimized ? 8 : 0), // Spacing
|
||||
LocationVisitedWidget(count: locationsVisited, minimized: isMinimized),
|
||||
];
|
||||
|
||||
return Container(
|
||||
padding: EdgeInsets.all(isMinimized ? 8 : 16),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: Colors.grey.withOpacity(0.5),
|
||||
spreadRadius: 5,
|
||||
blurRadius: 7,
|
||||
offset: const Offset(0, 3),
|
||||
),
|
||||
],
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
),
|
||||
child: isMinimized
|
||||
? Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: widgets,
|
||||
)
|
||||
: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: widgets,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
55
lib/widgets/GameState/game_on_off.dart
Normal file
55
lib/widgets/GameState/game_on_off.dart
Normal file
@ -0,0 +1,55 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:gifunavi/widgets/GameState/Colors.dart';
|
||||
|
||||
class GameStatusIndicator extends StatelessWidget {
|
||||
final bool gameStarted;
|
||||
final bool minimized;
|
||||
|
||||
const GameStatusIndicator(
|
||||
{super.key, required this.gameStarted, this.minimized = true});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
// Icons to show based on the game status
|
||||
IconData iconData =
|
||||
gameStarted ? Icons.stop_circle : Icons.play_circle_filled;
|
||||
// Text to show based on the game status
|
||||
String text = gameStarted ? 'in_game'.tr : 'start_game'.tr;
|
||||
|
||||
// Layout for minimized view
|
||||
if (minimized) {
|
||||
return Container(
|
||||
height: 40, // Square size
|
||||
width: 40, // Square size
|
||||
decoration: BoxDecoration(
|
||||
color:
|
||||
gameStarted ? JapaneseColors.indigo : JapaneseColors.sakuraPink,
|
||||
shape: BoxShape
|
||||
.circle, // Making it circle when minimized for a more distinct look
|
||||
),
|
||||
child: Icon(iconData, color: Colors.white),
|
||||
);
|
||||
}
|
||||
|
||||
// Layout for expanded view
|
||||
return Container(
|
||||
padding: const EdgeInsets.all(12),
|
||||
decoration: BoxDecoration(
|
||||
color: gameStarted ? JapaneseColors.indigo : JapaneseColors.sakuraPink,
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Icon(iconData, color: Colors.white),
|
||||
const SizedBox(width: 8),
|
||||
Text(
|
||||
text,
|
||||
style: const TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user