Browse Source

change display services style

pull/6/head
Sun 4 years ago
parent
commit
239a505be4
  1. BIN
      assets/logo/logo_assistant.png
  2. BIN
      assets/logo/logo_esse.jpg
  3. BIN
      assets/logo/logo_files.png
  4. 18
      lib/apps/assistant/page.dart
  5. 5
      lib/apps/chat/list.dart
  6. 2
      lib/apps/chat/provider.dart
  7. 5
      lib/apps/file/page.dart
  8. 87
      lib/apps/service/list.dart
  9. 52
      lib/apps/service/models.dart
  10. 8
      lib/l10n/localizations.dart
  11. 14
      lib/l10n/localizations_en.dart
  12. 14
      lib/l10n/localizations_zh.dart
  13. 109
      lib/pages/home.dart
  14. 27
      lib/provider.dart
  15. 57
      lib/widgets/default_home_show.dart
  16. 3
      pubspec.yaml
  17. 4
      src/apps/chat/models.rs

BIN
assets/logo/logo_assistant.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

BIN
assets/logo/logo_esse.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

BIN
assets/logo/logo_files.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

18
lib/apps/assistant/page.dart

@ -19,14 +19,26 @@ import 'package:esse/apps/assistant/provider.dart';
import 'package:esse/apps/assistant/message.dart'; import 'package:esse/apps/assistant/message.dart';
import 'package:esse/apps/assistant/answer.dart'; import 'package:esse/apps/assistant/answer.dart';
class AssistantPage extends StatefulWidget { class AssistantPage extends StatelessWidget {
const AssistantPage({Key key}) : super(key: key); const AssistantPage({Key key}) : super(key: key);
@override @override
_AssistantPageState createState() => _AssistantPageState(); Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: AssistantDetail(),
));
}
}
class AssistantDetail extends StatefulWidget {
const AssistantDetail({Key key}) : super(key: key);
@override
_AssistantDetailState createState() => _AssistantDetailState();
} }
class _AssistantPageState extends State<AssistantPage> { class _AssistantDetailState extends State<AssistantDetail> {
TextEditingController textController = TextEditingController(); TextEditingController textController = TextEditingController();
FocusNode textFocus = FocusNode(); FocusNode textFocus = FocusNode();
bool emojiShow = false; bool emojiShow = false;

5
lib/apps/chat/list.dart

@ -23,11 +23,10 @@ class _ChatListState extends State<ChatList> {
final friends = provider.friends; final friends = provider.friends;
final chatKeys = provider.orderKeys; final chatKeys = provider.orderKeys;
return Expanded( return ListView.builder(
child: ListView.builder(
itemCount: chatKeys.length, itemCount: chatKeys.length,
itemBuilder: (BuildContext ctx, int index) => ListChat(friend: friends[chatKeys[index]]), itemBuilder: (BuildContext ctx, int index) => ListChat(friend: friends[chatKeys[index]]),
)); );
} }
} }

2
lib/apps/chat/provider.dart

@ -58,6 +58,7 @@ class ChatProvider extends ChangeNotifier {
this.orderKeys.clear(); this.orderKeys.clear();
this.requests.clear(); this.requests.clear();
this.activedMessages.clear(); this.activedMessages.clear();
this.topKeys.clear();
} }
updateActived() { updateActived() {
@ -65,6 +66,7 @@ class ChatProvider extends ChangeNotifier {
// load friends. // load friends.
rpc.send('chat-friend-list', []); rpc.send('chat-friend-list', []);
notifyListeners();
} }
updateActivedFriend(int id) { updateActivedFriend(int id) {

5
lib/apps/file/page.dart

@ -84,11 +84,10 @@ class _FolderListState extends State<FolderList> {
final color = Theme.of(context).colorScheme; final color = Theme.of(context).colorScheme;
final isDesktop = isDisplayDesktop(context); final isDesktop = isDisplayDesktop(context);
return Expanded( return ListView.builder(
child: ListView.builder(
itemCount: FILE_DIRECTORY.length, itemCount: FILE_DIRECTORY.length,
itemBuilder: (BuildContext ctx, int index) => item(index, color, isDesktop), itemBuilder: (BuildContext ctx, int index) => item(index, color, isDesktop),
)); );
} }
} }

87
lib/apps/service/list.dart

