tomatoClock

zhangrenshu
RenshuZh 2 years ago
parent 9abe619843
commit bdbf4a28dc

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

@ -0,0 +1,13 @@
import 'package:flutter/material.dart';
import 'package:timemanagerapp/widgets/TomatoClockWidget.dart';
class TomatoClockRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: TomatoClockWidget()
);
}
}

@ -5,6 +5,7 @@ import 'package:timemanagerapp/database/MyDatebase.dart';
import 'package:timemanagerapp/ruters/AddScheduleRoute.dart';
import 'package:timemanagerapp/ruters/TeamRoute.dart';
import 'package:timemanagerapp/ruters/TestRoute.dart';
import 'package:timemanagerapp/ruters/TomatoClockRoute.dart';
import 'package:timemanagerapp/widgets/RegisterWidget.dart';
import 'package:timemanagerapp/widgets/TimetableWidget.dart';
@ -126,7 +127,18 @@ class _HomeWidgetState extends State<HomeWidget> {
IconButton(
//todo 使
icon: const Icon(Icons.more),
onPressed: () {},
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
//todo
return TomatoClockRoute();
},
),
);
},
),
IconButton(
icon: const Icon(Icons.group_add),
@ -141,6 +153,7 @@ class _HomeWidgetState extends State<HomeWidget> {
},
),
);
},
),
Builder(

@ -0,0 +1,177 @@
import 'dart:async';
import 'package:audioplayers/audioplayers.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:timemanagerapp/setting/Setting.dart';
class TomatoClockWidget extends StatefulWidget {
@override
_TomatoClockWidgetState createState() => _TomatoClockWidgetState();
}
class _TomatoClockWidgetState extends State<TomatoClockWidget> {
AudioCache audioCache = AudioCache();
bool isMusicPlaying = false;
int currentTextIndex = 0;
List<String> texts = [
"趁此时风华正茂埋头苦干,免他年两鬓苍苍仰面奉承。",
"我的肩上是风,风上是闪烁的星群。",
"使人疲惫的不是远方的高山,而是鞋里的一粒沙子。",
];
List<String> backgroundImages = [
"assets/images/image1.jpg",
"assets/images/image2.jpg",
"assets/images/image3.jpg",
];
String currentBackgroundImage = "assets/images/image1.jpg";
int totalTime = 40 * 60; //
int remainingTime = 40 * 60; //
double progress = 1.0; // 1.0
late Timer timer; //
void toggleBackgroundImage() {
int currentIndex = backgroundImages.indexOf(currentBackgroundImage);
int nextIndex = (currentIndex + 1) % backgroundImages.length;
setState(() {
currentBackgroundImage = backgroundImages[nextIndex];
});
}
void startTimer() {
timer = Timer.periodic(Duration(seconds: 1), (Timer timer) {
setState(() {
if (remainingTime > 0) {
remainingTime--;
progress = remainingTime / totalTime;
} else {
timer.cancel();
Navigator.pop(context);
//
}
});
});
}
void toggleText() {
int nextIndex = (currentTextIndex + 1) % texts.length;
setState(() {
currentTextIndex = nextIndex;
});
}
void playPauseMusic() {
setState(() {
isMusicPlaying = !isMusicPlaying;
if (isMusicPlaying) {
audioCache.load('musics/music.mp3');
} else {
audioCache.clear('musics/music.mp3');
}
});
}
@override
void initState() {
super.initState();
startTimer();
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
toggleBackgroundImage();
},
child: Container(
width: Setting.deviceWidth,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(currentBackgroundImage),
fit: BoxFit.cover,
),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
GestureDetector(
onTap: () {
toggleText();
},
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 20),
child: Text(
texts[currentTextIndex],
style: TextStyle(
fontSize: 24,
color: Colors.white,
),
),
)
),
Stack(
alignment: Alignment.center,
children: [
Container(
width: 200,
height: 200,
child: CircularProgressIndicator(
value: progress,
strokeWidth: 10,
backgroundColor: Colors.grey,
valueColor: AlwaysStoppedAnimation<Color>(Colors.blue),
),
),
Text(
'${(remainingTime ~/ 60).toString().padLeft(2, '0')}:${(remainingTime % 60).toString().padLeft(2, '0')}',
style: TextStyle(
fontSize: 24,
color: Colors.white,
),
),
],
),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children:<Widget>[
IconButton(
icon: Icon(
isMusicPlaying ? Icons.pause : Icons.play_arrow,
color: Colors.white,
size:48
),
onPressed: () {
playPauseMusic();
},
),
IconButton(
icon: Icon(
Icons.stop,
color: Colors.white,
size:48
),
onPressed: () {
Navigator.pop(context);
},
),
]
)
],
),
),
);
}
}

