mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-04 04:04:18 +00:00 
			
		
		
		
	Start to refactor user page
This commit is contained in:
		@@ -1,22 +1,13 @@
 | 
			
		||||
import 'package:comunic/enums/post_target.dart';
 | 
			
		||||
import 'package:comunic/helpers/posts_helper.dart';
 | 
			
		||||
import 'package:comunic/models/advanced_user_info.dart';
 | 
			
		||||
import 'package:comunic/ui/routes/main_route/main_route.dart';
 | 
			
		||||
import 'package:comunic/ui/widgets/account_image_widget.dart';
 | 
			
		||||
import 'package:comunic/ui/widgets/post_create_form_widget.dart';
 | 
			
		||||
import 'package:comunic/ui/widgets/posts_list_widget.dart';
 | 
			
		||||
import 'package:comunic/utils/account_utils.dart';
 | 
			
		||||
import 'package:comunic/utils/conversations_utils.dart';
 | 
			
		||||
import 'package:comunic/ui/screens/user_page_sections/user_page_header.dart';
 | 
			
		||||
import 'package:comunic/ui/screens/user_page_sections/user_posts_section.dart';
 | 
			
		||||
import 'package:comunic/utils/intl_utils.dart';
 | 
			
		||||
import 'package:comunic/utils/ui_utils.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
 | 
			
		||||
/// Mobile mode of user page
 | 
			
		||||
///
 | 
			
		||||
/// @author Pierre Hubert
 | 
			
		||||
 | 
			
		||||
enum _MenuOptions { FRIENDS_LIST }
 | 
			
		||||
 | 
			
		||||
class UserMobilePage extends StatefulWidget {
 | 
			
		||||
  final AdvancedUserInfo userInfo;
 | 
			
		||||
  final void Function() onNeedRefresh;
 | 
			
