Compare commits

..

48 Commits
dev ... main

Author SHA1 Message Date
cyx13 724c2c9084 Merge branch 'main' of https://bdgit.educoder.net/mbhvfy6mx/timemanager
2 years ago
cyx13 1b25e72066 修改
2 years ago
cyx13 b002999edd 修改
2 years ago
cyx13 745e0856a0 修改
2 years ago
p8fjyvg3u a9fdbfd46f Delete 'other/08_时间管理系统-181341940-邹兴云-实践总结报告.doc'
2 years ago
cyx13 5521601c51 修改
2 years ago
p8fjyvg3u f38367d9a0 ADD file via upload
2 years ago
gexinghai 5f4ce886ba 删除无关平台
2 years ago
beitingnanxu 699cea696a Merge branch 'main' of https://bdgit.educoder.net/mbhvfy6mx/timemanager
2 years ago
beitingnanxu 296e991eb0 aaa
2 years ago
gexinghai f659c521bf update
2 years ago
gexinghai 5a020ca86f update
2 years ago
ps9up4ig6 f37154949b Delete 'other/05_时间管理系统_软件工程课程设计汇报.pptx'
2 years ago
ps9up4ig6 74b02197d6 提交 海报
2 years ago
ps9up4ig6 06e5e2dcb3 提交 实践总结报告
2 years ago
p2jf6ytqz 6bb51db79a ADD file via upload
2 years ago
p2jf6ytqz acb0e58313 Delete 'other/08_时间管理系统_211440523_卫俊钢_实践总结报告.doc'
2 years ago
p2jf6ytqz a71deee59f ADD file via upload
2 years ago
p2jf6ytqz d0a134f5b9 Delete 'other/时间管理系统_211440523_卫俊钢_实践总结报告.doc'
2 years ago
p2jf6ytqz 936b6673bb ADD file via upload
2 years ago
cyx13 35feeaede2 Merge branch 'main' of https://bdgit.educoder.net/mbhvfy6mx/timemanager
2 years ago
beitingnanxu 242954c79f 格式修改
2 years ago
mszfy297n 36f98dbcd1 ADD file via upload
2 years ago
p8fjyvg3u c8481a2159 ADD file via upload
2 years ago
beitingnanxu 3a9145720c 格式修改
2 years ago
beitingnanxu 1332182777 格式修改
2 years ago
ps9up4ig6 1df09a5d59 计时器分类
2 years ago
gexinghai 763588b046 计时器分类
2 years ago
gexinghai fed3ea946e ?
2 years ago
gexinghai bec6671e50 修复课程表日期显示的bug
2 years ago
gexinghai f8938fb12a bug fixed
2 years ago
gexinghai 45d2ab3178 用例一 计时器
2 years ago
gexinghai 89337cbd72 bug
2 years ago
gexinghai 323220c87c bug
2 years ago
gexinghai a22a2934d5 计时器界面
2 years ago
gexinghai 88b35080c0 commit
2 years ago
gexinghai dfbda2dc4b 初步完成计时器的显示界面
2 years ago
gexinghai e52f3aaa49 初步实现CRUD
2 years ago
gexinghai fe9774dda6 重写数据库,实现部分方法
2 years ago
gexinghai f0107ccd5e Merge branch 'dev' of https://bdgit.educoder.net/mbhvfy6mx/timemaneger into gxh_branch
2 years ago
gexinghai e7d9b8298c init
2 years ago
gexinghai b9aa660177 Merge branch 'main' of https://bdgit.educoder.net/mbhvfy6mx/timemaneger into gxh_branch
2 years ago
gexinghai 04a87fced1 temp
2 years ago
gexinghai c35269be99 Merge branch 'main' of into gxh_branch
2 years ago
gexinghai 8a0ed14a88 temp
2 years ago
gexinghai 4cf605f04e Merge branch 'main' of https://bdgit.educoder.net/mbhvfy6mx/timemaneger into gxh_branch
2 years ago
gexinghai 33afda9678 为main.dart添加了一些注释
2 years ago
gexinghai 2e9ab0181f 将主界面的AppBar独立为一个文件TopBar.dart
2 years ago

@ -1,2 +0,0 @@
#Tue Oct 24 13:39:52 CST 2023
gradle.version=7.4.2

@ -1,39 +0,0 @@
package io.flutter.plugins;
import androidx.annotation.Keep;
import androidx.annotation.NonNull;
import io.flutter.Log;
import io.flutter.embedding.engine.FlutterEngine;
/**
* Generated file. Do not edit.
* This file is generated by the Flutter tool based on the
* plugins that support the Android platform.
*/
@Keep
public final class GeneratedPluginRegistrant {
private static final String TAG = "GeneratedPluginRegistrant";
public static void registerWith(@NonNull FlutterEngine flutterEngine) {
try {
flutterEngine.getPlugins().add(new dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin());
} catch (Exception e) {
Log.e(TAG, "Error registering plugin package_info_plus, dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin", e);
}
try {
flutterEngine.getPlugins().add(new io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin());
} catch (Exception e) {
Log.e(TAG, "Error registering plugin shared_preferences_android, io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin", e);
}
try {
flutterEngine.getPlugins().add(new com.tekartik.sqflite.SqflitePlugin());
} catch (Exception e) {
Log.e(TAG, "Error registering plugin sqflite, com.tekartik.sqflite.SqflitePlugin", e);
}
try {
flutterEngine.getPlugins().add(new io.flutter.plugins.urllauncher.UrlLauncherPlugin());
} catch (Exception e) {
Log.e(TAG, "Error registering plugin url_launcher_android, io.flutter.plugins.urllauncher.UrlLauncherPlugin", e);
}
}
}

@ -1,2 +0,0 @@
sdk.dir=C:\\Users\\28749\\AppData\\Local\\Android\\sdk
flutter.sdk=C:\\flutter

@ -1 +0,0 @@
CONTRIBUTORS.md  assetCONTRIBUTORS.md README.md  asset README.mdicon.svg  asseticon.svg2packages/cupertino_icons/assets/CupertinoIcons.ttf  asset2packages/cupertino_icons/assets/CupertinoIcons.ttf1packages/flutter_about_page/fonts/RobotoLight.ttf  asset1packages/flutter_about_page/fonts/RobotoLight.ttf2packages/flutter_about_page/fonts/RobotoMedium.ttf  asset2packages/flutter_about_page/fonts/RobotoMedium.ttf9packages/font_awesome_flutter/lib/fonts/fa-brands-400.ttf  asset9packages/font_awesome_flutter/lib/fonts/fa-brands-400.ttf:packages/font_awesome_flutter/lib/fonts/fa-regular-400.ttf  asset:packages/font_awesome_flutter/lib/fonts/fa-regular-400.ttf8packages/font_awesome_flutter/lib/fonts/fa-solid-900.ttf  asset8packages/font_awesome_flutter/lib/fonts/fa-solid-900.ttf

@ -1 +0,0 @@
{"CONTRIBUTORS.md":["CONTRIBUTORS.md"],"README.md":["README.md"],"icon.svg":["icon.svg"],"packages/cupertino_icons/assets/CupertinoIcons.ttf":["packages/cupertino_icons/assets/CupertinoIcons.ttf"],"packages/flutter_about_page/fonts/RobotoLight.ttf":["packages/flutter_about_page/fonts/RobotoLight.ttf"],"packages/flutter_about_page/fonts/RobotoMedium.ttf":["packages/flutter_about_page/fonts/RobotoMedium.ttf"],"packages/font_awesome_flutter/lib/fonts/fa-brands-400.ttf":["packages/font_awesome_flutter/lib/fonts/fa-brands-400.ttf"],"packages/font_awesome_flutter/lib/fonts/fa-regular-400.ttf":["packages/font_awesome_flutter/lib/fonts/fa-regular-400.ttf"],"packages/font_awesome_flutter/lib/fonts/fa-solid-900.ttf":["packages/font_awesome_flutter/lib/fonts/fa-solid-900.ttf"]}