@ -6,6 +6,10 @@
#include "generated_plugin_registrant.h"
#include <audioplayers_linux/audioplayers_linux_plugin.h>
void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) audioplayers_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "AudioplayersLinuxPlugin");
audioplayers_linux_plugin_register_with_registrar(audioplayers_linux_registrar);
}

@ -3,6 +3,7 @@
#
list(APPEND FLUTTER_PLUGIN_LIST
audioplayers_linux
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST

@ -5,11 +5,13 @@
import FlutterMacOS
import Foundation
import audioplayers_darwin
import path_provider_foundation
import shared_preferences_foundation
import sqflite
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
AudioplayersDarwinPlugin.register(with: registry.registrar(forPlugin: "AudioplayersDarwinPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))

@ -9,6 +9,62 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.11.0"
audioplayers:
dependency: "direct main"
description:
name: audioplayers
sha256: d9f6ca8e9b3e5af5e73d4c814404566f72698ee7ba35487bdf2baa6749e7503f
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.2.0"
audioplayers_android:
dependency: transitive
description:
name: audioplayers_android
sha256: fb01b9481f431fe04ac60f1f97ce8158383f2dc754558820592f795d81ca9d53
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.0.2"
audioplayers_darwin:
dependency: transitive
description:
name: audioplayers_darwin
sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08"
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.0.2"
audioplayers_linux:
dependency: transitive
description:
name: audioplayers_linux
sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.1.0"
audioplayers_platform_interface:
dependency: transitive
description:
name: audioplayers_platform_interface
sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb"
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.1.0"
audioplayers_web:
dependency: transitive
description:
name: audioplayers_web
sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62"
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.1.0"
audioplayers_windows:
dependency: transitive
description:
name: audioplayers_windows
sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.1.0"
boolean_selector:
dependency: transitive
description:
@ -41,6 +97,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.17.2"
crypto:
dependency: transitive
description:
name: crypto
sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.3"
cupertino_icons:
dependency: "direct main"
description:
@ -85,10 +149,10 @@ packages:
dependency: transitive
description:
name: file
sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d"
sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.1.4"
version: "7.0.0"
flutter:
dependency: "direct main"
description: flutter
@ -128,6 +192,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.0.2"
js:
dependency: transitive
description:
name: js
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.6.7"
lints:
dependency: transitive
description:
@ -236,10 +308,10 @@ packages:
dependency: transitive
description:
name: platform
sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102
sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.1.2"
version: "3.1.3"
plugin_platform_interface:
dependency: transitive
description:
@ -260,10 +332,10 @@ packages:
dependency: "direct main"
description:
name: shared_preferences
sha256: b7f41bad7e521d205998772545de63ff4e6c97714775902c199353f8bf1511ac
sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.2.1"
version: "2.2.2"
shared_preferences_android:
dependency: transitive
description:
@ -284,10 +356,10 @@ packages:
dependency: transitive
description:
name: shared_preferences_linux
sha256: c2eb5bf57a2fe9ad6988121609e47d3e07bb3bdca5b6f8444e4cf302428a128a
sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.3.1"
version: "2.3.2"
shared_preferences_platform_interface:
dependency: transitive
description:
@ -308,10 +380,10 @@ packages:
dependency: transitive
description:
name: shared_preferences_windows
sha256: f763a101313bd3be87edffe0560037500967de9c394a714cd598d945517f694f
sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.3.1"
version: "2.3.2"
sky_engine:
dependency: transitive
description: flutter
@ -397,6 +469,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.2"
uuid:
dependency: transitive
description:
name: uuid
sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.7"
vector_math:
dependency: transitive
description:
@ -417,10 +497,10 @@ packages:
dependency: transitive
description:
name: win32
sha256: c97defd418eef4ec88c0d1652cdce84b9f7b63dd7198e266d06ac1710d527067
sha256: "350a11abd2d1d97e0cc7a28a81b781c08002aa2864d9e3f192ca0ffa18b06ed3"
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.0.8"
version: "5.0.9"
xdg_directories:
dependency: transitive
description:
@ -431,4 +511,4 @@ packages:
version: "1.0.3"
sdks:
dart: ">=3.1.0 <4.0.0"
flutter: ">=3.7.0"
flutter: ">=3.10.0"

@ -31,6 +31,9 @@ dependencies:
flutter:
sdk: flutter
shared_preferences: ^2.2.1
audioplayers: 5.2.0
# The following adds the Cupertino Icons font to your application.
@ -71,6 +74,10 @@ flutter:
- assets/pythoncode/zfn_api.py
- assets/pythoncode/getschedule.py
- assets/images/userphoto.jpg
- assets/images/image1.jpg
- assets/images/image2.jpg
- assets/images/image3.jpg
- assets/musics/music.mp3
# To add assets to your application, add an assets section, like this:
# assets:

Loading…
Cancel
Save