模型层 #3

Merged
ps9up4ig6 merged 2 commits from gxh_branch into dev 2 years ago

@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
import 'package:timemanage/screens/dashboard_screen.dart';
import 'package:timemanage/screen/dashboard_screen.dart';
void main() => runApp(const MyApp());

@ -0,0 +1,7 @@
// DateTime
extension CloneTime on DateTime {
DateTime clone() {
return DateTime(
year, month, day, hour, minute, second, millisecond, microsecond);
}
}

@ -0,0 +1,29 @@
import 'package:flutter/material.dart'; // Color使
import 'package:equatable/equatable.dart'; //
class Project extends Equatable {
final int id;
final String name;
final bool archived; //
//
const Project({
required this.id,
required this.name,
required this.archived,
});
@override
List<Object> get props => [id, name, archived]; //
Project.clone(
Project project, {
String? name,
Color? color,
bool? archived,
}) : this(
id: project.id,
name: name ?? project.name,
archived: archived ?? project.archived,
);
}

@ -0,0 +1,12 @@
import 'package:equatable/equatable.dart';
//
class ProjectDescriptionPair extends Equatable {
final int? project;
final String? description;
const ProjectDescriptionPair(this.project, this.description);
@override
List<Object?> get props => [project, description];
}

@ -0,0 +1,8 @@
//
extension StartOfWeek on DateTime {
DateTime startOfWeek({int startOfWeekDay = DateTime.sunday}) {
int diff = (7 + (weekday - startOfWeekDay)) % 7;
DateTime dt = add(Duration(days: -diff));
return DateTime(dt.year, dt.month, dt.day);
}
}

@ -0,0 +1 @@
// TODO:

@ -0,0 +1,58 @@
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);
}
}

@ -68,7 +68,6 @@ class AboutScreen extends StatelessWidget {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text("请横屏查看"),
// FIXME: 3
duration: Duration(seconds: 3)),
);
launchUrl(Uri.parse(

@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:timemanage/screens/projects_screen.dart';
import 'package:timemanage/screens/reports_screen.dart';
import 'package:timemanage/screens/export_screen.dart';
import 'package:timemanage/screens/settings_screen.dart';
import 'package:timemanage/screens/about_screen.dart';
import 'package:timemanage/screens/course_screen.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 StatelessWidget {
const DashBoardScreen({super.key});
@ -100,7 +100,14 @@ class DashBoardScreen extends StatelessWidget {
],
),
body: const Center(
child: Text('主界面'),
child: Column(
children: [
Text('项目列表区'),
Expanded(
child: Text('计时器区'),
),
],
),
),
);
}

@ -89,6 +89,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.6"
equatable:
dependency: "direct main"
description:
name: equatable
sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2
url: "https://pub.dev"
source: hosted
version: "2.0.5"
fake_async:
dependency: transitive
description:

@ -36,7 +36,7 @@ dependencies:
about: ^2.1.3
font_awesome_flutter: ^9.2.0
url_launcher: ^6.1.14
equatable: ^2.0.3 # 用于对象比较
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.

Loading…
Cancel
Save