@ -1,11 +0,0 @@
<<<<<<< HEAD
=======
| 姓名 | 知士荟 | 头歌 | Github |
| ------ | -------------------------------------------------------- | --------------------------------------------------- | ------------------------------------------- |
| 葛兴海 | [@葛兴海](https://www.learnerhub.net/#/users/12147/docs) | [@葛兴海](https://code.educoder.net/user/ps9up4ig6) | [@Sheeet](https://github.com/icesheeet) |
| 庞浩 | [@庞浩](https://www.learnerhub.net/#/users/12027/docs) | [@庞浩](https://code.educoder.net/user/mbhvfy6mx) | |
| 卫俊钢 | [@卫俊钢](https://www.learnerhub.net/#/users/12144/docs) | [@卫俊钢](https://www.educoder.net/users/p2jf6ytqz) | [@JungangWei](https://github.com/githubwjg) |
| 邹兴云 | [@邹兴云](https://www.learnerhub.net/#/users/12026/docs) | [@邹兴云](https://www.educoder.net/users/p8fjyvg3u) | |
| 蔡玉祥 | [@蔡玉祥](https://www.learnerhub.net/#/users/12015/docs) | [@蔡玉祥](https://www.educoder.net/users/mszfy297n) | |
>>>>>>> gxh_branch

@ -1 +0,0 @@
[{"family":"MaterialIcons","fonts":[{"asset":"fonts/MaterialIcons-Regular.otf"}]},{"family":"packages/cupertino_icons/CupertinoIcons","fonts":[{"asset":"packages/cupertino_icons/assets/CupertinoIcons.ttf"}]},{"family":"packages/flutter_about_page/RobotoMedium","fonts":[{"asset":"packages/flutter_about_page/fonts/RobotoMedium.ttf"}]},{"family":"packages/flutter_about_page/Roboto","fonts":[{"asset":"packages/flutter_about_page/fonts/RobotoLight.ttf"}]},{"family":"packages/font_awesome_flutter/FontAwesomeBrands","fonts":[{"weight":400,"asset":"packages/font_awesome_flutter/lib/fonts/fa-brands-400.ttf"}]},{"family":"packages/font_awesome_flutter/FontAwesomeRegular","fonts":[{"weight":400,"asset":"packages/font_awesome_flutter/lib/fonts/fa-regular-400.ttf"}]},{"family":"packages/font_awesome_flutter/FontAwesomeSolid","fonts":[{"weight":900,"asset":"packages/font_awesome_flutter/lib/fonts/fa-solid-900.ttf"}]}]

File diff suppressed because it is too large Load Diff

@ -1,3 +0,0 @@
# 时间管理
一个基于Flutter框架的APP

File diff suppressed because one or more lines are too long

@ -1 +0,0 @@
<?xml version="1.0" ?><svg id="OBJECT" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><defs><style>.cls-1{fill:#bddbff;}.cls-2{fill:#3d9ae2;}.cls-3{fill:#fff;}</style></defs><title/><path class="cls-1" d="M484.5,206H423.74A173.54,173.54,0,0,0,410,172.75l43-43a20,20,0,0,0,0-28.28L410.5,59.07a20,20,0,0,0-28.28,0l-43,43A173.54,173.54,0,0,0,306,88.26V27.5a20,20,0,0,0-20-20H226a20,20,0,0,0-20,20V88.26A173.54,173.54,0,0,0,172.75,102l-43-43a20,20,0,0,0-28.28,0L59.07,101.5a20,20,0,0,0,0,28.28l43,43A173.54,173.54,0,0,0,88.26,206H27.5a20,20,0,0,0-20,20v60a20,20,0,0,0,20,20H88.26A173.54,173.54,0,0,0,102,339.25l-43,43a20,20,0,0,0,0,28.28l42.43,42.43a20,20,0,0,0,28.28,0l43-43A173.54,173.54,0,0,0,206,423.74V484.5a20,20,0,0,0,20,20h60a20,20,0,0,0,20-20V423.74A173.54,173.54,0,0,0,339.25,410l43,43a20,20,0,0,0,28.28,0l42.43-42.43a20,20,0,0,0,0-28.28l-43-43A173.54,173.54,0,0,0,423.74,306H484.5a20,20,0,0,0,20-20V226A20,20,0,0,0,484.5,206Z"/><path class="cls-2" d="M286,512H226a27.54,27.54,0,0,1-27.5-27.5V429.24a181.53,181.53,0,0,1-24.34-10.08l-39.08,39.07a27.53,27.53,0,0,1-38.89,0L53.77,415.81a27.53,27.53,0,0,1,0-38.89l39.07-39.08A181.53,181.53,0,0,1,82.76,313.5H27.5A27.54,27.54,0,0,1,0,286V226a27.54,27.54,0,0,1,27.5-27.5H82.76a181.53,181.53,0,0,1,10.08-24.34L53.77,135.08a27.53,27.53,0,0,1,0-38.89L96.19,53.77a27.53,27.53,0,0,1,38.89,0l39.08,39.07A181.53,181.53,0,0,1,198.5,82.76V27.5A27.54,27.54,0,0,1,226,0h60a27.54,27.54,0,0,1,27.5,27.5V82.76a181.53,181.53,0,0,1,24.34,10.08l39.08-39.07a27.53,27.53,0,0,1,38.89,0l42.42,42.42a27.53,27.53,0,0,1,0,38.89l-39.07,39.08a181.53,181.53,0,0,1,10.08,24.34H484.5A27.54,27.54,0,0,1,512,226v60a27.54,27.54,0,0,1-27.5,27.5H429.24a181.53,181.53,0,0,1-10.08,24.34l39.07,39.08a27.53,27.53,0,0,1,0,38.89l-42.42,42.42a27.53,27.53,0,0,1-38.89,0l-39.08-39.07a181.53,181.53,0,0,1-24.34,10.08V484.5A27.54,27.54,0,0,1,286,512ZM172.75,402.46a7.49,7.49,0,0,1,3.57.91,166.75,166.75,0,0,0,31.82,13.18,7.5,7.5,0,0,1,5.36,7.19V484.5A12.52,12.52,0,0,0,226,497h60a12.52,12.52,0,0,0,12.5-12.5V423.74a7.5,7.5,0,0,1,5.36-7.19,166.75,166.75,0,0,0,31.82-13.18,7.5,7.5,0,0,1,8.88,1.29l43,43a12.52,12.52,0,0,0,17.68,0l42.43-42.43a12.52,12.52,0,0,0,0-17.68l-43-43a7.5,7.5,0,0,1-1.29-8.88,166.75,166.75,0,0,0,13.18-31.82,7.5,7.5,0,0,1,7.19-5.36H484.5A12.52,12.52,0,0,0,497,286V226a12.52,12.52,0,0,0-12.5-12.5H423.74a7.5,7.5,0,0,1-7.19-5.36,166.75,166.75,0,0,0-13.18-31.82,7.5,7.5,0,0,1,1.29-8.88l43-43a12.52,12.52,0,0,0,0-17.68L405.2,64.37a12.52,12.52,0,0,0-17.68,0l-43,43a7.5,7.5,0,0,1-8.88,1.29,166.75,166.75,0,0,0-31.82-13.18,7.5,7.5,0,0,1-5.36-7.19V27.5A12.52,12.52,0,0,0,286,15H226a12.52,12.52,0,0,0-12.5,12.5V88.26a7.5,7.5,0,0,1-5.36,7.19,166.75,166.75,0,0,0-31.82,13.18,7.5,7.5,0,0,1-8.88-1.29l-43-43a12.52,12.52,0,0,0-17.68,0L64.37,106.8a12.52,12.52,0,0,0,0,17.68l43,43a7.5,7.5,0,0,1,1.29,8.88,166.75,166.75,0,0,0-13.18,31.82,7.5,7.5,0,0,1-7.19,5.36H27.5A12.52,12.52,0,0,0,15,226v60a12.52,12.52,0,0,0,12.5,12.5H88.26a7.5,7.5,0,0,1,7.19,5.36,166.75,166.75,0,0,0,13.18,31.82,7.5,7.5,0,0,1-1.29,8.88l-43,43a12.52,12.52,0,0,0,0,17.68l42.43,42.43a12.52,12.52,0,0,0,17.68,0l43-43A7.54,7.54,0,0,1,172.75,402.46Z"/><circle class="cls-3" cx="256" cy="256" r="140"/><path class="cls-2" d="M256,403.5c-81.33,0-147.5-66.17-147.5-147.5S174.67,108.5,256,108.5,403.5,174.67,403.5,256,337.33,403.5,256,403.5Zm0-280c-73.06,0-132.5,59.44-132.5,132.5S182.94,388.5,256,388.5,388.5,329.06,388.5,256,329.06,123.5,256,123.5Z"/><path class="cls-2" d="M296,303.5a7.5,7.5,0,0,1-5.32-2.21l-40-40.23a7.49,7.49,0,0,1-2.18-5.29V176a7.5,7.5,0,0,1,15,0v76.68l37.82,38A7.5,7.5,0,0,1,296,303.5Z"/><path class="cls-2" d="M146,263.5H116a7.5,7.5,0,0,1,0-15h30a7.5,7.5,0,0,1,0,15Z"/><path class="cls-2" d="M396,263.5H366a7.5,7.5,0,0,1,0-15h30a7.5,7.5,0,0,1,0,15Z"/><path class="cls-2" d="M171.15,178.65a7.48,7.48,0,0,1-5.31-2.2L151.7,162.31a7.5,7.5,0,0,1,10.61-10.61l14.14,14.14a7.51,7.51,0,0,1-5.3,12.81Z"/><path class="cls-2" d="M355,362.5a7.52,7.52,0,0,1-5.31-2.2l-14.14-14.14a7.5,7.5,0,0,1,10.61-10.61l14.14,14.14A7.51,7.51,0,0,1,355,362.5Z"/><path class="cls-2" d="M340.85,178.65a7.51,7.51,0,0,1-5.3-12.81l14.14-14.14a7.5,7.5,0,0,1,10.61,10.61l-14.14,14.14A7.48,7.48,0,0,1,340.85,178.65Z"/><path class="cls-2" d="M157,362.5a7.51,7.51,0,0,1-5.3-12.81l14.14-14.14a7.5,7.5,0,0,1,10.61,10.61L162.31,360.3A7.52,7.52,0,0,1,157,362.5Z"/><path class="cls-2" d="M256,153.5a7.5,7.5,0,0,1-7.5-7.5V116a7.5,7.5,0,0,1,15,0v30A7.5,7.5,0,0,1,256,153.5Z"/><path class="cls-2" d="M256,403.5a7.5,7.5,0,0,1-7.5-7.5V366a7.5,7.5,0,0,1,15,0v30A7.5,7.5,0,0,1,256,403.5Z"/></svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

34
ios/.gitignore vendored

@ -1,34 +0,0 @@
**/dgph
*.mode1v3
*.mode2v3
*.moved-aside
*.pbxuser
*.perspectivev3
**/*sync/
.sconsign.dblite
.tags*
**/.vagrant/
**/DerivedData/
Icon?
**/Pods/
**/.symlinks/
profile
xcuserdata
**/.generated/
Flutter/App.framework
Flutter/Flutter.framework
Flutter/Flutter.podspec
Flutter/Generated.xcconfig
Flutter/ephemeral/
Flutter/app.flx
Flutter/app.zip
Flutter/flutter_assets/
Flutter/flutter_export_environment.sh
ServiceDefinitions.json
Runner/GeneratedPluginRegistrant.*
# Exceptions to above rules.
!default.mode1v3
!default.mode2v3
!default.pbxuser
!default.perspectivev3

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>App</string>
<key>CFBundleIdentifier</key>
<string>io.flutter.flutter.app</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>App</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>11.0</string>
</dict>
</plist>

@ -1 +0,0 @@
#include "Generated.xcconfig"

@ -1,14 +0,0 @@
// This is a generated file; do not edit or check into version control.
FLUTTER_ROOT=F:\study\school\ruanjian\flutter\flutter
FLUTTER_APPLICATION_PATH=F:\study\school\ruanjian\timecop\timemanager
COCOAPODS_PARALLEL_CODE_SIGN=true
FLUTTER_TARGET=lib\main.dart
FLUTTER_BUILD_DIR=build
FLUTTER_BUILD_NAME=1.0.0
FLUTTER_BUILD_NUMBER=1
EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386
EXCLUDED_ARCHS[sdk=iphoneos*]=armv7
DART_OBFUSCATION=false
TRACK_WIDGET_CREATION=true
TREE_SHAKE_ICONS=false
PACKAGE_CONFIG=.dart_tool/package_config.json

@ -1 +0,0 @@
#include "Generated.xcconfig"

@ -1,13 +0,0 @@
#!/bin/sh
# This is a generated file; do not edit or check into version control.
export "FLUTTER_ROOT=F:\study\school\ruanjian\flutter\flutter"
export "FLUTTER_APPLICATION_PATH=F:\study\school\ruanjian\timecop\timemanager"
export "COCOAPODS_PARALLEL_CODE_SIGN=true"
export "FLUTTER_TARGET=lib\main.dart"
export "FLUTTER_BUILD_DIR=build"
export "FLUTTER_BUILD_NAME=1.0.0"
export "FLUTTER_BUILD_NUMBER=1"
export "DART_OBFUSCATION=false"
export "TRACK_WIDGET_CREATION=true"
export "TREE_SHAKE_ICONS=false"
export "PACKAGE_CONFIG=.dart_tool/package_config.json"

@ -1,614 +0,0 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 97C146E61CF9000F007C117D /* Project object */;
proxyType = 1;
remoteGlobalIDString = 97C146ED1CF9000F007C117D;
remoteInfo = Runner;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
9740EEB21CF90195004384FC /* Debug.xcconfig */,
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
9740EEB31CF90195004384FC /* Generated.xcconfig */,
);
name = Flutter;
sourceTree = "<group>";
};
331C8082294A63A400263BE5 /* RunnerTests */ = {
isa = PBXGroup;
children = (
331C807B294A618700263BE5 /* RunnerTests.swift */,
);
path = RunnerTests;
sourceTree = "<group>";
};
97C146E51CF9000F007C117D = {
isa = PBXGroup;
children = (
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
331C8082294A63A400263BE5 /* RunnerTests */,
);
sourceTree = "<group>";
};
97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
331C8081294A63A400263BE5 /* RunnerTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
);
path = Runner;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
331C8080294A63A400263BE5 /* RunnerTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
buildPhases = (
331C807D294A63A400263BE5 /* Sources */,
331C807E294A63A400263BE5 /* Frameworks */,
331C807F294A63A400263BE5 /* Resources */,
);
buildRules = (
);
dependencies = (
331C8086294A63A400263BE5 /* PBXTargetDependency */,
);
name = RunnerTests;
productName = RunnerTests;
productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
97C146ED1CF9000F007C117D /* Runner */ = {
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
);
buildRules = (
);
dependencies = (
);
name = Runner;
productName = Runner;
productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1430;
ORGANIZATIONNAME = "";
TargetAttributes = {
331C8080294A63A400263BE5 = {
CreatedOnToolsVersion = 14.0;
TestTargetID = 97C146ED1CF9000F007C117D;
};
97C146ED1CF9000F007C117D = {
CreatedOnToolsVersion = 7.3.1;
LastSwiftMigration = 1100;
};
};
};
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 97C146E51CF9000F007C117D;
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
97C146ED1CF9000F007C117D /* Runner */,
331C8080294A63A400263BE5 /* RunnerTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
331C807F294A63A400263BE5 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
97C146EC1CF9000F007C117D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
);
name = "Thin Binary";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
331C807D294A63A400263BE5 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
97C146EA1CF9000F007C117D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
331C8086294A63A400263BE5 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 97C146ED1CF9000F007C117D /* Runner */;
targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C146FB1CF9000F007C117D /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C147001CF9000F007C117D /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Profile;
};
249021D4217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.timemanage;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
};
331C8088294A63A400263BE5 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.timemanage.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Debug;
};
331C8089294A63A400263BE5 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.timemanage.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Release;
};
331C808A294A63A400263BE5 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.timemanage.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Profile;
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
97C147061CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.timemanage;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
97C147071CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.timemanage;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
331C8088294A63A400263BE5 /* Debug */,
331C8089294A63A400263BE5 /* Release */,
331C808A294A63A400263BE5 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147031CF9000F007C117D /* Debug */,
97C147041CF9000F007C117D /* Release */,
249021D3217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147061CF9000F007C117D /* Debug */,
97C147071CF9000F007C117D /* Release */,
249021D4217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;
}

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreviewsEnabled</key>
<false/>
</dict>
</plist>

