mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-04 04:04:18 +00:00 
			
		
		
		
	Start to build Forez main route
This commit is contained in:
		@@ -2,6 +2,10 @@ import 'package:comunic/models/conversation.dart';
 | 
			
		||||
import 'package:comunic/ui/dialogs/alert_dialog.dart';
 | 
			
		||||
import 'package:comunic/ui/routes/main_route/main_route.dart';
 | 
			
		||||
import 'package:comunic/ui/routes/main_route/page_info.dart';
 | 
			
		||||
import 'package:comunic/ui/screens/conversations_list_screen.dart';
 | 
			
		||||
import 'package:comunic/ui/widgets/safe_state.dart';
 | 
			
		||||
import 'package:comunic/ui/widgets/status_widget.dart';
 | 
			
		||||
import 'package:comunic/ui/widgets/tab_transition_widget.dart';
 | 
			
		||||
import 'package:comunic/utils/intl_utils.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
 | 
			
		||||
@@ -24,9 +28,8 @@ class _MainRouteState extends MainController {
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return Container(
 | 
			
		||||
      color: Colors.blueAccent,
 | 
			
		||||
      child: SafeArea(
 | 
			
		||||
    return StatusWidget(
 | 
			
		||||
      child: (c) => SafeArea(
 | 
			
		||||
        // Avoid OS areas
 | 
			
		||||
        child: WillPopScope(
 | 
			
		||||
          onWillPop: willPop,
 | 
			
		||||
@@ -52,14 +55,112 @@ class _MainRouteState extends MainController {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
enum _PopupMenuItems { ACTION_SETTINGS, ACTION_SIGN_OUT }
 | 
			
		||||
 | 
			
		||||
class ForezRouteBody extends StatefulWidget {
 | 
			
		||||
  @override
 | 
			
		||||
  _ForezRouteBodyState createState() => _ForezRouteBodyState();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class _ForezRouteBodyState extends State<ForezRouteBody> {
 | 
			
		||||
class _ForezRouteBodyState extends SafeState<ForezRouteBody> {
 | 
			
		||||
  @override
 | 
			
		||||
  void initState() {
 | 
			
		||||
    super.initState();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return Text("yolo");
 | 
			
		||||
    return DefaultTabController(
 | 
			
		||||
      length: _tabs.length,
 | 
			
		||||
      child: Scaffold(
 | 
			
		||||
        appBar: AppBar(
 | 
			
		||||
          title: Text("#Forez"),
 | 
			
		||||
          actions: <Widget>[_buildPopupMenuButton()],
 | 
			
		||||
          bottom: TabBar(tabs: _tabs),
 | 
			
		||||
        ),
 | 
			
		||||
        body: TabBarView(children: _tabsPages),
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Widget _buildPopupMenuButton() => PopupMenuButton<_PopupMenuItems>(
 | 
			
		||||
        itemBuilder: (c) => [
 | 
			
		||||
          PopupMenuItem(
 | 
			
		||||
            child: Text(tr("Settings")),
 | 
			
		||||
            value: _PopupMenuItems.ACTION_SETTINGS,
 | 
			
		||||
          ),
 | 
			
		||||
          PopupMenuItem(
 | 
			
		||||
            child: Text(tr("Sign out")),
 | 
			
		||||
            value: _PopupMenuItems.ACTION_SIGN_OUT,
 | 
			
		||||
          ),
 | 
			
		||||
        ],
 | 
			
		||||
        onSelected: _onMenuSelection,
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
  void _onMenuSelection(_PopupMenuItems value) {
 | 
			
		||||
    switch (value) {
 | 
			
		||||
      case _PopupMenuItems.ACTION_SETTINGS:
 | 
			
		||||
        MainController.of(context).openSettings();
 | 
			
		||||
        break;
 | 
			
		||||
      case _PopupMenuItems.ACTION_SIGN_OUT:
 | 
			
		||||
        // TODO : handle logout
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  final _list = <_Tab>[
 | 
			
		||||
    // Presence tab
 | 
			
		||||
    _Tab(
 | 
			
		||||
      icon: Icons.calendar_today,
 | 
			
		||||
      title: tr("Presence"),
 | 
			
		||||
      widget: Text("Presence"),
 | 
			
		||||
    ),
 | 
			
		||||
 | 
			
		||||
    // Conversations tab
 | 
			
		||||
    _Tab(
 | 
			
		||||
      icon: Icons.question_answer,
 | 
			
		||||
      title: tr("Conversations"),
 | 
			
		||||
      widget: ConversationsListScreen(),
 | 
			
		||||
      isUnread: (c) => StatusWidgetState.of(c).unreadConversations > 0,
 | 
			
		||||
    ),
 | 
			
		||||
 | 
			
		||||
    // Directory tab
 | 
			
		||||
    _Tab(
 | 
			
		||||
      icon: Icons.import_contacts,
 | 
			
		||||
      title: tr("Directory"),
 | 
			
		||||
      widget: Text("Directory"),
 | 
			
		||||
    ),
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  List<Tab> get _tabs => _list
 | 
			
		||||
      .map((e) => Tab(
 | 
			
		||||
          icon: Stack(
 | 
			
		||||
            children: <Widget>[
 | 
			
		||||
              Icon(e.icon),
 | 
			
		||||
              e.isUnread?.call(context) ?? false
 | 
			
		||||
                  ? Container(color: Colors.red, width: 10, height: 10)
 | 
			
		||||
                  : Container(width: 0)
 | 
			
		||||
            ],
 | 
			
		||||
          ),
 | 
			
		||||
          text: e.title))
 | 
			
		||||
      .toList();
 | 
			
		||||
 | 
			
		||||
  List<Widget> get _tabsPages =>
 | 
			
		||||
      _list.map((e) => TabTransitionWidget(e.widget)).toList();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class _Tab {
 | 
			
		||||
  final IconData icon;
 | 
			
		||||
  final String title;
 | 
			
		||||
  final Widget widget;
 | 
			
		||||
  final bool Function(BuildContext) isUnread;
 | 
			
		||||
 | 
			
		||||
  const _Tab({
 | 
			
		||||
    @required this.icon,
 | 
			
		||||
    @required this.title,
 | 
			
		||||
    @required this.widget,
 | 
			
		||||
    this.isUnread,
 | 
			
		||||
  })  : assert(icon != null),
 | 
			
		||||
        assert(title != null),
 | 
			
		||||
        assert(widget != null);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user