		||||
@@ -33,80 +24,73 @@ class UserMobilePage extends StatefulWidget {
 | 
			
		||||
  _UserMobilePageState createState() => _UserMobilePageState();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class _UserMobilePageState extends State<UserMobilePage> {
 | 
			
		||||
  AdvancedUserInfo get _userInfo => widget.userInfo;
 | 
			
		||||
class _UserMobilePageState extends State<UserMobilePage>
 | 
			
		||||
    with SingleTickerProviderStateMixin {
 | 
			
		||||
  TabController _tabController;
 | 
			
		||||
 | 
			
		||||
  int get _userID => _userInfo.id;
 | 
			
		||||
 | 
			
		||||
  Widget _buildHeader() {
 | 
			
		||||
    return Container(
 | 
			
		||||
      color: Colors.black26,
 | 
			
		||||
      child: Padding(
 | 
			
		||||
        padding: const EdgeInsets.all(8.0),
 | 
			
		||||
        child: Row(
 | 
			
		||||
          children: <Widget>[
 | 
			
		||||
            InkWell(
 | 
			
		||||
              onTap: () =>
 | 
			
		||||
                  showImageFullScreen(context, _userInfo.accountImageURL),
 | 
			
		||||
              child: AccountImageWidget(user: _userInfo),
 | 
			
		||||
            ),
 | 
			
		||||
            Text(" ${_userInfo.displayName}"),
 | 
			
		||||
            Spacer(),
 | 
			
		||||
            _userID == userID()
 | 
			
		||||
                ? Container()
 | 
			
		||||
                : IconButton(
 | 
			
		||||
                    icon: Icon(
 | 
			
		||||
                      Icons.chat,
 | 
			
		||||
                    ),
 | 
			
		||||
                    onPressed: () {
 | 
			
		||||
                      openPrivateConversation(context, _userID);
 | 
			
		||||
                    }),
 | 
			
		||||
            PopupMenuButton<_MenuOptions>(
 | 
			
		||||
              itemBuilder: (c) => [
 | 
			
		||||
                PopupMenuItem(
 | 
			
		||||
                  child: Text(tr("Friends")),
 | 
			
		||||
                  enabled: _userInfo != null,
 | 
			
		||||
                  value: _MenuOptions.FRIENDS_LIST,
 | 
			
		||||
                )
 | 
			
		||||
              ],
 | 
			
		||||
              onSelected: _selectedMenuOption,
 | 
			
		||||
            ),
 | 
			
		||||
          ],
 | 
			
		||||
  List<UserPageTab> get _tabs => [
 | 
			
		||||
        // User posts
 | 
			
		||||
        UserPageTab(
 | 
			
		||||
          label: tr("Posts"),
 | 
			
		||||
          onBuild: (c) => UserPostsSection(
 | 
			
		||||
            user: widget.userInfo,
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
      ];
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  void initState() {
 | 
			
		||||
    super.initState();
 | 
			
		||||
 | 
			
		||||
    _tabController = TabController(length: _tabs.length, vsync: this);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return PostsListWidget(
 | 
			
		||||
      topWidgets: [
 | 
			
		||||
  void dispose() {
 | 
			
		||||
    _tabController.dispose();
 | 
			
		||||
    super.dispose();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) => Column(children: [
 | 
			
		||||
        _buildHeader(),
 | 
			
		||||
        _userInfo.canPostTexts
 | 
			
		||||
            ? PostCreateFormWidget(
 | 
			
		||||
                postTarget: PostTarget.USER_PAGE,
 | 
			
		||||
                targetID: _userInfo.id,
 | 
			
		||||
                onCreated: _postCreated,
 | 
			
		||||
              )
 | 
			
		||||
            : Container()
 | 
			
		||||
      ],
 | 
			
		||||
      getPostsList: () => PostsHelper().getUserPosts(_userID),
 | 
			
		||||
      getOlder: (from) => PostsHelper().getUserPosts(_userID, from: from),
 | 
			
		||||
      showPostsTarget: false,
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
        _buildBody(),
 | 
			
		||||
      ]);
 | 
			
		||||
 | 
			
		||||
  /// Method called each time a menu option is selected
 | 
			
		||||
  void _selectedMenuOption(_MenuOptions value) {
 | 
			
		||||
    switch (value) {
 | 
			
		||||
      case _MenuOptions.FRIENDS_LIST:
 | 
			
		||||
        MainController.of(context).openUserFriendsList(_userInfo.id);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  Widget _buildHeader() => Material(
 | 
			
		||||
        color: Colors.blue.shade700,
 | 
			
		||||
        textStyle: TextStyle(color: Colors.white),
 | 
			
		||||
        child: Column(
 | 
			
		||||
          children: [
 | 
			
		||||
            UserPageHeader(
 | 
			
		||||
              user: widget.userInfo,
 | 
			
		||||
              bgColor: Colors.transparent,
 | 
			
		||||
            ),
 | 
			
		||||
            TabBar(
 | 
			
		||||
              controller: _tabController,
 | 
			
		||||
              tabs: _tabs.map((e) => e.tab).toList(),
 | 
			
		||||
            ),
 | 
			
		||||
          ],
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
  /// Method called once a post has been created
 | 
			
		||||
  void _postCreated() {
 | 
			
		||||
    widget.onNeedRefresh();
 | 
			
		||||
  }
 | 
			
		||||
  Widget _buildBody() => Expanded(
 | 
			
		||||
        child: TabBarView(
 | 
			
		||||
          controller: _tabController,
 | 
			
		||||
          children: _tabs.map((e) => e.onBuild(context)).toList(),
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class UserPageTab {
 | 
			
		||||
  final String label;
 | 
			
		||||
  final WidgetBuilder onBuild;
 | 
			
		||||
 | 
			
		||||
  UserPageTab({
 | 
			
		||||
    @required this.label,
 | 
			
		||||
    @required this.onBuild,
 | 
			
		||||
  })  : assert(label != null),
 | 
			
		||||
        assert(onBuild != null);
 | 
			
		||||
 | 
			
		||||
  Tab get tab => Tab(text: label);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user