@ -1,98 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1430"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
<TestableReference
skipped = "NO"
parallelizable = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "331C8080294A63A400263BE5"
BuildableName = "RunnerTests.xctest"
BlueprintName = "RunnerTests"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Profile"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreviewsEnabled</key>
<false/>
</dict>
</plist>

@ -1,13 +0,0 @@
import UIKit
import Flutter
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}

@ -1,122 +0,0 @@
{
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@3x.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@3x.png",
"scale" : "3x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@1x.png",
"scale" : "1x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@1x.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "Icon-App-83.5x83.5@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "Icon-App-1024x1024@1x.png",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 450 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 704 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 762 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

@ -1,23 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "LaunchImage.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

@ -1,5 +0,0 @@
# Launch Screen Assets
You can customize the launch screen with your own desired assets by replacing the image files in this directory.
You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.

@ -1,37 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
<viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
</imageView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
<resources>
<image name="LaunchImage" width="168" height="185"/>
</resources>
</document>

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<scenes>
<!--Flutter View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>

@ -1,19 +0,0 @@
//
// Generated file. Do not edit.
//
// clang-format off
#ifndef GeneratedPluginRegistrant_h
#define GeneratedPluginRegistrant_h
#import <Flutter/Flutter.h>
NS_ASSUME_NONNULL_BEGIN
@interface GeneratedPluginRegistrant : NSObject
+ (void)registerWithRegistry:(NSObject<FlutterPluginRegistry>*)registry;
@end
NS_ASSUME_NONNULL_END
#endif /* GeneratedPluginRegistrant_h */

@ -1,42 +0,0 @@
//
// Generated file. Do not edit.
//
// clang-format off
#import "GeneratedPluginRegistrant.h"
#if __has_include(<package_info_plus/FLTPackageInfoPlusPlugin.h>)
#import <package_info_plus/FLTPackageInfoPlusPlugin.h>
#else
@import package_info_plus;
#endif
#if __has_include(<shared_preferences_foundation/SharedPreferencesPlugin.h>)
#import <shared_preferences_foundation/SharedPreferencesPlugin.h>
#else
@import shared_preferences_foundation;
#endif
#if __has_include(<sqflite/SqflitePlugin.h>)
#import <sqflite/SqflitePlugin.h>
#else
@import sqflite;
#endif
#if __has_include(<url_launcher_ios/FLTURLLauncherPlugin.h>)
#import <url_launcher_ios/FLTURLLauncherPlugin.h>
#else
@import url_launcher_ios;
#endif
@implementation GeneratedPluginRegistrant
+ (void)registerWithRegistry:(NSObject<FlutterPluginRegistry>*)registry {
[FLTPackageInfoPlusPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTPackageInfoPlusPlugin"]];
[SharedPreferencesPlugin registerWithRegistrar:[registry registrarForPlugin:@"SharedPreferencesPlugin"]];
[SqflitePlugin registerWithRegistrar:[registry registrarForPlugin:@"SqflitePlugin"]];
[FLTURLLauncherPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTURLLauncherPlugin"]];
}
@end

@ -1,49 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>Timemanage</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>timemanage</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
</dict>
</plist>

@ -1 +0,0 @@
#import "GeneratedPluginRegistrant.h"

@ -1,12 +0,0 @@
import Flutter
import UIKit
import XCTest
class RunnerTests: XCTestCase {
func testExample() {
// If you add code to the Runner application, consider adding tests here.
// See https://developer.apple.com/documentation/xctest for more information about using XCTest.
}
}

@ -1,44 +0,0 @@
import 'package:flutter/material.dart';
import 'package:timemanage/model/project.dart';
import 'package:timemanage/model/timer_entry.dart';
abstract class DataProvider {
Future<Project> createProject({required String name, Color? colour});
Future<List<Project>> listProjects();
Future<void> editProject(Project project);
Future<void> deleteProject(Project project);
Future<TimerEntry> createTimer({
String? description,
int? projectID,
DateTime? startTime,
DateTime? endTime,
});
Future<List<TimerEntry>> listTimers();
Future<void> editTimer(TimerEntry timer);
Future<void> deleteTimer(TimerEntry timer);
Future<void> import(DataProvider other) async {
List<TimerEntry> otherEntries = await other.listTimers();
List<Project> otherProjects = await other.listProjects();
List<Project> newOtherProjects = await Stream.fromIterable(otherProjects)
.asyncMap((event) => createProject(name: event.name))
.toList();
for (TimerEntry otherEntry in otherEntries) {
int projectOffset = otherProjects
.indexWhere((element) => element.id == otherEntry.projectID);
int? projectID;
if (projectOffset >= 0) {
projectID = newOtherProjects[projectOffset].id;
}
await createTimer(
description: otherEntry.description,
projectID: projectID,
startTime: otherEntry.startTime,
endTime: otherEntry.endTime,
);
}
}
}

@ -1,259 +0,0 @@
import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart';
import 'package:timemanage/db/data_provider.dart';
import 'package:timemanage/model/timer_entry.dart';
import 'package:timemanage/model/project.dart';
import 'package:path/path.dart' as p;
import 'package:xdg_directories/xdg_directories.dart';
class DatabaseProvider extends DataProvider {
final Database _db;
static const int _dbVersion = 4;
DatabaseProvider(this._db);
Future<void> close() async {
await _db.close();
}
static void _onConfigure(Database db) async {
await db.execute("PRAGMA foreign_keys = OFF");
}
static void _onCreate(Database db, int version) async {
await db.execute('''
create table if not exists projects(
id integer not null primary key autoincrement,
name text not null,
colour int not null,
archived boolean not null default 0
)
''');
await db.execute('''
create table if not exists timers(
id integer not null primary key autoincrement,
project_id integer default null,
description text not null,
start_time int not null,
end_time int default null,
notes text default null,
foreign key(project_id) references projects(id) on delete set null
)
''');
await db.execute('''
create index if not exists timers_start_time on timers(start_time)
''');
}
static void _onUpgrade(Database db, int version, int newVersion) async {
if (version < 2) {
await db.execute('''
alter table projects add column archived boolean not null default false
''');
}
if (version < 3) {
await db.execute('''
alter table timers add column notes text default null
''');
}
if (version < 4) {
// fix the bug of the default value being `false` for project archives instead of `0`.
// `false` works fine on sqlite >= 3.23.0. Unfortunately, some Android phones still have
// ancient sqlite versions, so to them `false` is a string rather than an integer with
// value `0`
Batch b = db.batch();
b.execute('''
create table projects_tmp(
id integer not null primary key autoincrement,
name text not null,
colour int not null,
archived boolean not null default 0
)
''');
b.execute("insert into projects_tmp select * from projects");
b.execute("drop table projects");
b.execute('''
create table projects(
id integer not null primary key autoincrement,
name text not null,
colour int not null,
archived boolean not null default 0
)
''');
b.execute('''
insert into projects select id, name, colour,
case archived
when 'false' then 0
when 'true' then 1
when '0' then 0
when '1' then 1
when 0 then 0
when 1 then 1
else 0
end as archived
from projects_tmp
''');
b.execute("drop table projects_tmp");
await b.commit(noResult: true);
}
}
static Future<DatabaseProvider> open(String path) async {
// open the database
Database db = await openDatabase(path,
onConfigure: _onConfigure,
onCreate: _onCreate,
onUpgrade: _onUpgrade,
version: _dbVersion);
await db.execute("PRAGMA foreign_keys = ON");
DatabaseProvider repo = DatabaseProvider(db);
return repo;
}
/// the c in crud
@override
Future<Project> createProject(
{required String name, Color? colour, bool? archived}) async {
colour ??= Color.fromARGB(255, 60, 108, 186);
archived ??= false;
int id = await _db.rawInsert(
"insert into projects(name, colour, archived) values(?, ?, ?)",
<dynamic>[name, colour.value, archived ? 1 : 0]);
return Project(id: id, name: name, colour: colour, archived: archived);
}
/// the r in crud
@override
Future<List<Project>> listProjects() async {
List<Map<String, dynamic>> rawProjects = await _db.rawQuery('''
select id, name, colour,
case archived
when 'false' then 0
when 'true' then 1
when '0' then 0
when '1' then 1
when 0 then 0
when 1 then 1
else 0
end as archived
from projects order by name asc
''');
return rawProjects
.map((Map<String, dynamic> row) => Project(
id: row["id"] as int,
name: row["name"] as String,
colour: Color(row["colour"] as int),
archived: (row["archived"] as int?) == 1))
.toList();
}
/// the u in crud
@override
Future<void> editProject(Project project) async {
int rows = await _db.rawUpdate(
"update projects set name=?, colour=?, archived=? where id=?",
<dynamic>[
project.name,
project.colour,
project.archived ? 1 : 0,
project.id
]);
assert(rows == 1);
}
/// the d in crud
@override
Future<void> deleteProject(Project project) async {
await _db
.rawDelete("delete from projects where id=?", <dynamic>[project.id]);
}
/// the c in crud
@override
Future<TimerEntry> createTimer(
{String? description,
int? projectID,
DateTime? startTime,
DateTime? endTime,
String? notes}) async {
int st = startTime?.millisecondsSinceEpoch ??
DateTime.now().millisecondsSinceEpoch;
int? et = endTime?.millisecondsSinceEpoch;
int id = await _db.rawInsert(
"insert into timers(project_id, description, start_time, end_time, notes) values(?, ?, ?, ?, ?)",
<dynamic>[projectID, description, st, et, notes]);
return TimerEntry(
id: id,
description: description,
projectID: projectID,
startTime: DateTime.fromMillisecondsSinceEpoch(st),
endTime: endTime,
notes: notes);
}
/// the r in crud
@override
Future<List<TimerEntry>> listTimers() async {
List<Map<String, dynamic>> rawTimers = await _db.rawQuery(
"select id, project_id, description, start_time, end_time, notes from timers order by start_time asc");
return rawTimers
.map((Map<String, dynamic> row) => TimerEntry(
id: row["id"] as int,
projectID: row["project_id"] as int?,
description: row["description"] as String?,
startTime:
DateTime.fromMillisecondsSinceEpoch(row["start_time"] as int),
endTime: row["end_time"] != null
? DateTime.fromMillisecondsSinceEpoch(row["end_time"] as int)
: null,
notes: row["notes"] as String?))
.toList();
}
/// the u in crud
@override
Future<void> editTimer(TimerEntry timer) async {
int st = timer.startTime.millisecondsSinceEpoch;
int? et = timer.endTime?.millisecondsSinceEpoch;
await _db.rawUpdate(
"update timers set project_id=?, description=?, start_time=?, end_time=?, notes=? where id=?",
<dynamic>[
timer.projectID,
timer.description,
st,
et,
timer.notes,
timer.id
]);
}
/// the d in crud
@override
Future<void> deleteTimer(TimerEntry timer) async {
await _db.rawDelete("delete from timers where id=?", <dynamic>[timer.id]);
}
static Future<File> getDatabaseFile() async {
final dbPath =
(Platform.isLinux) ? dataHome.path : await getDatabasesPath();
return File(p.join(dbPath, 'timecop.db'));
}
static Future<bool> isValidDatabaseFile(String path) async {
try {
Database db = await openDatabase(path, readOnly: true);
await db.rawQuery(
"select id, name, colour, archived from projects order by name asc limit 1");
await db.rawQuery(
"select id, project_id, description, start_time, end_time, notes from timers order by start_time asc limit 1");
await db.close();
return true;
} on Exception catch (_) {
return false;
}
}
}

@ -1,166 +0,0 @@
import 'package:flutter/material.dart';
import 'package:timemanage/db/data_provider.dart';
import 'package:timemanage/model/project.dart';
import 'package:timemanage/model/timer_entry.dart';
import 'dart:math';
class MockDataProvider extends DataProvider {
String localeKey;
static final Map<String, Map<String, String>> l10n = {
"en": {
"administration": "Administration",
"mockups": "Mockups",
"ui-layout": "UI Layout",
"coffee": "Coffee",
"app-development": "App development"
},
"zh-CN": {
"ui-layout": "UI布局",
"administration": "管理",
"coffee": "咖啡",
"mockups": "样机",
"app-development": "应用程式开发",
},
};
MockDataProvider(Locale locale) : localeKey = locale.languageCode {
if (locale.languageCode == "zh") {
localeKey += "-${locale.countryCode!}";
}
}
@override
Future<List<Project>> listProjects() async {
return <Project>[
Project(
id: 1,
name: "Time Manager",
colour: Colors.cyan[600]!,
archived: false),
Project(
id: 2,
name: l10n[localeKey]!["administration"]!,
colour: Colors.pink[600]!,
archived: false,
),
];
}
@override
Future<List<TimerEntry>> listTimers() async {
int tid = 1;
Random rand = Random(42);
// start with running timers
List<TimerEntry> entries = [
TimerEntry(
id: tid++,
description: l10n[localeKey]!["ui-layout"],
projectID: 1,
startTime: DateTime.now()
.subtract(const Duration(hours: 2, minutes: 10, seconds: 1)),
endTime: null,
),
TimerEntry(
id: tid++,
description: l10n[localeKey]!["coffee"],
projectID: 2,
startTime:
DateTime.now().subtract(const Duration(minutes: 3, seconds: 14)),
endTime: null,
),
];
// add some fake March stuff
for (int w = 0; w < 4; w++) {
for (int d = 0; d < 5; d++) {
String descriptionKey;
double r = rand.nextDouble();
if (r <= 0.2) {
descriptionKey = 'mockups';
} else if (r <= 0.5) {
descriptionKey = 'ui-layout';
} else {
descriptionKey = 'app-development';
}
entries.add(TimerEntry(
id: tid++,
description: l10n[localeKey]![descriptionKey],
projectID: 1,
startTime: DateTime(
2020,
3,
(w * 7) + d + 2,
rand.nextInt(3) + 8,
rand.nextInt(60),
rand.nextInt(60),
),
endTime: DateTime(
2020,
3,
(w * 7) + d + 2,
rand.nextInt(3) + 13,
rand.nextInt(60),
rand.nextInt(60),
),
));
entries.add(TimerEntry(
id: tid++,
description: l10n[localeKey]!['administration'],
projectID: 2,
startTime: DateTime(
2020,
3,
(w * 7) + d + 2,
14,
rand.nextInt(30),
rand.nextInt(60),
),
endTime: DateTime(
2020,
3,
(w * 7) + d + 2,
15,
rand.nextInt(30),
rand.nextInt(60),
),
));
}
}
return entries;
}
@override
Future<Project> createProject(
{required String name, Color? colour, bool? archived}) async {
return Project(
id: -1, name: name, colour: colour!, archived: archived ?? false);
}
@override
Future<void> editProject(Project project) async {}
@override
Future<void> deleteProject(Project project) async {}
@override
Future<TimerEntry> createTimer(
{String? description,
int? projectID,
DateTime? startTime,
DateTime? endTime}) async {
DateTime st = startTime ?? DateTime.now();
return TimerEntry(
id: -1,
description: description,
projectID: projectID,
startTime: st,
endTime: endTime,
);
}
@override
Future<void> editTimer(TimerEntry timer) async {}
@override
Future<void> deleteTimer(TimerEntry timer) async {}
}

@ -1,58 +0,0 @@
import 'package:equatable/equatable.dart';
//
class TimerEntry extends Equatable {
final int id;
final String? description;
final int? projectID;
final DateTime startTime;
final DateTime? endTime;
final String? notes;
//
const TimerEntry(
{required this.id,
required this.description,
required this.projectID,
required this.startTime,
required this.endTime,
this.notes = ""});
//
@override
List<Object?> get props =>
[id, description, projectID, startTime, endTime, notes];
@override
bool get stringify => true;
//
TimerEntry.clone(TimerEntry timer,
{String? description,
int? projectID,
DateTime? startTime,
DateTime? endTime,
String? notes})
: this(
id: timer.id,
description: description ?? timer.description,
projectID: projectID ?? timer.projectID,
startTime: startTime ?? timer.startTime,
endTime: endTime ?? timer.endTime,
notes: notes ?? timer.notes,
);
//
static String formatDuration(Duration d) {
if (d.inHours > 0) {
return "${d.inHours}:${(d.inMinutes - (d.inHours * 60)).toString().padLeft(2, "0")}:${(d.inSeconds - (d.inMinutes * 60)).toString().padLeft(2, "0")}";
} else {
return "${d.inMinutes.toString().padLeft(2, "0")}:${(d.inSeconds - (d.inMinutes * 60)).toString().padLeft(2, "0")}";
}
}
//
String formatTime() {
Duration d = (endTime ?? DateTime.now()).difference(startTime);
return formatDuration(d);
}
}

@ -1,671 +0,0 @@
// import 'package:flutter/cupertino.dart';
// import 'package:flutter/material.dart';
// class SpaceWidget extends StatelessWidget {
// final double width;
// final double height;
// SpaceWidget({this.width = 0.0, this.height = 0.0});
// @override
// Widget build(BuildContext context) {
// return SizedBox(
// width: width,
// height: height,
// );
// }
// }
// class SyllabusPage extends StatefulWidget {
// @override
// State<StatefulWidget> createState() => PageState();
// }
// class PageState extends State<SyllabusPage> {
// var colorList = [
// Colors.red,
// Colors.lightBlueAccent,
// Colors.grey,
// Colors.cyan,
// Colors.amber,
// Colors.deepPurpleAccent,
// Colors.purpleAccent
// ];
// var infoList = ["高等数学-周某某教授@综合楼201", "大学英语-王某某讲师@行政楼501"];
// var weekList = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'];
// var dateList = [];
// var currentWeekIndex = 0;
// @override
// void initState() {
// super.initState();
// var monday = 1;
// var mondayTime = DateTime.now();
// //
// while (mondayTime.weekday != monday) {
// mondayTime = mondayTime.subtract(new Duration(days: 1));
// }
// mondayTime.year; //2020
// mondayTime.month; //6(jsjs0dart1)
// mondayTime.day; //6
// // nowTime.hour ;//6
// // nowTime.minute ;//6
// // nowTime.second ;//6
// for (int i = 0; i < 7; i++) {
// dateList.add(
// mondayTime.month.toString() + "/" + (mondayTime.day + i).toString());
// if ((mondayTime.day + i) == DateTime.now().day) {
// setState(() {
// currentWeekIndex = i + 1;
// });
// }
// }
// // print('Recent monday '+DateTime.now().day.toString());
// }
// @override
// Widget build(BuildContext context) {
// return Scaffold(
// body: Column(
// mainAxisAlignment: MainAxisAlignment.start,
// children: [
// SizedBox(
// child: GridView.builder(
// shrinkWrap: true,
// physics: NeverScrollableScrollPhysics(),
// itemCount: 8,
// gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
// crossAxisCount: 8, childAspectRatio: 1 / 1),
// itemBuilder: (BuildContext context, int index) {
// return Container(
// color: index == this.currentWeekIndex
// ? Color(0xf7f7f7)
// : Colors.white,
// child: Center(
// child: index == 0
// ? Column(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Text("星期",
// style: TextStyle(
// fontSize: 14, color: Colors.black87)),
// SpaceWidget(height: 5),
// Text("日期", style: TextStyle(fontSize: 12)),
// ],
// )
// : Column(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Text(weekList[index - 1],
// style: TextStyle(
// fontSize: 14,
// color: index == currentWeekIndex
// ? Colors.lightBlue
// : Colors.black87)),
// SpaceWidget(height: 5),
// Text(dateList[index - 1],
// style: TextStyle(
// fontSize: 12,
// color: index == currentWeekIndex
// ? Colors.lightBlue
// : Colors.black87)),
// ],
// ),
// ),
// );
// }),
// ),
// Expanded(
// child: SingleChildScrollView(
// child: Row(
// children: [
// Expanded(
// flex: 1,
// child: GridView.builder(
// shrinkWrap: true,
// // physics:ClampingScrollPhysics(),
// itemCount: 10,
// gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
// crossAxisCount: 1, childAspectRatio: 1 / 2),
// itemBuilder: (BuildContext context, int index) {
// return Container(
// // width: 25,
// // height:s 80,
// child: Center(
// child: Text(
// (index + 1).toInt().toString(),
// style: TextStyle(fontSize: 15),
// ),
// ),
// decoration: BoxDecoration(
// color: Color(0xff5ff5),
// // border: Border.all(color: Colors.black12, width: 0.5),
// border: Border(
// bottom: BorderSide(
// color: Colors.black12, width: 0.5),
// right: BorderSide(
// color: Colors.black12, width: 0.5),
// ),
// ));
// }),
// ),
// Expanded(
// flex: 7,
// child: GridView.builder(
// shrinkWrap: true,
// physics: NeverScrollableScrollPhysics(),
// itemCount: 35,
// gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
// crossAxisCount: 7, childAspectRatio: 1 / 4),
// itemBuilder: (BuildContext context, int index) {
// return Container(
// child: Stack(
// children: [
// Column(
// mainAxisAlignment:
// MainAxisAlignment.spaceBetween,
// children: [
// Flexible(
// flex: 1,
// child: Container(
// width: double.infinity,
// height: double.infinity,
// decoration: BoxDecoration(
// color: Colors.white,
// // border: Border.all(color: Colors.black12, width: 0.5),
// border: Border(
// bottom: BorderSide(
// color: Colors.black12,
// width: 0.5),
// right: BorderSide(
// color: Colors.black12,
// width: 0.5),
// ),
// )),
// ),
// Flexible(
// flex: 1,
// child: Container(
// width: double.infinity,
// height: double.infinity,
// decoration: BoxDecoration(
// color: Colors.white,
// // border: Border.all(color: Colors.black12, width: 0.5),
// border: Border(
// bottom: BorderSide(
// color: Colors.black12,
// width: 0.5),
// right: BorderSide(
// color: Colors.black12,
// width: 0.5),
// ),
// )),
// ),
// ],
// ),
// if (index % 5 == 0 || index % 5 == 1)
// Container(
// margin: EdgeInsets.all(0.5),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(2),
// color: colorList[index % 7],
// ),
// child: Center(
// child: Text(
// infoList[index % 2],
// textAlign: TextAlign.center,
// style: TextStyle(
// color: Colors.white,
// fontSize: 11,
// letterSpacing: 1),
// ),
// ),
// )
// ],
// ),
// );
// }),
// )
// ],
// ),
// ),
// ),
// _bottomView
// ],
// ),
// );
// }
// @override
// String pageTitle() => "我的课表";
// Widget _topView = SizedBox(
// height: 30,
// child: Expanded(
// child: ListView.builder(
// scrollDirection: Axis.horizontal,
// itemCount: 7,
// itemBuilder: (BuildContext context, int index) {
// return Text("dd");
// }),
// ),
// );
// Widget _centerView = Expanded(
// child: GridView.builder(
// itemCount: 63,
// gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
// crossAxisCount: 7,
// ),
// itemBuilder: (BuildContext context, int index) {
// return Container(
// // width: 25,
// // height: 80,
// child: Center(
// child: Text(
// (index + 1).toString(),
// style: TextStyle(fontSize: 15),
// ),
// ),
// decoration: BoxDecoration(
// color: Color(0xff5ff5),
// border: Border.all(color: Colors.black12, width: 0.5),
// ));
// }),
// );
// Widget _bottomView = SizedBox(
// height: 30,
// child: Row(
// children: [
// //view
// ],
// ),
// );
// }
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class SpaceWidget extends StatelessWidget {
final double width;
final double height;
SpaceWidget({this.width = 0.0, this.height = 0.0});
@override
Widget build(BuildContext context) {
return SizedBox(
width: width,
height: height,
);
}
}
class SyllabusPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => PageState();
}
class PageState extends State<SyllabusPage> {
var colorList = [
Colors.red,
Colors.lightBlueAccent,
Colors.grey,
Colors.cyan,
Colors.amber,
Colors.deepPurpleAccent,
Colors.purpleAccent
];
var infoList = ["高等数学-周某某教授@综合楼201", "大学英语-王某某讲师@行政楼501"];
var weekList = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'];
var dateList = [];
var currentWeekIndex = 0;
@override
void initState() {
super.initState();
var monday = 1;
var mondayTime = DateTime.now();
//
while (mondayTime.weekday != monday) {
mondayTime = mondayTime.subtract(new Duration(days: 1));
}
mondayTime.year; //2020
mondayTime.month; //6(jsjs0dart1)
mondayTime.day; //6
// nowTime.hour ;//6
// nowTime.minute ;//6
// nowTime.second ;//6
for (int i = 0; i < 7; i++) {
dateList.add(
mondayTime.month.toString() + "/" + (mondayTime.day + i).toString());
if ((mondayTime.day + i) == DateTime.now().day) {
setState(() {
currentWeekIndex = i + 1;
});
}
}
// print('Recent monday '+DateTime.now().day.toString());
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(
child: GridView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemCount: 8,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 8, childAspectRatio: 1 / 1),
itemBuilder: (BuildContext context, int index) {
return Container(
color: index == this.currentWeekIndex
? Color(0xf7f7f7)
: Colors.white,
child: Center(
child: index == 0
? Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("星期",
style: TextStyle(
fontSize: 14, color: Colors.black87)),
SpaceWidget(height: 5),
Text("日期", style: TextStyle(fontSize: 12)),
],
)
: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(weekList[index - 1],
style: TextStyle(
fontSize: 14,
color: index == currentWeekIndex
? Colors.lightBlue
: Colors.black87)),
SpaceWidget(height: 5),
Text(dateList[index - 1],
style: TextStyle(
fontSize: 12,
color: index == currentWeekIndex
? Colors.lightBlue
: Colors.black87)),
],
),
),
);
}),
),
Expanded(
child: SingleChildScrollView(
child: Row(
children: [
Expanded(
flex: 1,
child: GridView.builder(
shrinkWrap: true,
// physics:ClampingScrollPhysics(),
itemCount: 10,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 1, childAspectRatio: 1 / 2),
itemBuilder: (BuildContext context, int index) {
return Container(
// width: 25,
// height:s 80,
child: Center(
child: Text(
(index + 1).toInt().toString(),
style: TextStyle(fontSize: 15),
),
),
decoration: BoxDecoration(
color: Color(0xff5ff5),
// border: Border.all(color: Colors.black12, width: 0.5),
border: Border(
bottom: BorderSide(
color: Colors.black12, width: 0.5),
right: BorderSide(
color: Colors.black12, width: 0.5),
),
));
}),
),
Expanded(
flex: 7,
child: GridView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemCount: 35,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 7, childAspectRatio: 1 / 4),
itemBuilder: (BuildContext context, int index) {
return GestureDetector(
// onTap: () {
// //
// print('点击了课程');
// },
// onTap: () {
// // EditCoursePage
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => EditCoursePage(
// onSave: (String) {},
// )),
// );
// },
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => EditCoursePage(
onSave: (courseInfo) {
//
setState(() {
//
infoList[index % 2] = courseInfo;
});
},
),
),
);
},
child: Container(
child: Stack(
children: [
Column(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Flexible(
flex: 1,
child: Container(
width: double.infinity,
height: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
border: Border(
bottom: BorderSide(
color: Colors.black12,
width: 0.5),
right: BorderSide(
color: Colors.black12,
width: 0.5),
),
)),
),
Flexible(
flex: 1,
child: Container(
width: double.infinity,
height: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
border: Border(
bottom: BorderSide(
color: Colors.black12,
width: 0.5),
right: BorderSide(
color: Colors.black12,
width: 0.5),
),
)),
),
],
),
if (index % 5 == 0 || index % 5 == 1)
Container(
margin: EdgeInsets.all(0.5),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(2),
color: colorList[index % 7],
),
child: Center(
child: Text(
infoList[index % 2],
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white,
fontSize: 11,
letterSpacing: 1),
),
),
)
],
),
),
);
}),
)
],
),
),
),
_bottomView
],
),
);
}
@override
String pageTitle() => "我的课表";
Widget _topView = SizedBox(
height: 30,
child: Expanded(
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: 7,
itemBuilder: (BuildContext context, int index) {
return Text("dd");
}),
),
);
Widget _centerView = Expanded(
child: GridView.builder(
itemCount: 63,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 7,
),
itemBuilder: (BuildContext context, int index) {
return Container(
// width: 25,
// height: 80,
child: Center(
child: Text(
(index + 1).toString(),
style: TextStyle(fontSize: 15),
),
),
decoration: BoxDecoration(
color: Color(0xff5ff5),
border: Border.all(color: Colors.black12, width: 0.5),
));
}),
);
Widget _bottomView = SizedBox(
height: 30,
child: Row(
children: [
//view
],
),
);
}
// class EditCoursePage extends StatelessWidget {
// @override
// Widget build(BuildContext context) {
// return Scaffold(
// appBar: AppBar(
// title: Text('编辑课程'),
// ),
// body: Center(
// child: Text('在这里编辑课程信息'),
// ),
// );
// }
// }
class EditCoursePage extends StatefulWidget {
final Function(String) onSave;
EditCoursePage({required this.onSave});
@override
_EditCoursePageState createState() => _EditCoursePageState();
}
class _EditCoursePageState extends State<EditCoursePage> {
final _formKey = GlobalKey<FormState>();
final _courseController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('编辑课程'),
),
body: Form(
key: _formKey,
child: Column(
children: <Widget>[
TextFormField(
controller: _courseController,
decoration: InputDecoration(labelText: '课程信息'),
validator: (value) {
if (value == null || value.isEmpty) {
return '请输入课程信息';
}
return null;
},
),
ElevatedButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
widget.onSave(_courseController.text);
Navigator.pop(context);
}
},
child: Text('保存'),
),
],
),
),
);
}
}