@ -5,8 +5,16 @@ import 'package:esse/utils/adaptive.dart';
import 'package:esse/l10n/localizations.dart'; import 'package:esse/l10n/localizations.dart';
import 'package:esse/provider.dart'; import 'package:esse/provider.dart';
import 'package:esse/apps/service/models.dart';
import 'package:esse/apps/assistant/page.dart'; import 'package:esse/apps/assistant/page.dart';
import 'package:esse/apps/assistant/provider.dart'; import 'package:esse/apps/assistant/provider.dart';
import 'package:esse/apps/assistant/models.dart';
import 'package:esse/apps/file/page.dart';
const List<InnerService> INNER_SERVICES = [
InnerService.Files,
InnerService.Assistant,
];
class ServiceList extends StatefulWidget { class ServiceList extends StatefulWidget {
const ServiceList({Key key}) : super(key: key); const ServiceList({Key key}) : super(key: key);
@ -18,34 +26,60 @@ class ServiceList extends StatefulWidget {
class _ServiceListState extends State<ServiceList> { class _ServiceListState extends State<ServiceList> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final serviceKeys = [1]; final lang = AppLocalizations.of(context);
final services = {}; final isDesktop = isDisplayDesktop(context);
return Expanded( return Column(
child: ListView.builder( children: [
itemCount: serviceKeys.length, Column(
itemBuilder: (BuildContext ctx, int index) => _ListService(), children: INNER_SERVICES.map((v) {
)); final params = v.params(lang);
return ListInnerService(
name: params[0],
bio: params[1],
logo: params[2],
callback: () => v.callback(context, isDesktop, lang),
isDesktop: isDesktop,
);
}).toList()
),
// Expanded(
// child: ListView.builder(
// itemCount: serviceKeys.length,
// itemBuilder: (BuildContext ctx, int index) => _ListService(),
// )),
]
);
} }
} }
class _ListService extends StatelessWidget { class ListInnerService extends StatelessWidget {
const _ListService({Key key}) : super(key: key); final String name;
final String bio;
final String logo;
final Function callback;
final bool isDesktop;
const ListInnerService({Key key,
this.name, this.bio, this.logo, this.callback, this.isDesktop
}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final color = Theme.of(context).colorScheme;
final lang = AppLocalizations.of(context);
final isDesktop = isDisplayDesktop(context);
return GestureDetector( return GestureDetector(
behavior: HitTestBehavior.opaque, behavior: HitTestBehavior.opaque,
onTap: () { onTap: () {
final widget = AssistantPage(); final widgets = this.callback();
if (isDesktop) { if (widgets != null) {
Provider.of<AccountProvider>(context, listen: false).updateActivedApp(widget); if (this.isDesktop) {
Provider.of<AccountProvider>(context, listen: false).updateActivedApp(widgets[0], widgets[1], widgets[2]);
} else {
if (widgets[2] != null) {
Provider.of<AccountProvider>(context, listen: false).updateActivedApp(null, widgets[1], widgets[2]);
} else { } else {
Navigator.push(context, MaterialPageRoute(builder: (_) => widget)); Navigator.push(context, MaterialPageRoute(builder: (_) => widgets[0]));
}
}
} }
}, },
child: Container( child: Container(
@ -55,16 +89,16 @@ class _ListService extends StatelessWidget {
Container( Container(
width: 45.0, width: 45.0,
height: 45.0, height: 45.0,
padding: EdgeInsets.all(6.0),
margin: const EdgeInsets.only(left: 20.0, right: 15.0), margin: const EdgeInsets.only(left: 20.0, right: 15.0),
decoration: BoxDecoration( decoration: BoxDecoration(
image: DecorationImage( borderRadius: BorderRadius.circular(15.0),
image: AssetImage('assets/logo/logo_esse.jpg'),
fit: BoxFit.cover,
), ),
borderRadius: BorderRadius.circular(15.0) child: Image.asset(this.logo),
), ),
), this.bio == null
Expanded( ? Text(this.name, style: TextStyle(fontSize: 16.0))
: Expanded(
child: Container( child: Container(
height: 55.0, height: 55.0,
child: Column( child: Column(
@ -72,15 +106,12 @@ class _ListService extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Expanded( Expanded(
child: Text('Jarvis', child: Text(this.name, maxLines: 1,
maxLines: 1,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
style: TextStyle(fontSize: 16.0)) style: TextStyle(fontSize: 16.0))
), ),
SizedBox(height: 5.0),
Expanded( Expanded(
child: Text(lang.robotJarvis, child: Text(this.bio, maxLines: 1,
maxLines: 1,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
style: const TextStyle(color: Color(0xFFADB0BB), fontSize: 12.0)), style: const TextStyle(color: Color(0xFFADB0BB), fontSize: 12.0)),
), ),

52
lib/apps/service/models.dart

@ -0,0 +1,52 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:esse/l10n/localizations.dart';
import 'package:esse/provider.dart';
import 'package:esse/apps/assistant/page.dart';
import 'package:esse/apps/file/page.dart';
enum InnerService {
Files,
Assistant,
}
extension InnerServiceExtension on InnerService {
List<String> params(AppLocalizations lang) {
switch (this) {
case InnerService.Files:
return [lang.files, lang.filesBio, 'assets/logo/logo_files.png'];
case InnerService.Assistant:
return [lang.assistant, lang.assistantBio, 'assets/logo/logo_assistant.png'];
}
}
void callback(context, isDesktop, lang) {
Widget coreWidget = null;
String listTitle = null;
Widget listHome = null;
if (isDesktop) {
switch (this) {
case InnerService.Files:
listTitle = lang.files;
listHome = FolderList();
break;
case InnerService.Assistant:
coreWidget = AssistantDetail();
break;
}
Provider.of<AccountProvider>(context, listen: false).updateActivedApp(coreWidget, listTitle, listHome);
} else {
switch (this) {
case InnerService.Files:
Provider.of<AccountProvider>(context, listen: false).updateActivedApp(null, lang.files, FolderList());
break;
case InnerService.Assistant:
Navigator.push(context, MaterialPageRoute(builder: (_) => AssistantPage()));
break;
}
}
}
}

8
lib/l10n/localizations.dart

@ -77,7 +77,6 @@ abstract class AppLocalizations {
String get delete; String get delete;
String get open; String get open;
String get unknown; String get unknown;
String get robotJarvis;
// theme // theme
String get themeDark; String get themeDark;
@ -106,7 +105,6 @@ abstract class AppLocalizations {
String get addGroup; String get addGroup;
String get chats; String get chats;
String get groups; String get groups;
String get files;
String get devices; String get devices;
String get nightly; String get nightly;
String get scan; String get scan;
@ -155,6 +153,12 @@ abstract class AppLocalizations {
String get donate; String get donate;
String get website; String get website;
String get email; String get email;
// services
String get files;
String get filesBio;
String get assistant;
String get assistantBio;
} }
class _AppLocalizationsDelegate class _AppLocalizationsDelegate

14
lib/l10n/localizations_en.dart

@ -78,8 +78,6 @@ class AppLocalizationsEn extends AppLocalizations {
String get open => 'Open'; String get open => 'Open';
@override @override
String get unknown => 'Unknown'; String get unknown => 'Unknown';
@override
String get robotJarvis => 'Jarvis is a robot, only belongs to you.';
// theme // theme
@override @override
@ -129,8 +127,6 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get groups => 'Services'; String get groups => 'Services';
@override @override
String get files => 'Files';
@override
String get devices => 'Devices'; String get devices => 'Devices';
@override @override
String get nightly => 'Night Mode'; String get nightly => 'Night Mode';
@ -222,4 +218,14 @@ class AppLocalizationsEn extends AppLocalizations {
String get website => 'Website'; String get website => 'Website';
@override @override
String get email => 'Email'; String get email => 'Email';
// services
@override
String get files => 'Files';
@override
String get filesBio => 'Sync & manager files between devices';
@override
String get assistant => 'Jarvis';
@override
String get assistantBio => 'Jarvis is a robot, only belongs to you.';
} }

14
lib/l10n/localizations_zh.dart

@ -78,8 +78,6 @@ class AppLocalizationsZh extends AppLocalizations {
String get open => '打开'; String get open => '打开';
@override @override
String get unknown => '未知'; String get unknown => '未知';
@override
String get robotJarvis => 'Jarvis 是个机器人,只属于你。';
// theme // theme
@override @override
@ -129,8 +127,6 @@ class AppLocalizationsZh extends AppLocalizations {
@override @override
String get groups => '服务列表'; String get groups => '服务列表';
@override @override
String get files => '文件管理';
@override
String get devices => '关联设备'; String get devices => '关联设备';
@override @override
String get nightly => '夜间模式'; String get nightly => '夜间模式';
@ -222,4 +218,14 @@ class AppLocalizationsZh extends AppLocalizations {
String get website => '官网'; String get website => '官网';
@override @override
String get email => '联系邮件'; String get email => '联系邮件';
// services
@override
String get files => '文件管理';
@override
String get filesBio => '同步和管理各设备上的文件';
@override
String get assistant => 'Jarvis';
@override
String get assistantBio => 'Jarvis 是个机器人,只属于你。';
} }

109
lib/pages/home.dart

@ -31,6 +31,7 @@ import 'package:esse/apps/chat/add.dart';
import 'package:esse/apps/file/page.dart'; import 'package:esse/apps/file/page.dart';
import 'package:esse/apps/service/list.dart'; import 'package:esse/apps/service/list.dart';
import 'package:esse/apps/service/add.dart'; import 'package:esse/apps/service/add.dart';
import 'package:esse/apps/assistant/page.dart';
class HomePage extends StatelessWidget { class HomePage extends StatelessWidget {
static GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>(); static GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
@ -89,7 +90,6 @@ class HomePage extends StatelessWidget {
class HomeList extends StatefulWidget { class HomeList extends StatefulWidget {
final GlobalKey<ScaffoldState> _scaffoldKey; final GlobalKey<ScaffoldState> _scaffoldKey;
HomeList(this._scaffoldKey); HomeList(this._scaffoldKey);
@override @override
@ -97,11 +97,6 @@ class HomeList extends StatefulWidget {
} }
class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin { class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin {
bool isShowHome = true;
bool isShowFriends = false;
bool isShowGroups = false;
bool isShowFiles = false;
bool isProcess = true; bool isProcess = true;
AnimationController controller; AnimationController controller;
@ -125,43 +120,7 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin
super.dispose(); super.dispose();
} }
showHome() { _scanQr(bool isDesktop) {
setState(() {
this.isShowHome = true;
this.isShowFriends = false;
this.isShowGroups = false;
this.isShowFiles = false;
});
}
showFriends() {
setState(() {
this.isShowHome = false;
this.isShowFriends = true;
this.isShowGroups = false;
this.isShowFiles = false;
});
}
showGroups() {
setState(() {
this.isShowHome = false;
this.isShowFriends = false;
this.isShowGroups = true;
this.isShowFiles = false;
});
}
showFiles() {
setState(() {
this.isShowHome = false;
this.isShowFriends = false;
this.isShowGroups = false;
this.isShowFiles = true;
});
}
scanQr(bool isDesktop) {
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
@ -221,14 +180,7 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin
), ),
Expanded( Expanded(
child: Center( child: Center(
child: Text( child: Text(provider.homeShowTitle, style: TextStyle(fontWeight: FontWeight.bold)),
isShowFriends
? lang.chats
: (isShowGroups
? lang.groups
: (isShowFiles ? lang.files : '')),
style: TextStyle(fontWeight: FontWeight.bold),
),
)), )),
Icon(Icons.search_rounded, color: color.primary), Icon(Icons.search_rounded, color: color.primary),
const SizedBox(width: 20.0), const SizedBox(width: 20.0),
@ -237,7 +189,7 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin
Container( Container(
width: 28.0, width: 28.0,
height: 28.0, height: 28.0,
child: this.isShowHome child: provider.homeShowTitle == ''
? PopupMenuButton<int>( ? PopupMenuButton<int>(
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15)), borderRadius: BorderRadius.circular(15)),
@ -246,7 +198,7 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin
color: color.primary), color: color.primary),
onSelected: (int value) { onSelected: (int value) {
if (value == 0) { if (value == 0) {
scanQr(isDesktop); _scanQr(isDesktop);
} else if (value == 1) { } else if (value == 1) {
final widget = ChatAddPage(); final widget = ChatAddPage();
if (isDesktop) { if (isDesktop) {
@ -254,10 +206,7 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin
} else { } else {
provider.systemAppFriendAddNew = false; provider.systemAppFriendAddNew = false;
setState(() {}); setState(() {});
Navigator.push( Navigator.push(context, MaterialPageRoute(builder: (_) => widget));
context,
MaterialPageRoute(
builder: (_) => widget));
} }
} else if (value == 2) { } else if (value == 2) {
final widget = GroupAddPage(); final widget = GroupAddPage();
@ -266,10 +215,7 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin
} else { } else {
provider.systemAppFriendAddNew = false; provider.systemAppFriendAddNew = false;
setState(() {}); setState(() {});
Navigator.push( Navigator.push(context, MaterialPageRoute(builder: (_) => widget));
context,
MaterialPageRoute(
builder: (_) => widget));
} }
} else if (value == 3) { } else if (value == 3) {
showShadowDialog( showShadowDialog(
@ -279,7 +225,8 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin
UserInfo( UserInfo(
id: provider.activedAccount.id, id: provider.activedAccount.id,
name: provider.activedAccount.name, name: provider.activedAccount.name,
addr: Global.addr)); addr: Global.addr)
);
} }
}, },
itemBuilder: (context) { itemBuilder: (context) {
@ -293,12 +240,9 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin
]; ];
}, },
) )
: GestureDetector( : GestureDetector(onTap: () => provider.updateToHome(),
onTap: showHome, child: Icon(Icons.home_outlined, color: color.primary))),
child: Icon(Icons.home_outlined, if (provider.systemAppFriendAddNew || provider.systemAppGroupAddNew)
color: color.primary))),
if (provider.systemAppFriendAddNew ||
provider.systemAppGroupAddNew)
Positioned( Positioned(
top: 0, top: 0,
right: 0, right: 0,
@ -323,34 +267,9 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin
) )
: const Divider(height: 1.0, color: Color(0x40ADB0BB)), : const Divider(height: 1.0, color: Color(0x40ADB0BB)),
const SizedBox(height: 5.0), const SizedBox(height: 5.0),
if (this.isShowHome)
Column(children: [
ListSystemApp(
name: lang.chats,
icon: Icons.people_rounded,
callback: () => showFriends()),
ListSystemApp(
name: lang.groups,
icon: Icons.grid_view_rounded,
callback: () => showGroups()),
ListSystemApp(
name: lang.files,
icon: Icons.folder_rounded,
callback: () => showFiles()),
const SizedBox(height: 5.0),
const Divider(height: 1.0, color: Color(0x40ADB0BB)),
const SizedBox(height: 5.0),
]),
if (this.isShowHome)
Expanded( Expanded(
child: ListView.builder( child: provider.homeShowWidget,
itemCount: chatTops.length, )
itemBuilder: (BuildContext ctx, int index) => ListChat(
friend: friends[chatTops.keys.elementAt(index)]),
)),
if (this.isShowFriends) ChatList(),
if (this.isShowGroups) ServiceList(),
if (this.isShowFiles) FolderList(),
], ],
), ),
); );

27
lib/provider.dart

@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
import 'package:esse/account.dart'; import 'package:esse/account.dart';
import 'package:esse/utils/logined_cache.dart'; import 'package:esse/utils/logined_cache.dart';
import 'package:esse/widgets/default_core_show.dart'; import 'package:esse/widgets/default_core_show.dart';
import 'package:esse/widgets/default_home_show.dart';
import 'package:esse/global.dart'; import 'package:esse/global.dart';
import 'package:esse/rpc.dart'; import 'package:esse/rpc.dart';
@ -23,10 +24,15 @@ class AccountProvider extends ChangeNotifier {
/// current user's did. /// current user's did.
String get id => this.activedAccount.id; String get id => this.activedAccount.id;
String homeShowTitle = '';
Widget defaultListShow = DefaultHomeShow();
Widget currentListShow = null;
Widget coreShowWidget = DefaultCoreShow(); Widget coreShowWidget = DefaultCoreShow();
bool systemAppFriendAddNew = false; bool systemAppFriendAddNew = false;
bool systemAppGroupAddNew = false; bool systemAppGroupAddNew = false;
Widget get homeShowWidget => this.currentListShow ?? this.defaultListShow;
AccountProvider() { AccountProvider() {
// rpc notice when account not actived. // rpc notice when account not actived.
rpc.addNotice(_accountNotice); rpc.addNotice(_accountNotice);
@ -86,8 +92,8 @@ class AccountProvider extends ChangeNotifier {
this.clearActivedAccount(); this.clearActivedAccount();
this.activedAccountId = gid; this.activedAccountId = gid;
this.activedAccount.hasNew = false; this.activedAccount.hasNew = false;
this.coreShowWidget = DefaultCoreShow();
rpc.send('friend-list', []); this.currentListShow = null;
if (!this.activedAccount.online) { if (!this.activedAccount.online) {
this.activedAccount.online = true; this.activedAccount.online = true;
@ -103,6 +109,7 @@ class AccountProvider extends ChangeNotifier {
logout() { logout() {
this.accounts.clear(); this.accounts.clear();
this.clearActivedAccount(); this.clearActivedAccount();
this.currentListShow = null;
rpc.send('account-logout', []); rpc.send('account-logout', []);
clearLogined(); clearLogined();
} }
@ -130,8 +137,20 @@ class AccountProvider extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
updateActivedApp(Widget widget) { updateToHome() {
this.coreShowWidget = widget; this.homeShowTitle = '';
this.currentListShow = null;
notifyListeners();
}
updateActivedApp([Widget coreWidget, String title, Widget homeWidget]) {
if (homeWidget != null && title != null) {
this.homeShowTitle = title;
this.currentListShow = homeWidget;
}
if (coreWidget != null) {
this.coreShowWidget = coreWidget;
}
this.systemAppFriendAddNew = false; this.systemAppFriendAddNew = false;
notifyListeners(); notifyListeners();
} }

57
lib/widgets/default_home_show.dart

@ -0,0 +1,57 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:esse/l10n/localizations.dart';
import 'package:esse/utils/adaptive.dart';
import 'package:esse/widgets/list_system_app.dart';
import 'package:esse/options.dart';
import 'package:esse/provider.dart';
import 'package:esse/apps/service/list.dart';
import 'package:esse/apps/service/models.dart';
import 'package:esse/apps/chat/provider.dart';
import 'package:esse/apps/chat/list.dart';
class DefaultHomeShow extends StatelessWidget {
const DefaultHomeShow({Key key}): super(key: key);
@override
Widget build(BuildContext context) {
final isDesktop = isDisplayDesktop(context);
final lang = AppLocalizations.of(context);
final chatProvider = context.watch<ChatProvider>();
final chatTops = chatProvider.topKeys;
final friends = chatProvider.friends;
return Column(children: [
ListSystemApp(name: lang.chats, icon: Icons.people_rounded,
callback: () => Provider.of<AccountProvider>(context, listen: false).updateActivedApp(
null, lang.chats, ChatList())),
ListSystemApp(name: lang.groups, icon: Icons.grid_view_rounded,
callback: () => Provider.of<AccountProvider>(context, listen: false).updateActivedApp(
null, lang.chats, ServiceList())),
const SizedBox(height: 5.0),
const Divider(height: 1.0, color: Color(0x40ADB0BB)),
const SizedBox(height: 5.0),
Column(
children: INNER_SERVICES.map((v) {
final params = v.params(lang);
return ListInnerService(
name: params[0],
bio: params[1],
logo: params[2],
callback: () => v.callback(context, isDesktop, lang),
isDesktop: isDesktop,
);
}).toList()
),
Expanded(
child: ListView.builder(
itemCount: chatTops.length,
itemBuilder: (BuildContext ctx, int index) => ListChat(
friend: friends[chatTops.keys.elementAt(index)]),
),
)
]);
}
}

3
pubspec.yaml

@ -70,7 +70,8 @@ flutter:
- assets/logo/logo_dark.png - assets/logo/logo_dark.png
- assets/logo/logo_light.png - assets/logo/logo_light.png
- assets/logo/logo_40.jpg - assets/logo/logo_40.jpg
- assets/logo/logo_esse.jpg - assets/logo/logo_assistant.png
- assets/logo/logo_files.png
- assets/images/background_light.jpg - assets/images/background_light.jpg
- assets/images/background_dark.jpg - assets/images/background_dark.jpg
- assets/images/image_missing.png - assets/images/image_missing.png

4
src/apps/chat/models.rs

@ -491,7 +491,9 @@ impl Request {
} }
pub fn to_friend(self) -> Friend { pub fn to_friend(self) -> Friend {
Friend::new(self.gid, self.addr, self.name, self.remark) let mut friend = Friend::new(self.gid, self.addr, self.name, self.remark);
friend.is_top = true; // default set to top page.
friend
} }
/// here is zero-copy and unwrap is safe. checked. /// here is zero-copy and unwrap is safe. checked.

Loading…
Cancel
Save