From e13d11a248c8ce8afdcb7952edd9a87d2c67797a Mon Sep 17 00:00:00 2001 From: machuanyu <840649825@qq.com> Date: Wed, 3 Apr 2024 10:05:02 +0800 Subject: [PATCH 1/4] -- --- lib/common/request/rest_dio.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/common/request/rest_dio.dart b/lib/common/request/rest_dio.dart index aef5502..65fecab 100644 --- a/lib/common/request/rest_dio.dart +++ b/lib/common/request/rest_dio.dart @@ -29,7 +29,6 @@ class RequestTool { return RetrofitClient(dio, baseUrl: RequestConfig().baseUrl); } - final RetrofitClient _client; static RequestTool? _instance; From 95ae5220a67ae41ff94500bdab85f42840273ff2 Mon Sep 17 00:00:00 2001 From: machuanyu <840649825@qq.com> Date: Wed, 3 Apr 2024 10:05:29 +0800 Subject: [PATCH 2/4] -- --- lib/common/request/rest_dio.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/common/request/rest_dio.dart b/lib/common/request/rest_dio.dart index 65fecab..c27eef4 100644 --- a/lib/common/request/rest_dio.dart +++ b/lib/common/request/rest_dio.dart @@ -31,7 +31,6 @@ class RequestTool { } final RetrofitClient _client; static RequestTool? _instance; - RequestTool._internal(this._client); static get instance { From f228864bf6efba038fb6179faa3eac469be45a57 Mon Sep 17 00:00:00 2001 From: machuanyu <840649825@qq.com> Date: Wed, 3 Apr 2024 10:08:09 +0800 Subject: [PATCH 3/4] -- --- lib/common/request/rest_dio.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/common/request/rest_dio.dart b/lib/common/request/rest_dio.dart index c27eef4..65fecab 100644 --- a/lib/common/request/rest_dio.dart +++ b/lib/common/request/rest_dio.dart @@ -31,6 +31,7 @@ class RequestTool { } final RetrofitClient _client; static RequestTool? _instance; + RequestTool._internal(this._client); static get instance { From f9ef3ec77663de2f93db06bb59c2fec1a72a813d Mon Sep 17 00:00:00 2001 From: machuanyu <840649825@qq.com> Date: Mon, 8 Apr 2024 15:21:26 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/icons/demo.css | 539 ++++++ assets/icons/demo_index.html | 1499 +++++++++++++++++ assets/icons/iconfont.css | 243 +++ assets/icons/iconfont.js | 1 + assets/icons/iconfont.json | 408 +++++ assets/icons/iconfont.ttf | Bin 0 -> 13996 bytes assets/icons/iconfont.woff | Bin 0 -> 8600 bytes assets/icons/iconfont.woff2 | Bin 0 -> 7304 bytes assets/images/not_data_bgm2.png | Bin 0 -> 47801 bytes lib/common/api/retrofit_client.dart | 4 + lib/common/job/enum_subject.dart | 23 + lib/common/job/work_student.dart | 10 +- lib/common/store/user_store.dart | 12 +- lib/common/utils/utils.dart | 22 + lib/main.dart | 1 + lib/page/global_widget/MyEmptyWidget.dart | 60 + lib/page/home_page/home_logic.dart | 111 +- lib/page/home_page/home_state.dart | 5 +- lib/page/home_page/home_view.dart | 264 ++- lib/page/home_page/widget/task_list_item.dart | 301 ++++ lib/page/login_page/login_logic.dart | 3 +- pubspec.lock | 8 + pubspec.yaml | 7 +- 23 files changed, 3489 insertions(+), 32 deletions(-) create mode 100644 assets/icons/demo.css create mode 100644 assets/icons/demo_index.html create mode 100644 assets/icons/iconfont.css create mode 100644 assets/icons/iconfont.js create mode 100644 assets/icons/iconfont.json create mode 100644 assets/icons/iconfont.ttf create mode 100644 assets/icons/iconfont.woff create mode 100644 assets/icons/iconfont.woff2 create mode 100644 assets/images/not_data_bgm2.png create mode 100644 lib/common/job/enum_subject.dart create mode 100644 lib/page/global_widget/MyEmptyWidget.dart create mode 100644 lib/page/home_page/widget/task_list_item.dart diff --git a/assets/icons/demo.css b/assets/icons/demo.css new file mode 100644 index 0000000..a67054a --- /dev/null +++ b/assets/icons/demo.css @@ -0,0 +1,539 @@ +/* Logo 字体 */ +@font-face { + font-family: "iconfont logo"; + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); +} + +.logo { + font-family: "iconfont logo"; + font-size: 160px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* tabs */ +.nav-tabs { + position: relative; +} + +.nav-tabs .nav-more { + position: absolute; + right: 0; + bottom: 0; + height: 42px; + line-height: 42px; + color: #666; +} + +#tabs { + border-bottom: 1px solid #eee; +} + +#tabs li { + cursor: pointer; + width: 100px; + height: 40px; + line-height: 40px; + text-align: center; + font-size: 16px; + border-bottom: 2px solid transparent; + position: relative; + z-index: 1; + margin-bottom: -1px; + color: #666; +} + + +#tabs .active { + border-bottom-color: #f00; + color: #222; +} + +.tab-container .content { + display: none; +} + +/* 页面布局 */ +.main { + padding: 30px 100px; + width: 960px; + margin: 0 auto; +} + +.main .logo { + color: #333; + text-align: left; + margin-bottom: 30px; + line-height: 1; + height: 110px; + margin-top: -50px; + overflow: hidden; + *zoom: 1; +} + +.main .logo a { + font-size: 160px; + color: #333; +} + +.helps { + margin-top: 40px; +} + +.helps pre { + padding: 20px; + margin: 10px 0; + border: solid 1px #e7e1cd; + background-color: #fffdef; + overflow: auto; +} + +.icon_lists { + width: 100% !important; + overflow: hidden; + *zoom: 1; +} + +.icon_lists li { + width: 100px; + margin-bottom: 10px; + margin-right: 20px; + text-align: center; + list-style: none !important; + cursor: default; +} + +.icon_lists li .code-name { + line-height: 1.2; +} + +.icon_lists .icon { + display: block; + height: 100px; + line-height: 100px; + font-size: 42px; + margin: 10px auto; + color: #333; + -webkit-transition: font-size 0.25s linear, width 0.25s linear; + -moz-transition: font-size 0.25s linear, width 0.25s linear; + transition: font-size 0.25s linear, width 0.25s linear; +} + +.icon_lists .icon:hover { + font-size: 100px; +} + +.icon_lists .svg-icon { + /* 通过设置 font-size 来改变图标大小 */ + width: 1em; + /* 图标和文字相邻时,垂直对齐 */ + vertical-align: -0.15em; + /* 通过设置 color 来改变 SVG 的颜色/fill */ + fill: currentColor; + /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 + normalize.css 中也包含这行 */ + overflow: hidden; +} + +.icon_lists li .name, +.icon_lists li .code-name { + color: #666; +} + +/* markdown 样式 */ +.markdown { + color: #666; + font-size: 14px; + line-height: 1.8; +} + +.highlight { + line-height: 1.5; +} + +.markdown img { + vertical-align: middle; + max-width: 100%; +} + +.markdown h1 { + color: #404040; + font-weight: 500; + line-height: 40px; + margin-bottom: 24px; +} + +.markdown h2, +.markdown h3, +.markdown h4, +.markdown h5, +.markdown h6 { + color: #404040; + margin: 1.6em 0 0.6em 0; + font-weight: 500; + clear: both; +} + +.markdown h1 { + font-size: 28px; +} + +.markdown h2 { + font-size: 22px; +} + +.markdown h3 { + font-size: 16px; +} + +.markdown h4 { + font-size: 14px; +} + +.markdown h5 { + font-size: 12px; +} + +.markdown h6 { + font-size: 12px; +} + +.markdown hr { + height: 1px; + border: 0; + background: #e9e9e9; + margin: 16px 0; + clear: both; +} + +.markdown p { + margin: 1em 0; +} + +.markdown>p, +.markdown>blockquote, +.markdown>.highlight, +.markdown>ol, +.markdown>ul { + width: 80%; +} + +.markdown ul>li { + list-style: circle; +} + +.markdown>ul li, +.markdown blockquote ul>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown>ul li p, +.markdown>ol li p { + margin: 0.6em 0; +} + +.markdown ol>li { + list-style: decimal; +} + +.markdown>ol li, +.markdown blockquote ol>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown code { + margin: 0 3px; + padding: 0 5px; + background: #eee; + border-radius: 3px; +} + +.markdown strong, +.markdown b { + font-weight: 600; +} + +.markdown>table { + border-collapse: collapse; + border-spacing: 0px; + empty-cells: show; + border: 1px solid #e9e9e9; + width: 95%; + margin-bottom: 24px; +} + +.markdown>table th { + white-space: nowrap; + color: #333; + font-weight: 600; +} + +.markdown>table th, +.markdown>table td { + border: 1px solid #e9e9e9; + padding: 8px 16px; + text-align: left; +} + +.markdown>table th { + background: #F7F7F7; +} + +.markdown blockquote { + font-size: 90%; + color: #999; + border-left: 4px solid #e9e9e9; + padding-left: 0.8em; + margin: 1em 0; +} + +.markdown blockquote p { + margin: 0; +} + +.markdown .anchor { + opacity: 0; + transition: opacity 0.3s ease; + margin-left: 8px; +} + +.markdown .waiting { + color: #ccc; +} + +.markdown h1:hover .anchor, +.markdown h2:hover .anchor, +.markdown h3:hover .anchor, +.markdown h4:hover .anchor, +.markdown h5:hover .anchor, +.markdown h6:hover .anchor { + opacity: 1; + display: inline-block; +} + +.markdown>br, +.markdown>p>br { + clear: both; +} + + +.hljs { + display: block; + background: white; + padding: 0.5em; + color: #333333; + overflow-x: auto; +} + +.hljs-comment, +.hljs-meta { + color: #969896; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} + +.hljs-section, +.hljs-name { + color: #63a35c; +} + +.hljs-tag { + color: #333333; +} + +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} + +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} + +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} + +.hljs-link { + text-decoration: underline; +} + +/* 代码高亮 */ +/* PrismJS 1.15.0 +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre)>code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre)>code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/assets/icons/demo_index.html b/assets/icons/demo_index.html new file mode 100644 index 0000000..d81cd85 --- /dev/null +++ b/assets/icons/demo_index.html @@ -0,0 +1,1499 @@ + + + + + iconfont Demo + + + + + + + + + + + + + +
+

+ + +

+ +
+
+
    + +
  • + +
    Frame
    +
    &#xe63e;
    +
  • + +
  • + +
    Frame
    +
    &#xe63d;
    +
  • + +
  • + +
    Frame-1
    +
    &#xe63a;
    +
  • + +
  • + +
    Frame
    +
    &#xe63b;
    +
  • + +
  • + +
    Frame-2
    +
    &#xe63c;
    +
  • + +
  • + +
    Frame
    +
    &#xe639;
    +
  • + +
  • + +
    Frame
    +
    &#xe635;
    +
  • + +
  • + +
    Frame-1
    +
    &#xe636;
    +
  • + +
  • + +
    Frame-3
    +
    &#xe637;
    +
  • + +
  • + +
    Frame-2
    +
    &#xe638;
    +
  • + +
  • + +
    Frame
    +
    &#xe634;
    +
  • + +
  • + +
    继续阅卷
    +
    &#xe632;
    +
  • + +
  • + +
    Frame
    +
    &#xe631;
    +
  • + +
  • + +
    阅卷记录
    +
    &#xe630;
    +
  • + +
  • + +
    Frame
    +
    &#xe62e;
    +
  • + +
  • + +
    Frame1
    +
    &#xe62f;
    +
  • + +
  • + +
    1
    +
    &#xe629;
    +
  • + +
  • + +
    Frame
    +
    &#xe627;
    +
  • + +
  • + +
    Frame-1
    +
    &#xe628;
    +
  • + +
  • + +
    Frame
    +
    &#xe625;
    +
  • + +
  • + +
    Frame-1
    +
    &#xe626;
    +
  • + +
  • + +
    Frame
    +
    &#xe61b;
    +
  • + +
  • + +
    Frame-1
    +
    &#xe61c;
    +
  • + +
  • + +
    Frame-2
    +
    &#xe61d;
    +
  • + +
  • + +
    Frame-3
    +
    &#xe61e;
    +
  • + +
  • + +
    Frame-4
    +
    &#xe61f;
    +
  • + +
  • + +
    Frame-5
    +
    &#xe620;
    +
  • + +
  • + +
    Frame-6
    +
    &#xe621;
    +
  • + +
  • + +
    Frame-7
    +
    &#xe622;
    +
  • + +
  • + +
    Frame-8
    +
    &#xe623;
    +
  • + +
  • + +
    Frame-9
    +
    &#xe624;
    +
  • + +
  • + +
    equal
    +
    &#xe61a;
    +
  • + +
  • + +
    warning
    +
    &#xe601;
    +
  • + +
  • + +
    error
    +
    &#xe602;
    +
  • + +
  • + +
    Frame-1
    +
    &#xe608;
    +
  • + +
  • + +
    Frame
    +
    &#xe609;
    +
  • + +
  • + +
    Frame-2
    +
    &#xe60a;
    +
  • + +
  • + +
    Frame-3
    +
    &#xe60b;
    +
  • + +
  • + +
    Frame-4
    +
    &#xe60c;
    +
  • + +
  • + +
    Frame-9
    +
    &#xe60d;
    +
  • + +
  • + +
    Frame-8
    +
    &#xe60e;
    +
  • + +
  • + +
    Frame-13
    +
    &#xe60f;
    +
  • + +
  • + +
    Frame-12
    +
    &#xe610;
    +
  • + +
  • + +
    Frame-15
    +
    &#xe611;
    +
  • + +
  • + +
    Frame-17
    +
    &#xe612;
    +
  • + +
  • + +
    Frame-11
    +
    &#xe613;
    +
  • + +
  • + +
    Frame-16
    +
    &#xe614;
    +
  • + +
  • + +
    Frame-7
    +
    &#xe615;
    +
  • + +
  • + +
    Frame-14
    +
    &#xe616;
    +
  • + +
  • + +
    Frame-10
    +
    &#xe617;
    +
  • + +
  • + +
    Frame-5
    +
    &#xe618;
    +
  • + +
  • + +
    Frame-6
    +
    &#xe619;
    +
  • + +
  • + +
    Frame-2
    +
    &#xe603;
    +
  • + +
  • + +
    Frame-3
    +
    &#xe604;
    +
  • + +
  • + +
    Frame-1
    +
    &#xe605;
    +
  • + +
  • + +
    Frame
    +
    &#xe606;
    +
  • + +
  • + +
    Frame-4
    +
    &#xe607;
    +
  • + +
+
+

Unicode 引用

+
+ +

Unicode 是字体在网页端最原始的应用方式,特点是:

+
    +
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • +
  • 默认情况下不支持多色,直接添加多色图标会自动去色。
  • +
+
+

注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)

+
+

Unicode 使用步骤如下:

+

第一步:拷贝项目下面生成的 @font-face

+
@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.woff2?t=1710142362036') format('woff2'),
+       url('iconfont.woff?t=1710142362036') format('woff'),
+       url('iconfont.ttf?t=1710142362036') format('truetype');
+}
+
+

第二步:定义使用 iconfont 的样式

+
.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+

第三步:挑选相应图标并获取字体编码,应用于页面

+
+<span class="iconfont">&#x33;</span>
+
+
+

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    + Frame +
    +
    .icon-Frame14 +
    +
  • + +
  • + +
    + Frame +
    +
    .icon-Frame13 +
    +
  • + +
  • + +
    + Frame-1 +
    +
    .icon-Frame-113 +
    +
  • + +
  • + +
    + Frame +
    +
    .icon-Frame12 +
    +
  • + +
  • + +
    + Frame-2 +
    +
    .icon-Frame-24 +
    +
  • + +
  • + +
    + Frame +
    +
    .icon-Frame10 +
    +
  • + +
  • + +
    + Frame +
    +
    .icon-Frame9 +
    +
  • + +
  • + +
    + Frame-1 +
    +
    .icon-Frame-112 +
    +
  • + +
  • + +
    + Frame-3 +
    +
    .icon-Frame-33 +
    +
  • + +
  • + +
    + Frame-2 +
    +
    .icon-Frame-23 +
    +
  • + +
  • + +
    + Frame +
    +
    .icon-Frame8 +
    +
  • + +
  • + +
    + 继续阅卷 +
    +
    .icon-Frame7 +
    +
  • + +
  • + +
    + Frame +
    +
    .icon-Frame6 +
    +
  • + +
  • + +
    + 阅卷记录 +
    +
    .icon-yuejuanjilu +
    +
  • + +
  • + +
    + Frame +
    +
    .icon-Frame5 +
    +
  • + +
  • + +
    + Frame1 +
    +
    .icon-Frame11 +
    +
  • + +
  • + +
    + 1 +
    +
    .icon-a-1 +
    +
  • + +
  • + +
    + Frame +
    +
    .icon-Frame4 +
    +
  • + +
  • + +
    + Frame-1 +
    +
    .icon-Frame-110 +
    +
  • + +
  • + +
    + Frame +
    +
    .icon-Frame3 +
    +
  • + +
  • + +
    + Frame-1 +
    +
    .icon-Frame-19 +
    +
  • + +
  • + +
    + Frame +
    +
    .icon-Frame2 +
    +
  • + +
  • + +
    + Frame-1 +
    +
    .icon-Frame-18 +
    +
  • + +
  • + +
    + Frame-2 +
    +
    .icon-Frame-22 +
    +
  • + +
  • + +
    + Frame-3 +
    +
    .icon-Frame-32 +
    +
  • + +
  • + +
    + Frame-4 +
    +
    .icon-Frame-42 +
    +
  • + +
  • + +
    + Frame-5 +
    +
    .icon-Frame-51 +
    +
  • + +
  • + +
    + Frame-6 +
    +
    .icon-Frame-61 +
    +
  • + +
  • + +
    + Frame-7 +
    +
    .icon-Frame-71 +
    +
  • + +
  • + +
    + Frame-8 +
    +
    .icon-Frame-81 +
    +
  • + +
  • + +
    + Frame-9 +
    +
    .icon-Frame-91 +
    +
  • + +
  • + +
    + equal +
    +
    .icon-equal +
    +
  • + +
  • + +
    + warning +
    +
    .icon-warning +
    +
  • + +
  • + +
    + error +
    +
    .icon-error +
    +
  • + +
  • + +
    + Frame-1 +
    +
    .icon-Frame-11 +
    +
  • + +
  • + +
    + Frame +
    +
    .icon-Frame1 +
    +
  • + +
  • + +
    + Frame-2 +
    +
    .icon-Frame-21 +
    +
  • + +
  • + +
    + Frame-3 +
    +
    .icon-Frame-31 +
    +
  • + +
  • + +
    + Frame-4 +
    +
    .icon-Frame-41 +
    +
  • + +
  • + +
    + Frame-9 +
    +
    .icon-Frame-9 +
    +
  • + +
  • + +
    + Frame-8 +
    +
    .icon-Frame-8 +
    +
  • + +
  • + +
    + Frame-13 +
    +
    .icon-Frame-13 +
    +
  • + +
  • + +
    + Frame-12 +
    +
    .icon-Frame-12 +
    +
  • + +
  • + +
    + Frame-15 +
    +
    .icon-Frame-15 +
    +
  • + +
  • + +
    + Frame-17 +
    +
    .icon-Frame-17 +
    +
  • + +
  • + +
    + Frame-11 +
    +
    .icon-Frame-111 +
    +
  • + +
  • + +
    + Frame-16 +
    +
    .icon-Frame-16 +
    +
  • + +
  • + +
    + Frame-7 +
    +
    .icon-Frame-7 +
    +
  • + +
  • + +
    + Frame-14 +
    +
    .icon-Frame-14 +
    +
  • + +
  • + +
    + Frame-10 +
    +
    .icon-Frame-10 +
    +
  • + +
  • + +
    + Frame-5 +
    +
    .icon-Frame-5 +
    +
  • + +
  • + +
    + Frame-6 +
    +
    .icon-Frame-6 +
    +
  • + +
  • + +
    + Frame-2 +
    +
    .icon-Frame-2 +
    +
  • + +
  • + +
    + Frame-3 +
    +
    .icon-Frame-3 +
    +
  • + +
  • + +
    + Frame-1 +
    +
    .icon-Frame-1 +
    +
  • + +
  • + +
    + Frame +
    +
    .icon-Frame +
    +
  • + +
  • + +
    + Frame-4 +
    +
    .icon-Frame-4 +
    +
  • + +
+
+

font-class 引用

+
+ +

font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

+

与 Unicode 使用方式相比,具有如下特点:

+
    +
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • +
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 fontclass 代码:

+
<link rel="stylesheet" href="./iconfont.css">
+
+

第二步:挑选相应图标并获取类名,应用于页面:

+
<span class="iconfont icon-xxx"></span>
+
+
+

" + iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    Frame
    +
    #icon-Frame14
    +
  • + +
  • + +
    Frame
    +
    #icon-Frame13
    +
  • + +
  • + +
    Frame-1
    +
    #icon-Frame-113
    +
  • + +
  • + +
    Frame
    +
    #icon-Frame12
    +
  • + +
  • + +
    Frame-2
    +
    #icon-Frame-24
    +
  • + +
  • + +
    Frame
    +
    #icon-Frame10
    +
  • + +
  • + +
    Frame
    +
    #icon-Frame9
    +
  • + +
  • + +
    Frame-1
    +
    #icon-Frame-112
    +
  • + +
  • + +
    Frame-3
    +
    #icon-Frame-33
    +
  • + +
  • + +
    Frame-2
    +
    #icon-Frame-23
    +
  • + +
  • + +
    Frame
    +
    #icon-Frame8
    +
  • + +
  • + +
    继续阅卷
    +
    #icon-Frame7
    +
  • + +
  • + +
    Frame
    +
    #icon-Frame6
    +
  • + +
  • + +
    阅卷记录
    +
    #icon-yuejuanjilu
    +
  • + +
  • + +
    Frame
    +
    #icon-Frame5
    +
  • + +
  • + +
    Frame1
    +
    #icon-Frame11
    +
  • + +
  • + +
    1
    +
    #icon-a-1
    +
  • + +
  • + +
    Frame
    +
    #icon-Frame4
    +
  • + +
  • + +
    Frame-1
    +
    #icon-Frame-110
    +
  • + +
  • + +
    Frame
    +
    #icon-Frame3
    +
  • + +
  • + +
    Frame-1
    +
    #icon-Frame-19
    +
  • + +
  • + +
    Frame
    +
    #icon-Frame2
    +
  • + +
  • + +
    Frame-1
    +
    #icon-Frame-18
    +
  • + +
  • + +
    Frame-2
    +
    #icon-Frame-22
    +
  • + +
  • + +
    Frame-3
    +
    #icon-Frame-32
    +
  • + +
  • + +
    Frame-4
    +
    #icon-Frame-42
    +
  • + +
  • + +
    Frame-5
    +
    #icon-Frame-51
    +
  • + +
  • + +
    Frame-6
    +
    #icon-Frame-61
    +
  • + +
  • + +
    Frame-7
    +
    #icon-Frame-71
    +
  • + +
  • + +
    Frame-8
    +
    #icon-Frame-81
    +
  • + +
  • + +
    Frame-9
    +
    #icon-Frame-91
    +
  • + +
  • + +
    equal
    +
    #icon-equal
    +
  • + +
  • + +
    warning
    +
    #icon-warning
    +
  • + +
  • + +
    error
    +
    #icon-error
    +
  • + +
  • + +
    Frame-1
    +
    #icon-Frame-11
    +
  • + +
  • + +
    Frame
    +
    #icon-Frame1
    +
  • + +
  • + +
    Frame-2
    +
    #icon-Frame-21
    +
  • + +
  • + +
    Frame-3
    +
    #icon-Frame-31
    +
  • + +
  • + +
    Frame-4
    +
    #icon-Frame-41
    +
  • + +
  • + +
    Frame-9
    +
    #icon-Frame-9
    +
  • + +
  • + +
    Frame-8
    +
    #icon-Frame-8
    +
  • + +
  • + +
    Frame-13
    +
    #icon-Frame-13
    +
  • + +
  • + +
    Frame-12
    +
    #icon-Frame-12
    +
  • + +
  • + +
    Frame-15
    +
    #icon-Frame-15
    +
  • + +
  • + +
    Frame-17
    +
    #icon-Frame-17
    +
  • + +
  • + +
    Frame-11
    +
    #icon-Frame-111
    +
  • + +
  • + +
    Frame-16
    +
    #icon-Frame-16
    +
  • + +
  • + +
    Frame-7
    +
    #icon-Frame-7
    +
  • + +
  • + +
    Frame-14
    +
    #icon-Frame-14
    +
  • + +
  • + +
    Frame-10
    +
    #icon-Frame-10
    +
  • + +
  • + +
    Frame-5
    +
    #icon-Frame-5
    +
  • + +
  • + +
    Frame-6
    +
    #icon-Frame-6
    +
  • + +
  • + +
    Frame-2
    +
    #icon-Frame-2
    +
  • + +
  • + +
    Frame-3
    +
    #icon-Frame-3
    +
  • + +
  • + +
    Frame-1
    +
    #icon-Frame-1
    +
  • + +
  • + +
    Frame
    +
    #icon-Frame
    +
  • + +
  • + +
    Frame-4
    +
    #icon-Frame-4
    +
  • + +
+
+

Symbol 引用

+
+ +

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 + 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

+
    +
  • 支持多色图标了,不再受单色限制。
  • +
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • +
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • +
  • 浏览器渲染 SVG 的性能一般,还不如 png。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 symbol 代码:

+
<script src="./iconfont.js"></script>
+
+

第二步:加入通用 CSS 代码(引入一次就行):

+
<style>
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+</style>
+
+

第三步:挑选相应图标并获取类名,应用于页面:

+
<svg class="icon" aria-hidden="true">
+  <use xlink:href="#icon-xxx"></use>
+</svg>
+
+
+
+ +
+
+ + + diff --git a/assets/icons/iconfont.css b/assets/icons/iconfont.css new file mode 100644 index 0000000..7ae4d3f --- /dev/null +++ b/assets/icons/iconfont.css @@ -0,0 +1,243 @@ +@font-face { + font-family: "iconfont"; /* Project id 3423846 */ + src: url('iconfont.woff2?t=1710142362036') format('woff2'), + url('iconfont.woff?t=1710142362036') format('woff'), + url('iconfont.ttf?t=1710142362036') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-Frame14:before { + content: "\e63e"; +} + +.icon-Frame13:before { + content: "\e63d"; +} + +.icon-Frame-113:before { + content: "\e63a"; +} + +.icon-Frame12:before { + content: "\e63b"; +} + +.icon-Frame-24:before { + content: "\e63c"; +} + +.icon-Frame10:before { + content: "\e639"; +} + +.icon-Frame9:before { + content: "\e635"; +} + +.icon-Frame-112:before { + content: "\e636"; +} + +.icon-Frame-33:before { + content: "\e637"; +} + +.icon-Frame-23:before { + content: "\e638"; +} + +.icon-Frame8:before { + content: "\e634"; +} + +.icon-Frame7:before { + content: "\e632"; +} + +.icon-Frame6:before { + content: "\e631"; +} + +.icon-yuejuanjilu:before { + content: "\e630"; +} + +.icon-Frame5:before { + content: "\e62e"; +} + +.icon-Frame11:before { + content: "\e62f"; +} + +.icon-a-1:before { + content: "\e629"; +} + +.icon-Frame4:before { + content: "\e627"; +} + +.icon-Frame-110:before { + content: "\e628"; +} + +.icon-Frame3:before { + content: "\e625"; +} + +.icon-Frame-19:before { + content: "\e626"; +} + +.icon-Frame2:before { + content: "\e61b"; +} + +.icon-Frame-18:before { + content: "\e61c"; +} + +.icon-Frame-22:before { + content: "\e61d"; +} + +.icon-Frame-32:before { + content: "\e61e"; +} + +.icon-Frame-42:before { + content: "\e61f"; +} + +.icon-Frame-51:before { + content: "\e620"; +} + +.icon-Frame-61:before { + content: "\e621"; +} + +.icon-Frame-71:before { + content: "\e622"; +} + +.icon-Frame-81:before { + content: "\e623"; +} + +.icon-Frame-91:before { + content: "\e624"; +} + +.icon-equal:before { + content: "\e61a"; +} + +.icon-warning:before { + content: "\e601"; +} + +.icon-error:before { + content: "\e602"; +} + +.icon-Frame-11:before { + content: "\e608"; +} + +.icon-Frame1:before { + content: "\e609"; +} + +.icon-Frame-21:before { + content: "\e60a"; +} + +.icon-Frame-31:before { + content: "\e60b"; +} + +.icon-Frame-41:before { + content: "\e60c"; +} + +.icon-Frame-9:before { + content: "\e60d"; +} + +.icon-Frame-8:before { + content: "\e60e"; +} + +.icon-Frame-13:before { + content: "\e60f"; +} + +.icon-Frame-12:before { + content: "\e610"; +} + +.icon-Frame-15:before { + content: "\e611"; +} + +.icon-Frame-17:before { + content: "\e612"; +} + +.icon-Frame-111:before { + content: "\e613"; +} + +.icon-Frame-16:before { + content: "\e614"; +} + +.icon-Frame-7:before { + content: "\e615"; +} + +.icon-Frame-14:before { + content: "\e616"; +} + +.icon-Frame-10:before { + content: "\e617"; +} + +.icon-Frame-5:before { + content: "\e618"; +} + +.icon-Frame-6:before { + content: "\e619"; +} + +.icon-Frame-2:before { + content: "\e603"; +} + +.icon-Frame-3:before { + content: "\e604"; +} + +.icon-Frame-1:before { + content: "\e605"; +} + +.icon-Frame:before { + content: "\e606"; +} + +.icon-Frame-4:before { + content: "\e607"; +} + diff --git a/assets/icons/iconfont.js b/assets/icons/iconfont.js new file mode 100644 index 0000000..79e8e53 --- /dev/null +++ b/assets/icons/iconfont.js @@ -0,0 +1 @@ +window._iconfont_svg_string_3423846='',function(c){var a=(a=document.getElementsByTagName("script"))[a.length-1],l=a.getAttribute("data-injectcss"),a=a.getAttribute("data-disable-injectsvg");if(!a){var h,i,t,o,m,v=function(a,l){l.parentNode.insertBefore(a,l)};if(l&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}h=function(){var a,l=document.createElement("div");l.innerHTML=c._iconfont_svg_string_3423846,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(a=document.body).firstChild?v(l,a.firstChild):a.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(i=function(){document.removeEventListener("DOMContentLoaded",i,!1),h()},document.addEventListener("DOMContentLoaded",i,!1)):document.attachEvent&&(t=h,o=c.document,m=!1,F(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,e())})}function e(){m||(m=!0,t())}function F(){try{o.documentElement.doScroll("left")}catch(a){return void setTimeout(F,50)}e()}}(window); \ No newline at end of file diff --git a/assets/icons/iconfont.json b/assets/icons/iconfont.json new file mode 100644 index 0000000..0cc4adc --- /dev/null +++ b/assets/icons/iconfont.json @@ -0,0 +1,408 @@ +{ + "id": "3423846", + "name": "阅卷平台", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "39483566", + "name": "Frame", + "font_class": "Frame14", + "unicode": "e63e", + "unicode_decimal": 58942 + }, + { + "icon_id": "39175701", + "name": "Frame", + "font_class": "Frame13", + "unicode": "e63d", + "unicode_decimal": 58941 + }, + { + "icon_id": "39173378", + "name": "Frame-1", + "font_class": "Frame-113", + "unicode": "e63a", + "unicode_decimal": 58938 + }, + { + "icon_id": "39173379", + "name": "Frame", + "font_class": "Frame12", + "unicode": "e63b", + "unicode_decimal": 58939 + }, + { + "icon_id": "39173377", + "name": "Frame-2", + "font_class": "Frame-24", + "unicode": "e63c", + "unicode_decimal": 58940 + }, + { + "icon_id": "39036939", + "name": "Frame", + "font_class": "Frame10", + "unicode": "e639", + "unicode_decimal": 58937 + }, + { + "icon_id": "38951584", + "name": "Frame", + "font_class": "Frame9", + "unicode": "e635", + "unicode_decimal": 58933 + }, + { + "icon_id": "38951583", + "name": "Frame-1", + "font_class": "Frame-112", + "unicode": "e636", + "unicode_decimal": 58934 + }, + { + "icon_id": "38951582", + "name": "Frame-3", + "font_class": "Frame-33", + "unicode": "e637", + "unicode_decimal": 58935 + }, + { + "icon_id": "38951581", + "name": "Frame-2", + "font_class": "Frame-23", + "unicode": "e638", + "unicode_decimal": 58936 + }, + { + "icon_id": "38561727", + "name": "Frame", + "font_class": "Frame8", + "unicode": "e634", + "unicode_decimal": 58932 + }, + { + "icon_id": "38318831", + "name": "继续阅卷", + "font_class": "Frame7", + "unicode": "e632", + "unicode_decimal": 58930 + }, + { + "icon_id": "38307813", + "name": "Frame", + "font_class": "Frame6", + "unicode": "e631", + "unicode_decimal": 58929 + }, + { + "icon_id": "38304788", + "name": "阅卷记录", + "font_class": "yuejuanjilu", + "unicode": "e630", + "unicode_decimal": 58928 + }, + { + "icon_id": "38108247", + "name": "Frame", + "font_class": "Frame5", + "unicode": "e62e", + "unicode_decimal": 58926 + }, + { + "icon_id": "38108264", + "name": "Frame1", + "font_class": "Frame11", + "unicode": "e62f", + "unicode_decimal": 58927 + }, + { + "icon_id": "36030549", + "name": "1", + "font_class": "a-1", + "unicode": "e629", + "unicode_decimal": 58921 + }, + { + "icon_id": "36025847", + "name": "Frame", + "font_class": "Frame4", + "unicode": "e627", + "unicode_decimal": 58919 + }, + { + "icon_id": "36025848", + "name": "Frame-1", + "font_class": "Frame-110", + "unicode": "e628", + "unicode_decimal": 58920 + }, + { + "icon_id": "35726114", + "name": "Frame", + "font_class": "Frame3", + "unicode": "e625", + "unicode_decimal": 58917 + }, + { + "icon_id": "35726115", + "name": "Frame-1", + "font_class": "Frame-19", + "unicode": "e626", + "unicode_decimal": 58918 + }, + { + "icon_id": "35408271", + "name": "Frame", + "font_class": "Frame2", + "unicode": "e61b", + "unicode_decimal": 58907 + }, + { + "icon_id": "35408272", + "name": "Frame-1", + "font_class": "Frame-18", + "unicode": "e61c", + "unicode_decimal": 58908 + }, + { + "icon_id": "35408273", + "name": "Frame-2", + "font_class": "Frame-22", + "unicode": "e61d", + "unicode_decimal": 58909 + }, + { + "icon_id": "35408283", + "name": "Frame-3", + "font_class": "Frame-32", + "unicode": "e61e", + "unicode_decimal": 58910 + }, + { + "icon_id": "35408284", + "name": "Frame-4", + "font_class": "Frame-42", + "unicode": "e61f", + "unicode_decimal": 58911 + }, + { + "icon_id": "35408288", + "name": "Frame-5", + "font_class": "Frame-51", + "unicode": "e620", + "unicode_decimal": 58912 + }, + { + "icon_id": "35408289", + "name": "Frame-6", + "font_class": "Frame-61", + "unicode": "e621", + "unicode_decimal": 58913 + }, + { + "icon_id": "35408298", + "name": "Frame-7", + "font_class": "Frame-71", + "unicode": "e622", + "unicode_decimal": 58914 + }, + { + "icon_id": "35408300", + "name": "Frame-8", + "font_class": "Frame-81", + "unicode": "e623", + "unicode_decimal": 58915 + }, + { + "icon_id": "35408317", + "name": "Frame-9", + "font_class": "Frame-91", + "unicode": "e624", + "unicode_decimal": 58916 + }, + { + "icon_id": "30190804", + "name": "equal", + "font_class": "equal", + "unicode": "e61a", + "unicode_decimal": 58906 + }, + { + "icon_id": "30183282", + "name": "warning", + "font_class": "warning", + "unicode": "e601", + "unicode_decimal": 58881 + }, + { + "icon_id": "30183283", + "name": "error", + "font_class": "error", + "unicode": "e602", + "unicode_decimal": 58882 + }, + { + "icon_id": "29930405", + "name": "Frame-1", + "font_class": "Frame-11", + "unicode": "e608", + "unicode_decimal": 58888 + }, + { + "icon_id": "29930406", + "name": "Frame", + "font_class": "Frame1", + "unicode": "e609", + "unicode_decimal": 58889 + }, + { + "icon_id": "29930407", + "name": "Frame-2", + "font_class": "Frame-21", + "unicode": "e60a", + "unicode_decimal": 58890 + }, + { + "icon_id": "29930408", + "name": "Frame-3", + "font_class": "Frame-31", + "unicode": "e60b", + "unicode_decimal": 58891 + }, + { + "icon_id": "29930409", + "name": "Frame-4", + "font_class": "Frame-41", + "unicode": "e60c", + "unicode_decimal": 58892 + }, + { + "icon_id": "29930410", + "name": "Frame-9", + "font_class": "Frame-9", + "unicode": "e60d", + "unicode_decimal": 58893 + }, + { + "icon_id": "29930411", + "name": "Frame-8", + "font_class": "Frame-8", + "unicode": "e60e", + "unicode_decimal": 58894 + }, + { + "icon_id": "29930412", + "name": "Frame-13", + "font_class": "Frame-13", + "unicode": "e60f", + "unicode_decimal": 58895 + }, + { + "icon_id": "29930413", + "name": "Frame-12", + "font_class": "Frame-12", + "unicode": "e610", + "unicode_decimal": 58896 + }, + { + "icon_id": "29930414", + "name": "Frame-15", + "font_class": "Frame-15", + "unicode": "e611", + "unicode_decimal": 58897 + }, + { + "icon_id": "29930415", + "name": "Frame-17", + "font_class": "Frame-17", + "unicode": "e612", + "unicode_decimal": 58898 + }, + { + "icon_id": "29930416", + "name": "Frame-11", + "font_class": "Frame-111", + "unicode": "e613", + "unicode_decimal": 58899 + }, + { + "icon_id": "29930417", + "name": "Frame-16", + "font_class": "Frame-16", + "unicode": "e614", + "unicode_decimal": 58900 + }, + { + "icon_id": "29930418", + "name": "Frame-7", + "font_class": "Frame-7", + "unicode": "e615", + "unicode_decimal": 58901 + }, + { + "icon_id": "29930419", + "name": "Frame-14", + "font_class": "Frame-14", + "unicode": "e616", + "unicode_decimal": 58902 + }, + { + "icon_id": "29930420", + "name": "Frame-10", + "font_class": "Frame-10", + "unicode": "e617", + "unicode_decimal": 58903 + }, + { + "icon_id": "29930421", + "name": "Frame-5", + "font_class": "Frame-5", + "unicode": "e618", + "unicode_decimal": 58904 + }, + { + "icon_id": "29930422", + "name": "Frame-6", + "font_class": "Frame-6", + "unicode": "e619", + "unicode_decimal": 58905 + }, + { + "icon_id": "29929656", + "name": "Frame-2", + "font_class": "Frame-2", + "unicode": "e603", + "unicode_decimal": 58883 + }, + { + "icon_id": "29929657", + "name": "Frame-3", + "font_class": "Frame-3", + "unicode": "e604", + "unicode_decimal": 58884 + }, + { + "icon_id": "29929658", + "name": "Frame-1", + "font_class": "Frame-1", + "unicode": "e605", + "unicode_decimal": 58885 + }, + { + "icon_id": "29929659", + "name": "Frame", + "font_class": "Frame", + "unicode": "e606", + "unicode_decimal": 58886 + }, + { + "icon_id": "29929660", + "name": "Frame-4", + "font_class": "Frame-4", + "unicode": "e607", + "unicode_decimal": 58887 + } + ] +} diff --git a/assets/icons/iconfont.ttf b/assets/icons/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7a00b3341626e525562cc0120c9df44f1218b8bf GIT binary patch literal 13996 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 G5b%FQ-IE^x literal 0 HcmV?d00001 diff --git a/assets/icons/iconfont.woff2 b/assets/icons/iconfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..70e83d165f9f6f30c7112f0471b0665b8ef81491 GIT binary patch literal 7304 zcmV;39Czb)Pew8T0RR91033(_3jhEB05+@u031000RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/assets/images/not_data_bgm2.png b/assets/images/not_data_bgm2.png new file mode 100644 index 0000000000000000000000000000000000000000..dbb719a9276b6b52790d56237b47b164bd664f06 GIT binary patch literal 47801 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 X5xsHpLFL&0A%7~0>IyY-A42{I#TE@e literal 0 HcmV?d00001 diff --git a/lib/common/api/retrofit_client.dart b/lib/common/api/retrofit_client.dart index 2342b1c..eb08345 100644 --- a/lib/common/api/retrofit_client.dart +++ b/lib/common/api/retrofit_client.dart @@ -1,5 +1,6 @@ import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; +import 'package:school_asignment_app/common/job/enum_subject.dart'; import 'package:school_asignment_app/common/job/user_info_detail.dart'; import 'package:school_asignment_app/common/job/work_student.dart'; import 'package:school_asignment_app/common/job/work_student_params.dart'; @@ -19,4 +20,7 @@ abstract class RetrofitClient { @GET("/api/hms/Homework/GetList") Future getWorkList(@Queries() WorkStudentParams params); + + @GET("/api/app/Common/GetEnumInfos") + Future>> getEnumSubjectList(@Query('enumNames') String enumNames); } diff --git a/lib/common/job/enum_subject.dart b/lib/common/job/enum_subject.dart new file mode 100644 index 0000000..e53ee91 --- /dev/null +++ b/lib/common/job/enum_subject.dart @@ -0,0 +1,23 @@ +import 'package:json_annotation/json_annotation.dart'; + +part 'enum_subject.g.dart'; + + +@JsonSerializable() +class EnumSubject extends Object { + + @JsonKey(name: 'id') + int id; + + @JsonKey(name: 'name') + String name; + + EnumSubject(this.id,this.name,); + + factory EnumSubject.fromJson(Map srcJson) => _$EnumSubjectFromJson(srcJson); + + Map toJson() => _$EnumSubjectToJson(this); + +} + + diff --git a/lib/common/job/work_student.dart b/lib/common/job/work_student.dart index 41ace82..32bc86e 100644 --- a/lib/common/job/work_student.dart +++ b/lib/common/job/work_student.dart @@ -49,7 +49,7 @@ class Items extends Object { int collectRate; @JsonKey(name: 'annotateRate') - int annotateRate; + double annotateRate; @JsonKey(name: 'classes') List classes; @@ -60,7 +60,11 @@ class Items extends Object { @JsonKey(name: 'creationTime') String creationTime; - Items(this.id,this.assessType,this.name,this.grade,this.subject,this.publishTime,this.state,this.collectRate,this.annotateRate,this.classes,this.creatorName,this.creationTime,); + @JsonKey(name: 'classCount') + int? classCount; + + + Items(this.id,this.assessType,this.name,this.grade,this.subject,this.publishTime,this.state,this.collectRate,this.annotateRate,this.classes,this.creatorName,this.creationTime,this.classCount); factory Items.fromJson(Map srcJson) => _$ItemsFromJson(srcJson); @@ -85,7 +89,7 @@ class Classes extends Object { String className; @JsonKey(name: 'finishTime') - String finishTime; + String? finishTime; Classes(this.schoolId,this.schoolName,this.classId,this.className,this.finishTime,); diff --git a/lib/common/store/user_store.dart b/lib/common/store/user_store.dart index c8e8744..e65d9bd 100644 --- a/lib/common/store/user_store.dart +++ b/lib/common/store/user_store.dart @@ -1,11 +1,13 @@ import 'package:get/get.dart'; +import 'package:school_asignment_app/common/job/enum_subject.dart'; import 'package:school_asignment_app/common/job/user_info.dart'; import 'package:school_asignment_app/common/job/user_info_detail.dart'; +import 'package:school_asignment_app/common/mixins/request_tool_mixin.dart'; import 'package:school_asignment_app/common/utils/storage.dart'; import 'package:school_asignment_app/common/store/app_storage_key.dart'; import 'package:school_asignment_app/routes/app_pages.dart'; -class UserStore extends GetxController { +class UserStore extends GetxController with RequestToolMixin{ UserStore._privateConstructor() { init(); } @@ -28,6 +30,8 @@ class UserStore extends GetxController { /// 用户详细信息 Rx userDetailInfo = Rx(null); +RxList subjectList = RxList(); + void init() { token = StorageService.to.read(AppStorageKey.token.value) ?? ''; try { @@ -68,4 +72,10 @@ class UserStore extends GetxController { userDetailInfo.value = info; StorageService.to.write(AppStorageKey.userDetailInfo.value, info); } + +//获取科目 + getSubjectList() async { + var res = await getClient().getEnumSubjectList('EnumSubject'); + subjectList.value = res['EnumSubject']!; + } } diff --git a/lib/common/utils/utils.dart b/lib/common/utils/utils.dart index 101e553..71af9c0 100644 --- a/lib/common/utils/utils.dart +++ b/lib/common/utils/utils.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; class Utils{ @@ -14,4 +15,25 @@ class Utils{ FocusManager.instance.primaryFocus?.unfocus(); } } + + // 是否是平板 + static bool isPad([double mobilePhoneScale = 1.2]) { + return ScreenUtil().scaleWidth > mobilePhoneScale; + } + + static String getDoubleRemoveZero(double? val, [String? defaultVal]) { + try { + if (val == null) throw Exception('数据为空'); + List _valArr = val.toString().split('.'); + if (_valArr.length >= 2) { + if (int.parse(_valArr[1]) == 0) { + return val.toInt().toString(); + } + return val.toString(); + } + return val.toInt().toString(); + } catch (e) { + return defaultVal ?? ''; + } + } } \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index a3201c8..7bd7686 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -39,6 +39,7 @@ class MyApp extends StatelessWidget { theme: ThemeData( brightness: Brightness.light, primarySwatch: createMaterialColor(const Color.fromRGBO(46, 91, 255, 1)), + primaryColor: const Color.fromRGBO(46, 91, 255, 1), // textTheme: Typography.englishLike2018.apply(fontSizeFactor: 1.sp,), primaryTextTheme: TextTheme( bodyLarge: TextStyle(fontSize: 14.sp, color: Colors.black87), diff --git a/lib/page/global_widget/MyEmptyWidget.dart b/lib/page/global_widget/MyEmptyWidget.dart new file mode 100644 index 0000000..4febf96 --- /dev/null +++ b/lib/page/global_widget/MyEmptyWidget.dart @@ -0,0 +1,60 @@ +/* + * @Descripttion: + * @version: + * @Author: wy + * @Date: 2020-07-01 15:45:15 + * @LastEditors: wangyang 1147192855@qq.com + * @LastEditTime: 2022-07-19 11:14:07 + */ + +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class MyEmptyWidget extends StatelessWidget { + static const String defText = "抱歉,暂无内容"; + static const String defimg = "assets/images/not_data_bgm2.png"; + final String? textVal; + final String? imgAssetPath; + final AlignmentGeometry alignment; + final EdgeInsets? padding; + final double? imgWidth; + final double? imgHeight; + const MyEmptyWidget( + {this.imgWidth, + this.imgHeight, + this.textVal, + this.padding, + this.imgAssetPath, + this.alignment = Alignment.center, + Key? key}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + padding: padding ?? EdgeInsets.only(bottom: 40.r), + alignment: alignment, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Opacity( + opacity: 0.6, + child: Image.asset( + imgAssetPath ?? defimg, + fit: BoxFit.cover, + width: imgWidth ?? 150.w, + height: imgHeight ?? 150.w, + ), + ), + Padding( + padding: EdgeInsets.only(top: 5.h), + child: Text( + textVal ?? defText, + style: TextStyle(fontSize: 12.sp, color: const Color(0xB2898B8D)), + ), + ) + ], + ), + ); + } +} diff --git a/lib/page/home_page/home_logic.dart b/lib/page/home_page/home_logic.dart index 8d7b484..c0200b6 100644 --- a/lib/page/home_page/home_logic.dart +++ b/lib/page/home_page/home_logic.dart @@ -1,37 +1,142 @@ import 'package:flutter/material.dart'; +import 'package:flutter_easyrefresh/easy_refresh.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; -import 'package:get_storage/get_storage.dart'; +import 'package:school_asignment_app/common/job/enum_subject.dart'; import 'package:school_asignment_app/common/job/work_student.dart'; import 'package:school_asignment_app/common/job/work_student_params.dart'; import 'package:school_asignment_app/common/mixins/request_tool_mixin.dart'; import 'package:school_asignment_app/common/store/user_store.dart'; +import 'package:school_asignment_app/common/utils/toast_utils.dart'; +import 'package:school_asignment_app/page/global_widget/my_text.dart'; import 'home_state.dart'; class HomeLogic extends GetxController with RequestToolMixin,GetTickerProviderStateMixin{ final HomeState state = HomeState(); late TabController tabController; + /* 待阅卷 */ + late final EasyRefreshController refreshController1; + late final EasyRefreshController refreshController2; @override void onInit(){ super.onInit(); state.userInfo = UserStore.to.userInfo; state.active = Get.arguments ?? 1; + refreshController1 = EasyRefreshController(); + refreshController2 = EasyRefreshController(); tabController = TabController( length: 2, vsync: this, ); - print('state.active=${state.active}'); getList(); } void getList() async{ - WorkStudentParams params = WorkStudentParams(assessType: 0,); + WorkStudentParams params = WorkStudentParams(assessType: state.tabIndex.value,); WorkStudent data = await getClient().getWorkList(params); state.workList.value = data.items; + refreshController1.finishRefresh(); + refreshController2.finishRefresh(); +print('state.workList.length='); +print(state.workList.length); } + /// 刷新方法 + Future onMyRefresh(EasyRefreshController controller, int tab) async { + /* params.page = RequestConfig.basePage.page; + List lists = await getData(controller, params, isReFresh: true); + try { + tab == 1 ? (markingDatas1 = lists) : (markingDatas2 = lists); + } catch (e) {} + toUpState(setState, () {}, mounted);*/ + getList(); + + } + + /// 加载方法 + Future onMyLoad(EasyRefreshController controller, int tab) async { + /*params.page++; + List lists = await getData(controller, params); + if (lists.isNotEmpty) { + tab == 1 ? markingDatas1.addAll(lists) : markingDatas2.addAll(lists); + toUpState(setState, () {}, mounted); + }*/ + } + String formatSubject(int id){ + if(UserStore.to.subjectList.isEmpty){ + return ''; + } + EnumSubject item = UserStore.to.subjectList.firstWhere((element) => element.id == id); + return item.name??''; + } + + /* Future showStudents( + BuildContext context, [ + bool? submitted = false, + String? className, + ]) async { + ToastUtils.showLoading(); + List students = []; + + showModalBottomSheet( + context: context, + elevation: 10, + backgroundColor: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(20.r), + topRight: Radius.circular(20.r), + ), + ), + builder: (BuildContext context) { + return Padding( + padding: EdgeInsets.symmetric(horizontal: 2.w), + child: Column( + children: [ + Container( + margin: EdgeInsets.only(top: 14.h), + child: quickText( + '${className ?? ''}${submitted! ? '已提交' : '未提交'}作业学生', + size: 18.sp, + fontWeight: FontWeight.bold, + color: Color.fromRGBO(60, 60, 60, 1), + ), + ), + Expanded( + child: ListView( + padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 4.w), + children: [ + Wrap( + spacing: 6.0, // 主轴(水平)方向间距 + runSpacing: 4.0, // 纵轴(垂直)方向间距 + alignment: WrapAlignment.spaceAround, //沿主轴方向居中 + children: students.map((e) { + return Chip( + backgroundColor: Color.fromRGBO(239, 242, 255, 1), + avatar: CircleAvatar( + backgroundColor: Colors.white, + child: quickText(e.studentName.substring(0, 1), + size: 12.sp, color: Theme.of(context).primaryColor), + ), + label: quickText(e.studentName, color: Color.fromRGBO(80, 94, 110, 1), size: 12.sp), + ); + }).toList(), + ), + ], + ), + ) + ], + ), + ); + }, + ); + }*/ + @override void dispose(){ super.dispose(); tabController.dispose(); + refreshController1.dispose(); + refreshController2.dispose(); } } diff --git a/lib/page/home_page/home_state.dart b/lib/page/home_page/home_state.dart index f4ccff5..16b2743 100644 --- a/lib/page/home_page/home_state.dart +++ b/lib/page/home_page/home_state.dart @@ -1,6 +1,9 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:school_asignment_app/common/job/enum_subject.dart'; import 'package:school_asignment_app/common/job/user_info.dart'; +import 'package:school_asignment_app/common/job/work_student.dart'; +import 'package:school_asignment_app/common/store/user_store.dart'; class HomeState { HomeState() { @@ -9,7 +12,7 @@ class HomeState { late Rx userInfo; int active = 1; - late RxList workList = RxList(); + late RxList workList = RxList(); late RxInt tabIndex = 0.obs; late bool completedToRefresh = true; } diff --git a/lib/page/home_page/home_view.dart b/lib/page/home_page/home_view.dart index 5751a8c..5245b20 100644 --- a/lib/page/home_page/home_view.dart +++ b/lib/page/home_page/home_view.dart @@ -1,12 +1,18 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_easyrefresh/easy_refresh.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:functional_widget_annotation/functional_widget_annotation.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; +import 'package:school_asignment_app/common/job/work_student.dart'; import 'package:school_asignment_app/common/store/app_storage_key.dart'; import 'package:school_asignment_app/common/utils/storage.dart'; +import 'package:school_asignment_app/common/utils/utils.dart'; +import 'package:school_asignment_app/page/global_widget/MyEmptyWidget.dart'; import 'package:school_asignment_app/page/global_widget/global_scaffold.dart'; import 'package:school_asignment_app/page/global_widget/my_text.dart'; +import 'package:school_asignment_app/page/home_page/widget/task_list_item.dart'; import 'package:school_asignment_app/page/home_page/widget/top_user_info.dart'; import 'package:school_asignment_app/routes/app_pages.dart'; @@ -54,7 +60,7 @@ class _HomePageState extends State { child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ - Expanded(flex: 1, child: SizedBox()), + const Expanded(flex: 1, child: SizedBox()), Expanded( flex: 4, child: Container( @@ -88,6 +94,7 @@ class _HomePageState extends State { // _refreshController2.callRefresh(); state.completedToRefresh = false; } + logic.getList(); }, tabs: [ Tab( @@ -167,15 +174,16 @@ class _HomePageState extends State { transition: getTransition());*/ }, child: Icon( - IconData(0xe63e, fontFamily: "AlibabaIcon"), - color: Color.fromRGBO(44, 48, 63, 1), + const IconData( + 0xe63e, fontFamily: "AlibabaIcon"), + color: const Color.fromRGBO(44, 48, 63, 1), size: 24.sp), ), ), ], ), ), - /* if (state.tabIndex.value == 1) + /* if (state.tabIndex.value == 1) $CompletedJobConditionFilter( controller: _tabController2, jobType: params2.markingType ?? 1, @@ -202,31 +210,32 @@ class _HomePageState extends State { _refreshController2.callRefresh(); }, ),*/ - /* Expanded( - child: Obx(() { - return IndexedStack( + Expanded( + child: IndexedStack( index: state.tabIndex.value, children: [ - $EasyRefresh( - controller: _refreshController1, - params: params1, + $easyRefresh( + controller: logic.refreshController1, tab: 1, - data: markingDatas1, - onLoad: onMyLoad, - onRefresh: onMyRefresh, + type: state.active, + data: state.workList, + onLoad: logic.onMyLoad, + onRefresh: logic.onMyRefresh, + logic: logic ), - $EasyRefresh( - controller: _refreshController2, - params: params2, + $easyRefresh( + controller: logic.refreshController2, tab: 2, - data: markingDatas2, - onLoad: onMyLoad, - onRefresh: onMyRefresh, + type: state.active, + data: state.workList, + onLoad: logic.onMyLoad, + onRefresh: logic.onMyRefresh, + logic: logic ), ], - ); - }), - ),*/ + ) + + ), ], ); }, @@ -241,4 +250,215 @@ class _HomePageState extends State { Get.delete(); super.dispose(); } + +} + +/// 已阅卷 +/// OnRefreshCallback? onRefresh +/// +@swidget +Widget $easyRefresh({ + required EasyRefreshController controller, + required Future< + void> Function(EasyRefreshController controller, int tab) onRefresh, + required Future< + void> Function(EasyRefreshController controller, int tab) onLoad, + required List data, + required int tab, + required int type, + required HomeLogic logic, +}) { + bool completed = tab == 2; // 是否是待批阅 + bool isPadFlag = Utils.isPad(); + return Obx(() { + return EasyRefresh( + firstRefresh: false, + taskIndependence: true, + /*enableControlFinishLoad: true, + enableControlFinishRefresh: true,*/ + emptyWidget: data.isEmpty ? const MyEmptyWidget() : null, + controller: controller, + header: MaterialHeader(), + footer: TaurusFooter(), + child: completed && isPadFlag + ? GridView( + padding: EdgeInsets.only( + top: 11.h, bottom: 10.h, left: 12.w, right: 12.w), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, //横轴三个子widget + mainAxisSpacing: 10.h, + crossAxisSpacing: 6.w, + childAspectRatio: 1.81 //宽高比为1时,子widget + ), + children: List.generate(data.length, (index) { + Items item = data[index]; + String subjectName = logic.formatSubject(item.subject); + return $reviewedItem(jobTaskItem: item,type: type,subjectName:subjectName); + }), + ) + : ListView.builder( + padding: EdgeInsets.only(top: 11.h, bottom: 10.h, left: 12.w, right: 12.w), + itemBuilder: (context, index) { + Items item = data[index]; + return TaskListItem(completed:completed,jobTaskItem:item,type:type,logic: logic,); + /*HomeworkTasksViewItem( + completed: completed, + jobTaskItem: data[index], + call: () => controller.callRefresh(), + );*/ + }, + itemCount: data.length, + ), + onRefresh: () => onRefresh(controller, tab), + onLoad: () => onLoad(controller, tab), + ); + }); +} + +@swidget +Widget $reviewedItem({ required Items jobTaskItem, required int type,required String subjectName}) { + EdgeInsets padEdg = EdgeInsets.symmetric(horizontal: 10.w); + + return InkWell( + onTap: () { + /* String url = + '${RouterManager.jobListParticipateInClassPath}?&jobId=${jobTaskItem.id}&genderName=${Uri.encodeComponent(jobTaskItem.genderName)}&jobName=${Uri.encodeComponent(jobTaskItem.title)}&completed=${true}'; + RouterManager.router.navigateTo(context, url, transition: getTransition());*/ + }, + child: Container( + padding: EdgeInsets.only(top: 10.h), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(6.r), + color: Colors.white, + boxShadow: const [ + BoxShadow( + color: Color.fromRGBO(210, 216, 241, 1), + offset: Offset.zero, //阴影y轴偏移量 + blurRadius: 5.8, //阴影模糊程度 + spreadRadius: 0, //阴影扩散程度 + ) + ], + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + // 顶部任务名称 + Padding( + padding: padEdg, + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: 32.w, + height: 18.h, + alignment: Alignment.center, + padding: EdgeInsets.only(left: 2.w), + decoration: BoxDecoration( + color: type == 1 + ? const Color.fromRGBO(104, 136, 253, 1) + : const Color.fromRGBO(255, 175, 56, 1), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(14.r), + topRight: Radius.circular(3.r), + bottomLeft: Radius.circular(4.r), + bottomRight: Radius.circular(4.r), + ), + ), + margin: EdgeInsets.only(right: 4.w), + child: quickText(type == 1 ? '作业' : '考试', color: Colors.white, + size: 10.sp), + ), + Expanded( + child: quickText(jobTaskItem.name, size: 14.sp, + color: const Color.fromRGBO(70, 70, 70, 1), + maxLines: 2), + ) + ], + ), + ), + + Padding( + padding: padEdg, + child: Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + quickText( + jobTaskItem.publishTime.substring(0, 10), + color: const Color.fromRGBO(97, 97, 97, 1), + size: 10.sp, + fontWeight: FontWeight.w500, + ), + quickText(' / ', color: const Color.fromRGBO(76, 199, 147, 1), + size: 10.sp, + fontWeight: FontWeight.w500), + quickText( + '参与班级:', + color: const Color.fromRGBO(76, 199, 147, 1), + size: 9.sp, + ), + quickText( + '${jobTaskItem.classCount}', + color: const Color.fromRGBO(76, 199, 147, 1), + size: 10.sp, + ), + quickText(' / ', color: const Color.fromRGBO(116, 145, 253, 1), + size: 10.sp, + fontWeight: FontWeight.w500), + quickText( + '科目:$subjectName', + color: const Color.fromRGBO(116, 145, 253, 1), + size: 9.sp, + ), + ], + ), + ), + /*Padding( + padding: EdgeInsets.symmetric(horizontal: 10.w), + child: FavoriteButton( + jobTaskItem.id, + jobTaskItem.title, + margin: EdgeInsets.only(top: 4.h, bottom: 6.h), + ), + ),*/ + GestureDetector( + onTap: () { + /* RouterManager.router.navigateTo( + context, + RouterManager.jobReportPagePath + + '?title=${Uri.encodeComponent(jobTaskItem.title)}&id=${jobTaskItem.id}', + transition: getTransition(), + );*/ + }, + child: Container( + padding: EdgeInsets.symmetric(vertical: 6.h), + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(6.r), + bottomRight: Radius.circular(6.r)), + color: Colors.white, + boxShadow: const [ + BoxShadow( + color: Color.fromRGBO(0, 0, 0, 0.15), + offset: Offset(0, -0.0001), //阴影y轴偏移量 + blurRadius: 4, //阴影模糊程度 + spreadRadius: 0, //阴影扩散程度 + ) + ], + ), + child: Row(children: [ + Expanded( + child: Container( + alignment: Alignment.center, + child: quickText( + '查看报告', color: const Color.fromRGBO(118, 118, 118, 1), + size: 11.sp), + ), + ), + ]), + ), + ), + ], + ), + ), + ); } \ No newline at end of file diff --git a/lib/page/home_page/widget/task_list_item.dart b/lib/page/home_page/widget/task_list_item.dart new file mode 100644 index 0000000..64aeb19 --- /dev/null +++ b/lib/page/home_page/widget/task_list_item.dart @@ -0,0 +1,301 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:percent_indicator/percent_indicator.dart'; +import 'package:school_asignment_app/common/job/work_student.dart'; +import 'package:school_asignment_app/page/global_widget/my_text.dart'; +import 'package:school_asignment_app/page/home_page/home_logic.dart'; +import 'package:school_asignment_app/common/utils/utils.dart'; + +class TaskListItem extends StatefulWidget { + final bool completed; + final Items jobTaskItem; + final int type; + final HomeLogic logic; + + const TaskListItem({Key? key,required this.completed,required this.jobTaskItem,required this.type,required this.logic}) : super(key: key); + + @override + State createState() => _TaskListItemState(); +} + +class _TaskListItemState extends State { + + + @override + Widget build(BuildContext context) { + return widget.completed + ? InkWell( + onTap: () { + /*String url = + '${RouterManager.jobListParticipateInClassPath}?&jobId=${jobTaskItem.id}&genderName=${Uri.encodeComponent(jobTaskItem.genderName)}&jobName=${Uri.encodeComponent(jobTaskItem.title)}&completed=${true}'; + RouterManager.router.navigateTo(context, url, transition: getTransition());*/ + }, + child: Container( + width: double.infinity, + padding: EdgeInsets.only(top: 20.h), + margin: EdgeInsets.only(bottom: 12.h), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(6.r), + color: const Color.fromRGBO(255, 255, 255, 1), + boxShadow: const [ + BoxShadow( + color: Color.fromRGBO(210, 216, 241, 1), + offset: Offset.zero, //阴影y轴偏移量 + blurRadius: 5.8, //阴影模糊程度 + spreadRadius: 0, //阴影扩散程度 + ) + ], + ), + child: Column( + children: [ + // 顶部任务名称 + Padding( + padding: EdgeInsets.symmetric(horizontal: 10.w), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: Utils.isPad() ? 32.w : 36.w, + height: 18.h, + alignment: Alignment.center, + padding: EdgeInsets.only(left: Utils.isPad() ? 2.w : 3.w), + decoration: BoxDecoration( + color: const Color.fromRGBO(104, 136, 253, 1), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(14.r), + topRight: Radius.circular(3.r), + bottomLeft: Radius.circular(4.r), + bottomRight: Radius.circular(4.r), + ), + ), + margin: EdgeInsets.only(right: 4.w), + child: quickText('作业', color: Colors.white, size: 10.sp), + ), + Expanded( + child: quickText( + widget.jobTaskItem.name, + maxLines: 2, + size: 16.sp, + color: const Color.fromRGBO(70, 70, 70, 1), + fontWeight: FontWeight.bold, + ), + ) + ], + ), + ), + + SizedBox(height: 12.h), + Padding( + padding: EdgeInsets.symmetric(horizontal: 10.w), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + quickText( + widget.jobTaskItem.publishTime.substring(0, 10), + color: const Color.fromRGBO(97, 97, 97, 1), + size: 12.sp, + fontWeight: FontWeight.w500, + ), + quickText(' / ', color: const Color.fromRGBO(76, 199, 147, 1), size: 12.sp, fontWeight: FontWeight.w500), + quickText( + '参与班级:${widget.jobTaskItem.classCount}', + color: const Color.fromRGBO(76, 199, 147, 1), + size: 12.sp, + fontWeight: FontWeight.w600, + ), + quickText(' / ', color: const Color.fromRGBO(116, 145, 253, 1), size: 12.sp, fontWeight: FontWeight.w500), + quickText( + '科目:${widget.logic.formatSubject(widget.jobTaskItem.subject)}' , + color: const Color.fromRGBO(116, 145, 253, 1), + size: 12.sp, + fontWeight: FontWeight.w600, + ), + const Expanded(child: SizedBox()), + /* FavoriteButton( + jobTaskItem.id, + jobTaskItem.title, + margin: EdgeInsets.zero, + isRow: false, + ),*/ + ], + ), + ), + + SizedBox(height: 20.h), + Container( + padding: EdgeInsets.symmetric(vertical: 10.h), + decoration: BoxDecoration( + borderRadius: BorderRadius.only(bottomLeft: Radius.circular(6.r), bottomRight: Radius.circular(6.r)), + color: Colors.white, + boxShadow: const [ + BoxShadow( + color: Color.fromRGBO(0, 0, 0, 0.15), + offset: Offset(0, -0.0001), //阴影y轴偏移量 + blurRadius: 4, //阴影模糊程度 + spreadRadius: 0, //阴影扩散程度 + ) + ], + ), + child: Row(children: [ + Expanded( + child: InkWell( + onTap: (){}, + child: Container( + alignment: Alignment.center, + child: quickText('查看报告', color: const Color.fromRGBO(118, 118, 118, 1), size: 13.sp), + ), + )), + ]), + ), + ], + ), + ), + ) + : + InkWell( + onTap: () { + /*String url = + '${RouterManager.jobListParticipateInClassPath}?&jobId=${jobTaskItem.id}&genderName=${Uri.encodeComponent(jobTaskItem.genderName)}&jobName=${Uri.encodeComponent(jobTaskItem.title)}'; + RouterManager.router.navigateTo(context, url, transition: getTransition()).then((value) { + if (value != null && value == true) call(); + });*/ + }, + child: Stack( + alignment: const FractionalOffset(0.95, 0), + children: [ + Container( + margin: EdgeInsets.only(bottom: 16.h), + child: Column( + children: [ + SizedBox(height: 30.h), + Container( + padding: EdgeInsets.symmetric(vertical: 16.h, horizontal: 10.w), + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(6.r), + color: const Color.fromRGBO(255, 255, 255, 1), + boxShadow: const [ + BoxShadow( + color: Color.fromRGBO(210, 216, 241, 1), + offset: Offset.zero, //阴影y轴偏移量 + blurRadius: 5.8, //阴影模糊程度 + spreadRadius: 0, //阴影扩散程度 + ) + ], + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: Utils.isPad() ? 32.w : 38.w, + height: 18.h, + alignment: Alignment.center, + padding: EdgeInsets.only(left: Utils.isPad() ? 2.w : 3.w), + decoration: BoxDecoration( + color: widget.type == 1 + ? const Color.fromRGBO(104, 136, 253, 1) + : const Color.fromRGBO(255, 175, 56, 1), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(14.r), + topRight: Radius.circular(3.r), + bottomLeft: Radius.circular(4.r), + bottomRight: Radius.circular(4.r), + ), + ), + margin: EdgeInsets.only(right: 4.w), + child: quickText(widget.type == 1?'作业':'考试', color: Colors.white, size: 10.sp), + ), + Expanded( + child: quickText( + widget.jobTaskItem.name, + maxLines: 2, + size: Utils.isPad() ? 14.sp : 16.sp, + color: const Color.fromRGBO(70, 70, 70, 1), + fontWeight: FontWeight.bold, + ), + ) + ], + ), + SizedBox(height: 10.h), + Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + quickText( + widget.logic.formatSubject(widget.jobTaskItem.subject), + color: const Color.fromRGBO(97, 97, 97, 1), + size: 12.sp, + ), + quickText(' / ', + color: const Color.fromRGBO(130, 130, 130, 1), size: 11.sp, fontWeight: FontWeight.w500), + Container( + child: Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + quickText('题量:', color: const Color.fromRGBO(130, 130, 130, 1), size: 11.sp), + quickText( + '10', + color: const Color.fromRGBO(97, 97, 97, 1), + size: 13.sp, + ), + ], + ), + ), + quickText(' / ', + color: const Color.fromRGBO(130, 130, 130, 1), size: 11.sp, fontWeight: FontWeight.w500), + quickText(widget.jobTaskItem.publishTime.substring(0, 16), + color: const Color.fromRGBO(97, 97, 97, 1), size: 12.sp), + ], + ), + // FavoriteButton(jobTaskItem.id, jobTaskItem.title), + ], + ), + ), + ], + ), + ), + Container( + padding: EdgeInsets.all(9.r), + decoration: const BoxDecoration(shape: BoxShape.circle, color: Colors.white), + child: CircularPercentIndicator( + radius: 40.r, + lineWidth: 10.r, + animation: true, + percent: widget.jobTaskItem.annotateRate / 100, + center: Text.rich(TextSpan(children: [ + TextSpan( + text: Utils.getDoubleRemoveZero(widget.jobTaskItem.annotateRate, '0'), + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 16.sp, + color: Theme.of(context).primaryColor, + ), + ), + TextSpan( + text: "%", + style: TextStyle(color: const Color.fromRGBO(70, 70, 70, 1), fontSize: 12.sp, fontWeight: FontWeight.bold), + ), + ])), + circularStrokeCap: CircularStrokeCap.round, + // progressColor: Theme.of(context).primaryColor, + linearGradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + tileMode: TileMode.clamp, + stops: const [0.0, 1.0], + colors: [ + Theme.of(context).primaryColor.withOpacity(0.1), + Theme.of(context).primaryColor, + ], + ), + backgroundColor: const Color.fromRGBO(244, 244, 244, 1), + ), + ), + ], + ), + ); + } +} diff --git a/lib/page/login_page/login_logic.dart b/lib/page/login_page/login_logic.dart index 9ead7e7..cc59b06 100644 --- a/lib/page/login_page/login_logic.dart +++ b/lib/page/login_page/login_logic.dart @@ -74,7 +74,8 @@ class LoginLogic extends GetxController with RequestToolMixin { } var data = await getClient().getUser(nameidentifier); print(data); - + //获取科目 + UserStore.to.getSubjectList(); EasyLoading.dismiss(); Get.offAllNamed(Routes.home); // if (resultData.code != 200 || userData?.accessToken == null || userData?.accessToken == '') { diff --git a/pubspec.lock b/pubspec.lock index 2c96fb0..abfd627 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -608,6 +608,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.1" + percent_indicator: + dependency: "direct main" + description: + name: percent_indicator + sha256: c37099ad833a883c9d71782321cb65c3a848c21b6939b6185f0ff6640d05814c + url: "https://pub.dev" + source: hosted + version: "4.2.3" petitparser: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 2357cec..2d8a479 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -68,6 +68,8 @@ dependencies: json_annotation: ^4.8.1 retrofit: ^4.1.0 # end retrofit请求封装 + # 进度条 + percent_indicator: ^4.2.3 dev_dependencies: @@ -112,7 +114,10 @@ flutter: # "family" key with the font family name, and a "fonts" key with a # list giving the asset and other descriptors for the font. For # example: - # fonts: + fonts: + - family: AlibabaIcon + fonts: + - asset: assets/icons/iconfont.ttf # - family: Schyler # fonts: # - asset: fonts/Schyler-Regular.ttf