@ -1,105 +0,0 @@
import 'package:flutter/material.dart';
import 'package:timemanage/screen/projects_screen.dart';
import 'package:timemanage/screen/reports_screen.dart';
import 'package:timemanage/screen/export_screen.dart';
import 'package:timemanage/screen/settings_screen.dart';
import 'package:timemanage/screen/about_screen.dart';
import 'package:timemanage/screen/course_screen.dart';
class TopBar extends StatefulWidget implements PreferredSizeWidget {
const TopBar({Key? key}) : super(key: key);
@override
State<TopBar> createState() => _TopBarState();
@override
Size get preferredSize => const Size.fromHeight(kToolbarHeight);
}
class _TopBarState extends State<TopBar> {
@override
Widget build(BuildContext context) => AppBar(
backgroundColor: Colors.blueAccent, //
//
leading: MenuBar(
children: <Widget>[
SubmenuButton(
menuChildren: <Widget>[
MenuItemButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SpaceWidget()),
);
},
child: const Text('课程表'),
),
MenuItemButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ProjectsScreen()),
);
},
child: const Text('项目'),
),
MenuItemButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ReportsScreen()),
);
},
child: const Text('统计报告'),
),
MenuItemButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ExportScreen()),
);
},
child: const Text('导入和导出'),
),
MenuItemButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const SettingsScreen()),
);
},
child: const Text('设置'),
),
MenuItemButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const AboutScreen()),
);
},
child: const Text('关于'),
),
],
child: const Icon(Icons.menu),
),
],
),
//
title: const Text('时间管理'),
actions: [
//
IconButton(
icon: const Icon(Icons.search),
onPressed: () {},
),
//
IconButton(
icon: const Icon(Icons.filter_alt),
onPressed: () {},
)
],
);
}

