mirror of
https://gitlab.com/famedly/fluffychat.git
synced 2025-02-22 17:20:43 +01:00
fix: Bottombar design
This commit is contained in:
parent
31815a2fc2
commit
8225c00e02
@ -8,6 +8,8 @@ import 'app_config.dart';
|
|||||||
|
|
||||||
abstract class FluffyThemes {
|
abstract class FluffyThemes {
|
||||||
static const double columnWidth = 360.0;
|
static const double columnWidth = 360.0;
|
||||||
|
static bool isColumnMode(BuildContext context) =>
|
||||||
|
MediaQuery.of(context).size.width > columnWidth * 2;
|
||||||
|
|
||||||
static const fallbackTextStyle =
|
static const fallbackTextStyle =
|
||||||
TextStyle(fontFamily: 'NotoSans', fontFamilyFallback: ['NotoEmoji']);
|
TextStyle(fontFamily: 'NotoSans', fontFamilyFallback: ['NotoEmoji']);
|
||||||
|
@ -18,7 +18,6 @@ import 'package:future_loading_dialog/future_loading_dialog.dart';
|
|||||||
import 'package:universal_html/html.dart' as html;
|
import 'package:universal_html/html.dart' as html;
|
||||||
import 'package:vrouter/vrouter.dart';
|
import 'package:vrouter/vrouter.dart';
|
||||||
|
|
||||||
import 'widgets/layouts/wait_for_login.dart';
|
|
||||||
import 'widgets/lock_screen.dart';
|
import 'widgets/lock_screen.dart';
|
||||||
import 'widgets/matrix.dart';
|
import 'widgets/matrix.dart';
|
||||||
import 'config/themes.dart';
|
import 'config/themes.dart';
|
||||||
@ -35,7 +34,7 @@ void main() async {
|
|||||||
Zone.current.handleUncaughtError(details.exception, details.stack);
|
Zone.current.handleUncaughtError(details.exception, details.stack);
|
||||||
|
|
||||||
final clients = await ClientManager.getClients();
|
final clients = await ClientManager.getClients();
|
||||||
|
await Future.wait(clients.map((client) => client.init()));
|
||||||
if (PlatformInfos.isMobile) {
|
if (PlatformInfos.isMobile) {
|
||||||
BackgroundPush.clientOnly(clients.first);
|
BackgroundPush.clientOnly(clients.first);
|
||||||
}
|
}
|
||||||
@ -83,7 +82,15 @@ class _FluffyChatAppState extends State<FluffyChatApp> {
|
|||||||
final GlobalKey<MatrixState> _matrix = GlobalKey<MatrixState>();
|
final GlobalKey<MatrixState> _matrix = GlobalKey<MatrixState>();
|
||||||
GlobalKey<VRouterState> _router;
|
GlobalKey<VRouterState> _router;
|
||||||
bool columnMode;
|
bool columnMode;
|
||||||
String _initialUrl = '/';
|
String _initialUrl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_initialUrl =
|
||||||
|
widget.clients.any((client) => client.isLogged()) ? '/rooms' : '/home';
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return AdaptiveTheme(
|
return AdaptiveTheme(
|
||||||
@ -142,7 +149,7 @@ class _FluffyChatAppState extends State<FluffyChatApp> {
|
|||||||
context: context,
|
context: context,
|
||||||
router: _router,
|
router: _router,
|
||||||
clients: widget.clients,
|
clients: widget.clients,
|
||||||
child: WaitForInitPage(child),
|
child: child,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
@ -413,8 +413,7 @@ class ChatListController extends State<ChatList> {
|
|||||||
void setActiveClient(int i) => setState(() {
|
void setActiveClient(int i) => setState(() {
|
||||||
_activeSpaceId = null;
|
_activeSpaceId = null;
|
||||||
selectedRoomIds.clear();
|
selectedRoomIds.clear();
|
||||||
Matrix.of(context).activeClient =
|
Matrix.of(context).activeClient = i - (displayBundles ? 1 : 0);
|
||||||
i - (Matrix.of(context).hasComplexBundles ? 1 : 0);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
void setActiveBundle(String bundle) => setState(() {
|
void setActiveBundle(String bundle) => setState(() {
|
||||||
@ -464,6 +463,10 @@ class ChatListController extends State<ChatList> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool get displayBundles =>
|
||||||
|
Matrix.of(context).hasComplexBundles &&
|
||||||
|
Matrix.of(context).accountBundles.keys.length > 1;
|
||||||
|
|
||||||
void resetActiveBundle() {
|
void resetActiveBundle() {
|
||||||
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
|
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
|
||||||
setState(() {
|
setState(() {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
import 'package:async/async.dart';
|
import 'package:async/async.dart';
|
||||||
|
import 'package:fluffychat/config/themes.dart';
|
||||||
|
|
||||||
import 'package:fluffychat/widgets/avatar.dart';
|
import 'package:fluffychat/widgets/avatar.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
@ -54,7 +55,7 @@ class ChatListView extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}).toList();
|
}).toList();
|
||||||
|
|
||||||
if (Matrix.of(context).hasComplexBundles) {
|
if (controller.displayBundles) {
|
||||||
items.insert(
|
items.insert(
|
||||||
0,
|
0,
|
||||||
BottomNavigationBarItem(
|
BottomNavigationBarItem(
|
||||||
@ -292,13 +293,15 @@ class ChatListView extends StatelessWidget {
|
|||||||
scrollDirection: Axis.horizontal,
|
scrollDirection: Axis.horizontal,
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
width: max(
|
width: max(
|
||||||
MediaQuery.of(context).size.width,
|
FluffyThemes.isColumnMode(context)
|
||||||
|
? FluffyThemes.columnWidth
|
||||||
|
: MediaQuery.of(context).size.width,
|
||||||
Matrix.of(context).widget.clients.length * 84.0,
|
Matrix.of(context).widget.clients.length * 84.0,
|
||||||
),
|
),
|
||||||
child: BottomNavigationBar(
|
child: BottomNavigationBar(
|
||||||
onTap: controller.setActiveClient,
|
onTap: controller.setActiveClient,
|
||||||
currentIndex: Matrix.of(context).activeClient +
|
currentIndex: Matrix.of(context).activeClient +
|
||||||
(Matrix.of(context).hasComplexBundles ? 1 : 0),
|
(controller.displayBundles ? 1 : 0),
|
||||||
showUnselectedLabels: false,
|
showUnselectedLabels: false,
|
||||||
showSelectedLabels: true,
|
showSelectedLabels: true,
|
||||||
type: BottomNavigationBarType.shifting,
|
type: BottomNavigationBarType.shifting,
|
||||||
|
@ -7,10 +7,16 @@ import 'package:flutter/material.dart';
|
|||||||
class LoadingView extends StatelessWidget {
|
class LoadingView extends StatelessWidget {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
if (Matrix.of(context).client.loginState != null) {
|
if (Matrix.of(context)
|
||||||
|
.widget
|
||||||
|
.clients
|
||||||
|
.every((client) => client.loginState != null)) {
|
||||||
WidgetsBinding.instance.addPostFrameCallback(
|
WidgetsBinding.instance.addPostFrameCallback(
|
||||||
(_) => VRouter.of(context).to(
|
(_) => VRouter.of(context).to(
|
||||||
Matrix.of(context).client.loginState == LoginState.loggedIn
|
Matrix.of(context)
|
||||||
|
.widget
|
||||||
|
.clients
|
||||||
|
.any((client) => client.loginState == LoginState.loggedIn)
|
||||||
? '/rooms'
|
? '/rooms'
|
||||||
: '/home',
|
: '/home',
|
||||||
queryParameters: VRouter.of(context).queryParameters,
|
queryParameters: VRouter.of(context).queryParameters,
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:fluffychat/config/themes.dart';
|
import 'package:fluffychat/config/themes.dart';
|
||||||
|
import 'package:fluffychat/widgets/matrix.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class OnePageCard extends StatelessWidget {
|
class OnePageCard extends StatelessWidget {
|
||||||
@ -12,7 +13,9 @@ class OnePageCard extends StatelessWidget {
|
|||||||
static num breakpoint = FluffyThemes.columnWidth * 2;
|
static num breakpoint = FluffyThemes.columnWidth * 2;
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return MediaQuery.of(context).size.width <= breakpoint
|
final displayInCard = MediaQuery.of(context).size.width <= breakpoint &&
|
||||||
|
Matrix.of(context).client.isLogged();
|
||||||
|
return !displayInCard
|
||||||
? child
|
? child
|
||||||
: Container(
|
: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
|
@ -1,25 +0,0 @@
|
|||||||
import 'package:fluffychat/pages/views/empty_page_view.dart';
|
|
||||||
import 'package:matrix/matrix.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
|
|
||||||
import '../matrix.dart';
|
|
||||||
|
|
||||||
class WaitForInitPage extends StatelessWidget {
|
|
||||||
final Widget page;
|
|
||||||
const WaitForInitPage(this.page, {Key key}) : super(key: key);
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
if (Matrix.of(context).client.loginState == null) {
|
|
||||||
return StreamBuilder<LoginState>(
|
|
||||||
stream: Matrix.of(context).client.onLoginStateChanged.stream,
|
|
||||||
builder: (context, snapshot) {
|
|
||||||
if (!snapshot.hasData) {
|
|
||||||
return EmptyPage(loading: true);
|
|
||||||
}
|
|
||||||
return page;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return page;
|
|
||||||
}
|
|
||||||
}
|
|
@ -145,7 +145,6 @@ class MatrixState extends State<Matrix> with WidgetsBindingObserver {
|
|||||||
|
|
||||||
void _initWithStore() async {
|
void _initWithStore() async {
|
||||||
try {
|
try {
|
||||||
await Future.wait(widget.clients.map((client) => client.init()));
|
|
||||||
if (client.isLogged()) {
|
if (client.isLogged()) {
|
||||||
// TODO: Figure out how this works in multi account
|
// TODO: Figure out how this works in multi account
|
||||||
final statusMsg = await store.getItem(SettingKeys.ownStatusMessage);
|
final statusMsg = await store.getItem(SettingKeys.ownStatusMessage);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user