Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
F
flutter-chat
Project
Project
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
Graph
比较
统计图
议题
0
议题
0
列表
看板
标记
Milestones
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
songchuancai
flutter-chat
Commits
bf93392c
提交
bf93392c
authored
11月 11, 2024
作者:
songchuancai
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
调整菜单(隐藏对话菜单,登录后只显示应用列表)
上级
74a1a0b1
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
110 行增加
和
66 行删除
+110
-66
main.dart
lib/main.dart
+6
-6
apps_page.dart
lib/pages/apps_page.dart
+104
-60
没有找到文件。
lib/main.dart
浏览文件 @
bf93392c
import
'package:allen/
home
_page.dart'
;
import
'package:allen/
pages/apps
_page.dart'
;
import
'package:allen/pallete.dart'
;
import
'package:allen/pallete.dart'
;
import
'package:allen/providers.dart'
;
import
'package:allen/providers.dart'
;
...
@@ -55,12 +55,12 @@ class MyApp extends StatelessWidget {
...
@@ -55,12 +55,12 @@ class MyApp extends StatelessWidget {
return
const
CircularProgressIndicator
();
return
const
CircularProgressIndicator
();
}
}
return
snapshot
.
hasData
?
const
Home
Page
()
:
const
LoginPage
();
return
snapshot
.
hasData
?
const
Apps
Page
()
:
const
LoginPage
();
},
},
),
),
onGenerateRoute:
(
settings
)
{
onGenerateRoute:
(
settings
)
{
if
(
settings
.
name
==
'/
home
'
)
{
if
(
settings
.
name
==
'/
apps
'
)
{
return
MaterialPageRoute
(
builder:
(
context
)
=>
const
Home
Page
());
return
MaterialPageRoute
(
builder:
(
context
)
=>
const
Apps
Page
());
}
}
if
(
settings
.
name
==
'/login'
)
{
if
(
settings
.
name
==
'/login'
)
{
...
@@ -76,10 +76,10 @@ class MyApp extends StatelessWidget {
...
@@ -76,10 +76,10 @@ class MyApp extends StatelessWidget {
);
);
}
}
return
MaterialPageRoute
(
builder:
(
context
)
=>
const
Home
Page
());
return
MaterialPageRoute
(
builder:
(
context
)
=>
const
Apps
Page
());
}
}
return
MaterialPageRoute
(
builder:
(
context
)
=>
const
Home
Page
());
return
MaterialPageRoute
(
builder:
(
context
)
=>
const
Apps
Page
());
},
},
);
);
}
}
...
...
lib/pages/apps_page.dart
浏览文件 @
bf93392c
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'../services/api_service.dart'
;
import
'../services/apps_service.dart'
;
import
'../services/apps_service.dart'
;
import
'../models/app_item.dart'
;
import
'../models/app_item.dart'
;
...
@@ -11,8 +10,6 @@ import '../services/storage_service.dart';
...
@@ -11,8 +10,6 @@ import '../services/storage_service.dart';
import
'../models/user.dart'
;
import
'../models/user.dart'
;
import
'package:shared_preferences/shared_preferences.dart'
;
class
AppsPage
extends
StatefulWidget
{
class
AppsPage
extends
StatefulWidget
{
const
AppsPage
({
super
.
key
});
const
AppsPage
({
super
.
key
});
...
@@ -39,12 +36,13 @@ class _AppsPageState extends State<AppsPage> {
...
@@ -39,12 +36,13 @@ class _AppsPageState extends State<AppsPage> {
static
const
int
_pageSize
=
4
;
static
const
int
_pageSize
=
4
;
User
?
_currentUser
;
@override
@override
void
initState
()
{
void
initState
()
{
super
.
initState
();
super
.
initState
();
_loadUserInfo
();
_initializeService
();
_initializeService
();
_scrollController
.
addListener
(
_onScroll
);
_scrollController
.
addListener
(
_onScroll
);
}
}
...
@@ -126,6 +124,20 @@ class _AppsPageState extends State<AppsPage> {
...
@@ -126,6 +124,20 @@ class _AppsPageState extends State<AppsPage> {
}
}
}
}
Future
<
void
>
_loadUserInfo
()
async
{
final
user
=
await
StorageService
.
getUser
();
setState
(()
{
_currentUser
=
user
;
});
}
void
_handleLogout
()
async
{
await
StorageService
.
clearUser
();
if
(
mounted
)
{
Navigator
.
pushReplacementNamed
(
context
,
'/login'
);
}
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
if
(
isLoading
)
{
if
(
isLoading
)
{
...
@@ -136,67 +148,99 @@ class _AppsPageState extends State<AppsPage> {
...
@@ -136,67 +148,99 @@ class _AppsPageState extends State<AppsPage> {
return
Center
(
child:
Text
(
error
!));
return
Center
(
child:
Text
(
error
!));
}
}
return
ListView
.
builder
(
return
Scaffold
(
controller:
_scrollController
,
appBar:
AppBar
(
padding:
const
EdgeInsets
.
all
(
16
),
automaticallyImplyLeading:
false
,
itemCount:
apps
.
length
+
(
_hasMoreData
?
1
:
0
),
title:
const
Text
(
itemBuilder:
(
context
,
index
)
{
'我的应用'
,
if
(
index
==
apps
.
length
)
{
style:
TextStyle
(
return
_buildLoadingIndicator
();
fontSize:
24
,
}
fontWeight:
FontWeight
.
bold
,
),
final
app
=
apps
[
index
];
),
return
Card
(
actions:
[
margin:
const
EdgeInsets
.
only
(
bottom:
16
),
if
(
_currentUser
!=
null
)
...[
elevation:
2
,
Center
(
child:
ListTile
(
child:
Text
(
contentPadding:
const
EdgeInsets
.
all
(
16
),
_currentUser
!.
username
,
leading:
Container
(
style:
const
TextStyle
(
width:
60
,
fontSize:
16
,
height:
60
,
fontWeight:
FontWeight
.
w500
,
decoration:
BoxDecoration
(
color:
Pallete
.
firstSuggestionBoxColor
.
withOpacity
(
0.1
),
borderRadius:
BorderRadius
.
circular
(
12
),
),
child:
ClipRRect
(
borderRadius:
BorderRadius
.
circular
(
12
),
child:
Image
.
network
(
app
.
iconUrl
,
fit:
BoxFit
.
cover
,
errorBuilder:
(
context
,
error
,
stackTrace
)
{
return
Icon
(
Icons
.
apps
,
size:
30
,
color:
Pallete
.
firstSuggestionBoxColor
,
);
},
),
),
),
),
),
),
title:
Text
(
const
SizedBox
(
width:
12
),
app
.
name
,
IconButton
(
style:
const
TextStyle
(
icon:
const
Icon
(
Icons
.
logout
),
fontSize:
18
,
onPressed:
_handleLogout
,
fontWeight:
FontWeight
.
bold
,
tooltip:
'退出登录'
,
),
),
),
subtitle:
Padding
(
const
SizedBox
(
width:
8
),
padding:
const
EdgeInsets
.
only
(
top:
8
),
],
child:
Text
(
],
app
.
description
,
),
style:
const
TextStyle
(
fontSize:
14
),
body:
ListView
.
builder
(
controller:
_scrollController
,
padding:
const
EdgeInsets
.
all
(
16
),
itemCount:
apps
.
length
+
(
_hasMoreData
?
1
:
0
),
itemBuilder:
(
context
,
index
)
{
if
(
index
==
apps
.
length
)
{
return
_buildLoadingIndicator
();
}
final
app
=
apps
[
index
];
return
Card
(
margin:
const
EdgeInsets
.
only
(
bottom:
16
),
elevation:
2
,
child:
ListTile
(
contentPadding:
const
EdgeInsets
.
all
(
16
),
leading:
Container
(
width:
60
,
height:
60
,
decoration:
BoxDecoration
(
color:
Pallete
.
firstSuggestionBoxColor
.
withOpacity
(
0.1
),
borderRadius:
BorderRadius
.
circular
(
12
),
),
child:
ClipRRect
(
borderRadius:
BorderRadius
.
circular
(
12
),
child:
Image
.
network
(
app
.
iconUrl
,
fit:
BoxFit
.
cover
,
errorBuilder:
(
context
,
error
,
stackTrace
)
{
return
Icon
(
Icons
.
apps
,
size:
30
,
color:
Pallete
.
firstSuggestionBoxColor
,
);
},
),
),
),
),
title:
Text
(
app
.
name
,
style:
const
TextStyle
(
fontSize:
18
,
fontWeight:
FontWeight
.
bold
,
),
),
subtitle:
Padding
(
padding:
const
EdgeInsets
.
only
(
top:
8
),
child:
Text
(
app
.
description
,
style:
const
TextStyle
(
fontSize:
14
),
),
),
onTap:
()
{
Navigator
.
pushNamed
(
context
,
'/chat'
,
arguments:
app
,
);
},
),
),
onTap:
()
{
);
Navigator
.
pushNamed
(
},
context
,
),
'/chat'
,
arguments:
app
,
);
},
),
);
},
);
);
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论