@ -1,244 +0,0 @@
import 'package:flutter/material.dart';
import 'package:timemanage/screen/projects_screen.dart';
import 'package:timemanage/screen/reports_screen.dart';
import 'package:timemanage/screen/export_screen.dart';
import 'package:timemanage/screen/settings_screen.dart';
import 'package:timemanage/screen/about_screen.dart';
import 'package:timemanage/screen/course_screen.dart';
class DashBoardScreen extends StatefulWidget {
const DashBoardScreen({Key? key}) : super(key: key);
@override
_DashBoardScreenState createState() => _DashBoardScreenState();
}
class _DashBoardScreenState extends State<DashBoardScreen> {
List<TimerModel> timers = [];
void _addTimer() {
final controller = TextEditingController();
showDialog<String>(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('新计时器'),
content: TextField(
controller: controller,
decoration: const InputDecoration(hintText: '计时器名称'),
),
actions: <Widget>[
TextButton(
onPressed: () => Navigator.pop(context, 'Cancel'),
child: const Text('取消'),
),
TextButton(
onPressed: () {
final name = controller.text;
if (name.isNotEmpty) {
setState(() {
timers.add(TimerModel(name: name));
});
}
Navigator.pop(context, 'OK');
},
child: const Text('OK'),
),
],
);
},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.blueAccent, //
//
leading: MenuBar(
children: <Widget>[
SubmenuButton(
menuChildren: <Widget>[
MenuItemButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SyllabusPage()),
);
},
child: const Text('课程表'),
),
MenuItemButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ProjectsScreen()),
);
},
child: const Text('项目'),
),
MenuItemButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ReportsScreen()),
);
},
child: const Text('统计报告'),
),
MenuItemButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ExportScreen()),
);
},
child: const Text('导入和导出'),
),
MenuItemButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const SettingsScreen()),
);
},
child: const Text('设置'),
),
MenuItemButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const AboutScreen()),
);
},
child: const Text('关于'),
),
],
child: const Icon(Icons.menu),
),
],
),
//
title: const Text('时间管理'),
actions: [
//
IconButton(
icon: const Icon(Icons.search),
onPressed: () {},
),
//
IconButton(
icon: const Icon(Icons.add),
onPressed: _addTimer,
),
IconButton(
icon: const Icon(Icons.filter_alt),
onPressed: () {},
)
],
),
body: ListView.builder(
itemCount: timers.length,
itemBuilder: (context, index) {
return Column(
children: [
ListTile(
leading: CircleAvatar(
child: Text((index + 1).toString()),
),
title: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
timers[index].name,
style: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
StreamBuilder<int>(
stream: Stream.periodic(const Duration(milliseconds: 100),
(_) => timers[index].stopwatch.elapsed.inSeconds),
builder: (context, snapshot) {
final seconds = snapshot.data ?? 0;
final hours = seconds ~/ 3600;
final minutes = (seconds % 3600) ~/ 60;
final remainingSeconds = seconds % 60;
return Text(
'${hours.toString().padLeft(2, '0')}:${minutes.toString().padLeft(2, '0')}:${remainingSeconds.toString().padLeft(2, '0')}',
style: const TextStyle(
fontSize: 24,
fontWeight: FontWeight.bold,
),
);
},
),
],
),
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
IconButton(
icon: timers[index].isActive
? const Icon(Icons.pause)
: const Icon(Icons.play_arrow),
onPressed: () {
setState(() {
if (timers[index].isActive) {
timers[index].stop();
} else {
timers[index].start();
}
});
},
),
IconButton(
icon: const Icon(Icons.delete),
onPressed: () {
setState(() {
timers[index].stopwatch.stop(); //
timers.removeAt(index);
});
},
),
],
),
),
const SizedBox(height: 10), //
],
);
},
),
);
}
}
class TimerModel {
String name;
Stopwatch stopwatch;
bool isActive;
TimerModel({required this.name})
: stopwatch = Stopwatch(),
isActive = false;
void start() {
stopwatch.start();
isActive = true;
}
void stop() {
stopwatch.stop();
isActive = false;
}
void reset() {
stopwatch.reset();
}
}

