123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- import 'package:app_flowy/startup/startup.dart';
- import 'package:app_flowy/workspace/application/workspace/welcome_bloc.dart';
- import 'package:easy_localization/easy_localization.dart';
- import 'package:flowy_infra/theme.dart';
- import 'package:flowy_infra_ui/style_widget/scrolling/styled_list.dart';
- import 'package:flowy_infra_ui/style_widget/button.dart';
- import 'package:flowy_infra_ui/widget/error_page.dart';
- import 'package:flowy_sdk/protobuf/flowy-core-data-model/workspace_create.pb.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter_bloc/flutter_bloc.dart';
- import 'package:app_flowy/workspace/infrastructure/repos/user_repo.dart';
- import 'package:app_flowy/generated/locale_keys.g.dart';
- class WelcomeScreen extends StatelessWidget {
- final UserRepo repo;
- const WelcomeScreen({
- Key? key,
- required this.repo,
- }) : super(key: key);
- @override
- Widget build(BuildContext context) {
- return BlocProvider(
- create: (_) => getIt<WelcomeBloc>(param1: repo.user)..add(const WelcomeEvent.initial()),
- child: BlocBuilder<WelcomeBloc, WelcomeState>(
- builder: (context, state) {
- return Scaffold(
- body: Padding(
- padding: const EdgeInsets.all(60.0),
- child: Column(
- children: [
- _renderBody(state),
- _renderCreateButton(context),
- ],
- ),
- ),
- );
- },
- ),
- );
- }
- Widget _renderBody(WelcomeState state) {
- final body = state.successOrFailure.fold(
- (_) => _renderList(state.workspaces),
- (error) => FlowyErrorPage(error.toString()),
- );
- return body;
- }
- Widget _renderCreateButton(BuildContext context) {
- final theme = context.watch<AppTheme>();
- return SizedBox(
- width: 200,
- height: 40,
- child: FlowyTextButton(
- LocaleKeys.workspace_create.tr(),
- fontSize: 14,
- hoverColor: theme.bg3,
- onPressed: () {
- context.read<WelcomeBloc>().add(WelcomeEvent.createWorkspace(LocaleKeys.workspace_hint.tr(), ""));
- },
- ),
- );
- }
- Widget _renderList(List<Workspace> workspaces) {
- return Expanded(
- child: StyledListView(
- itemBuilder: (BuildContext context, int index) {
- final workspace = workspaces[index];
- return WorkspaceItem(
- workspace: workspace,
- onPressed: (workspace) => _handleOnPress(context, workspace),
- );
- },
- itemCount: workspaces.length,
- ),
- );
- }
- void _handleOnPress(BuildContext context, Workspace workspace) {
- context.read<WelcomeBloc>().add(WelcomeEvent.openWorkspace(workspace));
- Navigator.of(context).pop(workspace.id);
- }
- }
- class WorkspaceItem extends StatelessWidget {
- final Workspace workspace;
- final void Function(Workspace workspace) onPressed;
- const WorkspaceItem({Key? key, required this.workspace, required this.onPressed}) : super(key: key);
- @override
- Widget build(BuildContext context) {
- final theme = context.watch<AppTheme>();
- return SizedBox(
- height: 46,
- child: FlowyTextButton(
- workspace.name,
- hoverColor: theme.bg3,
- fontSize: 14,
- onPressed: () => onPressed(workspace),
- ),
- );
- }
- }
|