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. 9
      lib/apps/chat/list.dart
  6. 2
      lib/apps/chat/provider.dart
  7. 9
      lib/apps/file/page.dart
  8. 89
      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. 287
      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'; @@ -19,14 +19,26 @@ import 'package:esse/apps/assistant/provider.dart';
import 'package:esse/apps/assistant/message.dart';
import 'package:esse/apps/assistant/answer.dart';
class AssistantPage extends StatefulWidget {
class AssistantPage extends StatelessWidget {
const AssistantPage({Key key}) : super(key: key);
@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();
FocusNode textFocus = FocusNode();
bool emojiShow = false;

9
lib/apps/chat/list.dart

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

2
lib/apps/chat/provider.dart

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

9
lib/apps/file/page.dart

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

89
lib/apps/service/list.dart

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

52
lib/apps/service/models.dart

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

14
lib/l10n/localizations_en.dart

@ -78,8 +78,6 @@ class AppLocalizationsEn extends AppLocalizations { @@ -78,8 +78,6 @@ class AppLocalizationsEn extends AppLocalizations {
String get open => 'Open';
@override
String get unknown => 'Unknown';
@override
String get robotJarvis => 'Jarvis is a robot, only belongs to you.';
// theme
@override
@ -129,8 +127,6 @@ class AppLocalizationsEn extends AppLocalizations { @@ -129,8 +127,6 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get groups => 'Services';
@override
String get files => 'Files';
@override
String get devices => 'Devices';
@override
String get nightly => 'Night Mode';
@ -222,4 +218,14 @@ class AppLocalizationsEn extends AppLocalizations { @@ -222,4 +218,14 @@ class AppLocalizationsEn extends AppLocalizations {
String get website => 'Website';
@override
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 { @@ -78,8 +78,6 @@ class AppLocalizationsZh extends AppLocalizations {
String get open => '打开';
@override
String get unknown => '未知';
@override
String get robotJarvis => 'Jarvis 是个机器人,只属于你。';
// theme
@override
@ -129,8 +127,6 @@ class AppLocalizationsZh extends AppLocalizations { @@ -129,8 +127,6 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get groups => '服务列表';
@override
String get files => '文件管理';
@override
String get devices => '关联设备';
@override
String get nightly => '夜间模式';
@ -222,4 +218,14 @@ class AppLocalizationsZh extends AppLocalizations { @@ -222,4 +218,14 @@ class AppLocalizationsZh extends AppLocalizations {
String get website => '官网';
@override
String get email => '联系邮件';
// services
@override
String get files => '文件管理';
@override
String get filesBio => '同步和管理各设备上的文件';
@override
String get assistant => 'Jarvis';
@override
String get assistantBio => 'Jarvis 是个机器人,只属于你。';
}

287
lib/pages/home.dart

@ -31,6 +31,7 @@ import 'package:esse/apps/chat/add.dart'; @@ -31,6 +31,7 @@ import 'package:esse/apps/chat/add.dart';
import 'package:esse/apps/file/page.dart';
import 'package:esse/apps/service/list.dart';
import 'package:esse/apps/service/add.dart';
import 'package:esse/apps/assistant/page.dart';
class HomePage extends StatelessWidget {
static GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
@ -89,7 +90,6 @@ class HomePage extends StatelessWidget { @@ -89,7 +90,6 @@ class HomePage extends StatelessWidget {
class HomeList extends StatefulWidget {
final GlobalKey<ScaffoldState> _scaffoldKey;
HomeList(this._scaffoldKey);
@override
@ -97,11 +97,6 @@ class HomeList extends StatefulWidget { @@ -97,11 +97,6 @@ class HomeList extends StatefulWidget {
}
class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin {
bool isShowHome = true;
bool isShowFriends = false;
bool isShowGroups = false;
bool isShowFiles = false;
bool isProcess = true;
AnimationController controller;
@ -125,70 +120,34 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin @@ -125,70 +120,34 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin
super.dispose();
}
showHome() {
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) {
_scanQr(bool isDesktop) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => QRScan(callback: (isOk, app, params) {
Navigator.of(context).pop();
if (app == 'add-friend' && params.length == 3) {
final id = params[0];
final addr = params[1];
final name = params[2];
final widget = ChatAddPage(id: id, addr: addr, name: name);
Provider.of<AccountProvider>(context, listen: false)
.systemAppGroupAddNew = false;
if (isDesktop) {
Provider.of<AccountProvider>(context, listen: false)
.updateActivedApp(widget);
} else {
Navigator.push(
context, MaterialPageRoute(builder: (_) => widget));
}
} else if (app == 'distribute' && params.length == 4) {
final _name = params[0];
final id = params[1];
final addr = params[2];
final _mnemonicWords = params[3];
Provider.of<DeviceProvider>(context, listen: false).connect(addr);
}
})));
context,
MaterialPageRoute(
builder: (context) => QRScan(callback: (isOk, app, params) {
Navigator.of(context).pop();
if (app == 'add-friend' && params.length == 3) {
final id = params[0];
final addr = params[1];
final name = params[2];
final widget = ChatAddPage(id: id, addr: addr, name: name);
Provider.of<AccountProvider>(context, listen: false)
.systemAppGroupAddNew = false;
if (isDesktop) {
Provider.of<AccountProvider>(context, listen: false)
.updateActivedApp(widget);
} else {
Navigator.push(
context, MaterialPageRoute(builder: (_) => widget));
}
} else if (app == 'distribute' && params.length == 4) {
final _name = params[0];
final id = params[1];
final addr = params[2];
final _mnemonicWords = params[3];
Provider.of<DeviceProvider>(context, listen: false).connect(addr);
}
})));
}
@override
@ -221,94 +180,79 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin @@ -221,94 +180,79 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin
),
Expanded(
child: Center(
child: Text(
isShowFriends
? lang.chats
: (isShowGroups
? lang.groups
: (isShowFiles ? lang.files : '')),
style: TextStyle(fontWeight: FontWeight.bold),
),
child: Text(provider.homeShowTitle, style: TextStyle(fontWeight: FontWeight.bold)),
)),
Icon(Icons.search_rounded, color: color.primary),
const SizedBox(width: 20.0),
Stack(
children: <Widget>[
Container(
width: 28.0,
height: 28.0,
child: this.isShowHome
? PopupMenuButton<int>(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15)),
color: const Color(0xFFEDEDED),
child: Icon(Icons.add_circle_outline_rounded,
color: color.primary),
onSelected: (int value) {
if (value == 0) {
scanQr(isDesktop);
} else if (value == 1) {
final widget = ChatAddPage();
if (isDesktop) {
provider.updateActivedApp(widget);
} else {
provider.systemAppFriendAddNew = false;
setState(() {});
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => widget));
}
} else if (value == 2) {
final widget = GroupAddPage();
if (isDesktop) {
provider.updateActivedApp(widget);
} else {
provider.systemAppFriendAddNew = false;
setState(() {});
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => widget));
}
} else if (value == 3) {
showShadowDialog(
context,
Icons.info,
lang.info,
UserInfo(
id: provider.activedAccount.id,
name: provider.activedAccount.name,
addr: Global.addr));
}
},
itemBuilder: (context) {
return <PopupMenuEntry<int>>[
_menuItem(0, Icons.qr_code_scanner_rounded, lang.scan),
_menuItem(1, Icons.person_add_rounded, lang.addFriend,
provider.systemAppFriendAddNew),
_menuItem(2, Icons.add_business_rounded, lang.addGroup,
provider.systemAppGroupAddNew),
_menuItem(3, Icons.qr_code_rounded, lang.myQrcode),
];
},
)
: GestureDetector(
onTap: showHome,
child: Icon(Icons.home_outlined,
color: color.primary))),
if (provider.systemAppFriendAddNew ||
provider.systemAppGroupAddNew)
Positioned(
top: 0,
right: 0,
child: Container(
width: 8.0,
height: 8.0,
decoration: BoxDecoration(
color: Colors.red,
shape: BoxShape.circle,
))),
width: 28.0,
height: 28.0,
child: provider.homeShowTitle == ''
? PopupMenuButton<int>(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15)),
color: const Color(0xFFEDEDED),
child: Icon(Icons.add_circle_outline_rounded,
color: color.primary),
onSelected: (int value) {
if (value == 0) {
_scanQr(isDesktop);
} else if (value == 1) {
final widget = ChatAddPage();
if (isDesktop) {
provider.updateActivedApp(widget);
} else {
provider.systemAppFriendAddNew = false;
setState(() {});
Navigator.push(context, MaterialPageRoute(builder: (_) => widget));
}
} else if (value == 2) {
final widget = GroupAddPage();
if (isDesktop) {
provider.updateActivedApp(widget);
} else {
provider.systemAppFriendAddNew = false;
setState(() {});
Navigator.push(context, MaterialPageRoute(builder: (_) => widget));
}
} else if (value == 3) {
showShadowDialog(
context,
Icons.info,
lang.info,
UserInfo(
id: provider.activedAccount.id,
name: provider.activedAccount.name,
addr: Global.addr)
);
}
},
itemBuilder: (context) {
return <PopupMenuEntry<int>>[
_menuItem(0, Icons.qr_code_scanner_rounded, lang.scan),
_menuItem(1, Icons.person_add_rounded, lang.addFriend,
provider.systemAppFriendAddNew),
_menuItem(2, Icons.add_business_rounded, lang.addGroup,
provider.systemAppGroupAddNew),
_menuItem(3, Icons.qr_code_rounded, lang.myQrcode),
];
},
)
: GestureDetector(onTap: () => provider.updateToHome(),
child: Icon(Icons.home_outlined, color: color.primary))),
if (provider.systemAppFriendAddNew || provider.systemAppGroupAddNew)
Positioned(
top: 0,
right: 0,
child: Container(
width: 8.0,
height: 8.0,
decoration: BoxDecoration(
color: Colors.red,
shape: BoxShape.circle,
))),
],
),
],
@ -316,41 +260,16 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin @@ -316,41 +260,16 @@ class _HomeListState extends State<HomeList> with SingleTickerProviderStateMixin
),
const SizedBox(height: 10.0),
isProcess
? LinearProgressIndicator(
backgroundColor: Color(0x40ADB0BB),
valueColor: AlwaysStoppedAnimation(color.primary),
value: controller.value,
)
: const Divider(height: 1.0, color: Color(0x40ADB0BB)),
? LinearProgressIndicator(
backgroundColor: Color(0x40ADB0BB),
valueColor: AlwaysStoppedAnimation(color.primary),
value: controller.value,
)
: const Divider(height: 1.0, color: Color(0x40ADB0BB)),
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(
child: ListView.builder(
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(),
child: provider.homeShowWidget,
)
],
),
);

27
lib/provider.dart

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

57
lib/widgets/default_home_show.dart

@ -0,0 +1,57 @@ @@ -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: @@ -70,7 +70,8 @@ flutter:
- assets/logo/logo_dark.png
- assets/logo/logo_light.png
- 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_dark.jpg
- assets/images/image_missing.png

4
src/apps/chat/models.rs

@ -491,7 +491,9 @@ impl Request { @@ -491,7 +491,9 @@ impl Request {
}
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.

Loading…
Cancel
Save