@ -1,16 +0,0 @@
import 'package:flutter/material.dart';
class ProjectsScreen extends StatelessWidget {
const ProjectsScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('项目'),
),
body: const Center(
child: Text('项目界面'),
),
);
}
}

@ -1,16 +0,0 @@
import 'package:flutter/material.dart';
class ReportsScreen extends StatelessWidget {
const ReportsScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('统计报告'),
),
body: const Center(
child: Text('统计报告界面'),
),
);
}
}

1
linux/.gitignore vendored

@ -1 +0,0 @@
flutter/ephemeral

@ -1,139 +0,0 @@
# Project-level configuration.
cmake_minimum_required(VERSION 3.10)
project(runner LANGUAGES CXX)
# The name of the executable created for the application. Change this to change
# the on-disk name of your application.
set(BINARY_NAME "timemanage")
# The unique GTK application identifier for this application. See:
# https://wiki.gnome.org/HowDoI/ChooseApplicationID
set(APPLICATION_ID "com.example.timemanage")
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
# versions of CMake.
cmake_policy(SET CMP0063 NEW)
# Load bundled libraries from the lib/ directory relative to the binary.
set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
# Root filesystem for cross-building.
if(FLUTTER_TARGET_PLATFORM_SYSROOT)
set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT})
set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
endif()
# Define build configuration options.
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE "Debug" CACHE
STRING "Flutter build mode" FORCE)
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
"Debug" "Profile" "Release")
endif()
# Compilation settings that should be applied to most targets.
#
# Be cautious about adding new options here, as plugins use this function by
# default. In most cases, you should add new options to specific targets instead
# of modifying this function.
function(APPLY_STANDARD_SETTINGS TARGET)
target_compile_features(${TARGET} PUBLIC cxx_std_14)
target_compile_options(${TARGET} PRIVATE -Wall -Werror)
target_compile_options(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:-O3>")
target_compile_definitions(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:NDEBUG>")
endfunction()
# Flutter library and tool build rules.
set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
add_subdirectory(${FLUTTER_MANAGED_DIR})
# System-level dependencies.
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}")
# Define the application target. To change its name, change BINARY_NAME above,
# not the value here, or `flutter run` will no longer work.
#
# Any new source files that you add to the application should be added here.
add_executable(${BINARY_NAME}
"main.cc"
"my_application.cc"
"${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
)
# Apply the standard set of build settings. This can be removed for applications
# that need different build settings.
apply_standard_settings(${BINARY_NAME})
# Add dependency libraries. Add any application-specific dependencies here.
target_link_libraries(${BINARY_NAME} PRIVATE flutter)
target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK)
# Run the Flutter tool portions of the build. This must not be removed.
add_dependencies(${BINARY_NAME} flutter_assemble)
# Only the install-generated bundle's copy of the executable will launch
# correctly, since the resources must in the right relative locations. To avoid
# people trying to run the unbundled copy, put it in a subdirectory instead of
# the default top-level location.
set_target_properties(${BINARY_NAME}
PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run"
)
# Generated plugin build rules, which manage building the plugins and adding
# them to the application.
include(flutter/generated_plugins.cmake)
# === Installation ===
# By default, "installing" just makes a relocatable bundle in the build
# directory.
set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle")
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
endif()
# Start with a clean build bundle directory every time.
install(CODE "
file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\")
" COMPONENT Runtime)
set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib")
install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
COMPONENT Runtime)
install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
COMPONENT Runtime)
install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
COMPONENT Runtime)
foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES})
install(FILES "${bundled_library}"
DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
COMPONENT Runtime)
endforeach(bundled_library)
# Fully re-copy the assets directory on each build to avoid having stale files
# from a previous install.
set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
install(CODE "
file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
" COMPONENT Runtime)
install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
# Install the AOT library on non-Debug builds only.
if(NOT CMAKE_BUILD_TYPE MATCHES "Debug")
install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
COMPONENT Runtime)
endif()

@ -1,88 +0,0 @@
# This file controls Flutter-level build steps. It should not be edited.
cmake_minimum_required(VERSION 3.10)
set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
# Configuration provided via flutter tool.
include(${EPHEMERAL_DIR}/generated_config.cmake)
# TODO: Move the rest of this into files in ephemeral. See
# https://github.com/flutter/flutter/issues/57146.
# Serves the same purpose as list(TRANSFORM ... PREPEND ...),
# which isn't available in 3.10.
function(list_prepend LIST_NAME PREFIX)
set(NEW_LIST "")
foreach(element ${${LIST_NAME}})
list(APPEND NEW_LIST "${PREFIX}${element}")
endforeach(element)
set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE)
endfunction()
# === Flutter Library ===
# System-level dependencies.
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0)
pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0)
set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so")
# Published to parent scope for install step.
set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)
set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE)
set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE)
set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE)
list(APPEND FLUTTER_LIBRARY_HEADERS
"fl_basic_message_channel.h"
"fl_binary_codec.h"
"fl_binary_messenger.h"
"fl_dart_project.h"
"fl_engine.h"
"fl_json_message_codec.h"
"fl_json_method_codec.h"
"fl_message_codec.h"
"fl_method_call.h"
"fl_method_channel.h"
"fl_method_codec.h"
"fl_method_response.h"
"fl_plugin_registrar.h"
"fl_plugin_registry.h"
"fl_standard_message_codec.h"
"fl_standard_method_codec.h"
"fl_string_codec.h"
"fl_value.h"
"fl_view.h"
"flutter_linux.h"
)
list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/")
add_library(flutter INTERFACE)
target_include_directories(flutter INTERFACE
"${EPHEMERAL_DIR}"
)
target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}")
target_link_libraries(flutter INTERFACE
PkgConfig::GTK
PkgConfig::GLIB
PkgConfig::GIO
)
add_dependencies(flutter flutter_assemble)
# === Flutter tool backend ===
# _phony_ is a non-existent file to force this command to run every time,
# since currently there's no way to get a full input/output list from the
# flutter tool.
add_custom_command(
OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
${CMAKE_CURRENT_BINARY_DIR}/_phony_
COMMAND ${CMAKE_COMMAND} -E env
${FLUTTER_TOOL_ENVIRONMENT}
"${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh"
${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE}
VERBATIM
)
add_custom_target(flutter_assemble DEPENDS
"${FLUTTER_LIBRARY}"
${FLUTTER_LIBRARY_HEADERS}
)

@ -1,15 +0,0 @@
//
// Generated file. Do not edit.
//
// clang-format off
#include "generated_plugin_registrant.h"
#include <url_launcher_linux/url_launcher_plugin.h>
void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
}

@ -1,15 +0,0 @@
//
// Generated file. Do not edit.
//
// clang-format off
#ifndef GENERATED_PLUGIN_REGISTRANT_
#define GENERATED_PLUGIN_REGISTRANT_
#include <flutter_linux/flutter_linux.h>
// Registers Flutter plugins.
void fl_register_plugins(FlPluginRegistry* registry);
#endif // GENERATED_PLUGIN_REGISTRANT_

@ -1,24 +0,0 @@
#
# Generated file, do not edit.
#
list(APPEND FLUTTER_PLUGIN_LIST
url_launcher_linux
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST
)
set(PLUGIN_BUNDLED_LIBRARIES)
foreach(plugin ${FLUTTER_PLUGIN_LIST})
add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin})
target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin)
list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${plugin}_plugin>)
list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
endforeach(plugin)
foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})
add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin})
list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})
endforeach(ffi_plugin)

@ -1,6 +0,0 @@
#include "my_application.h"
int main(int argc, char** argv) {
g_autoptr(MyApplication) app = my_application_new();
return g_application_run(G_APPLICATION(app), argc, argv);
}

@ -1,104 +0,0 @@
#include "my_application.h"
#include <flutter_linux/flutter_linux.h>
#ifdef GDK_WINDOWING_X11
#include <gdk/gdkx.h>
#endif
#include "flutter/generated_plugin_registrant.h"
struct _MyApplication {
GtkApplication parent_instance;
char** dart_entrypoint_arguments;
};
G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION)
// Implements GApplication::activate.
static void my_application_activate(GApplication* application) {
MyApplication* self = MY_APPLICATION(application);
GtkWindow* window =
GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application)));
// Use a header bar when running in GNOME as this is the common style used
// by applications and is the setup most users will be using (e.g. Ubuntu
// desktop).
// If running on X and not using GNOME then just use a traditional title bar
// in case the window manager does more exotic layout, e.g. tiling.
// If running on Wayland assume the header bar will work (may need changing
// if future cases occur).
gboolean use_header_bar = TRUE;
#ifdef GDK_WINDOWING_X11
GdkScreen* screen = gtk_window_get_screen(window);
if (GDK_IS_X11_SCREEN(screen)) {
const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen);
if (g_strcmp0(wm_name, "GNOME Shell") != 0) {
use_header_bar = FALSE;
}
}
#endif
if (use_header_bar) {
GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
gtk_widget_show(GTK_WIDGET(header_bar));
gtk_header_bar_set_title(header_bar, "timemanage");
gtk_header_bar_set_show_close_button(header_bar, TRUE);
gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
} else {
gtk_window_set_title(window, "timemanage");
}
gtk_window_set_default_size(window, 1280, 720);
gtk_widget_show(GTK_WIDGET(window));
g_autoptr(FlDartProject) project = fl_dart_project_new();
fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments);
FlView* view = fl_view_new(project);
gtk_widget_show(GTK_WIDGET(view));
gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view));
fl_register_plugins(FL_PLUGIN_REGISTRY(view));
gtk_widget_grab_focus(GTK_WIDGET(view));
}
// Implements GApplication::local_command_line.
static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) {
MyApplication* self = MY_APPLICATION(application);
// Strip out the first argument as it is the binary name.
self->dart_entrypoint_arguments = g_strdupv(*arguments + 1);
g_autoptr(GError) error = nullptr;
if (!g_application_register(application, nullptr, &error)) {
g_warning("Failed to register: %s", error->message);
*exit_status = 1;
return TRUE;
}
g_application_activate(application);
*exit_status = 0;
return TRUE;
}
// Implements GObject::dispose.
static void my_application_dispose(GObject* object) {
MyApplication* self = MY_APPLICATION(object);
g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev);
G_OBJECT_CLASS(my_application_parent_class)->dispose(object);
}
static void my_application_class_init(MyApplicationClass* klass) {
G_APPLICATION_CLASS(klass)->activate = my_application_activate;
G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line;
G_OBJECT_CLASS(klass)->dispose = my_application_dispose;
}
static void my_application_init(MyApplication* self) {}
MyApplication* my_application_new() {
return MY_APPLICATION(g_object_new(my_application_get_type(),
"application-id", APPLICATION_ID,
"flags", G_APPLICATION_NON_UNIQUE,
nullptr));
}

@ -1,18 +0,0 @@
#ifndef FLUTTER_MY_APPLICATION_H_
#define FLUTTER_MY_APPLICATION_H_
#include <gtk/gtk.h>
G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION,
GtkApplication)
/**
* my_application_new:
*
* Creates a new Flutter-based application.
*
* Returns: a new #MyApplication.
*/
MyApplication* my_application_new();
#endif // FLUTTER_MY_APPLICATION_H_

7
macos/.gitignore vendored

@ -1,7 +0,0 @@
# Flutter-related
**/Flutter/ephemeral/
**/Pods/
# Xcode-related
**/dgph
**/xcuserdata/

@ -1 +0,0 @@
#include "ephemeral/Flutter-Generated.xcconfig"

@ -1 +0,0 @@
#include "ephemeral/Flutter-Generated.xcconfig"

@ -1,18 +0,0 @@
//
// Generated file. Do not edit.
//
import FlutterMacOS
import Foundation
import package_info_plus
import shared_preferences_foundation
import sqflite
import url_launcher_macos
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save