| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | import 'package:appflowy/generated/flowy_svgs.g.dart';import 'package:appflowy/generated/locale_keys.g.dart';import 'package:appflowy/user/application/historical_user_bloc.dart';import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart';import 'package:easy_localization/easy_localization.dart';import 'package:flowy_infra_ui/flowy_infra_ui.dart';import 'package:flutter/material.dart';import 'package:flutter_bloc/flutter_bloc.dart';class HistoricalUserList extends StatelessWidget {  final VoidCallback didOpenUser;  const HistoricalUserList({required this.didOpenUser, super.key});  @override  Widget build(BuildContext context) {    return BlocProvider(      create: (context) => HistoricalUserBloc()        ..add(          const HistoricalUserEvent.initial(),        ),      child: BlocBuilder<HistoricalUserBloc, HistoricalUserState>(        builder: (context, state) {          if (state.historicalUsers.isEmpty) {            return const SizedBox.shrink();          } else {            return Column(              crossAxisAlignment: CrossAxisAlignment.start,              children: [                Opacity(                  opacity: 0.6,                  child: FlowyText.regular(                    LocaleKeys.settings_menu_historicalUserListTooltip.tr(),                    fontSize: 13,                    maxLines: null,                  ),                ),                const VSpace(6),                Expanded(                  child: ListView.builder(                    itemBuilder: (context, index) {                      final user = state.historicalUsers[index];                      return HistoricalUserItem(                        key: ValueKey(user.userId),                        user: user,                        isSelected: false,                        didOpenUser: didOpenUser,                      );                    },                    itemCount: state.historicalUsers.length,                  ),                )              ],            );          }        },      ),    );  }}class HistoricalUserItem extends StatelessWidget {  final VoidCallback didOpenUser;  final bool isSelected;  final HistoricalUserPB user;  const HistoricalUserItem({    required this.user,    required this.isSelected,    required this.didOpenUser,    super.key,  });  @override  Widget build(BuildContext context) {    final icon = isSelected ? const FlowySvg(FlowySvgs.check_s) : null;    final isDisabled = isSelected || user.authType != AuthTypePB.Local;    final outputFormat = DateFormat('MM/dd/yyyy hh:mm a');    final date =        DateTime.fromMillisecondsSinceEpoch(user.lastTime.toInt() * 1000);    final lastTime = outputFormat.format(date);    final desc = "${user.userName}\t ${user.authType}\t$lastTime";    final child = SizedBox(      height: 30,      child: FlowyButton(        disable: isDisabled,        text: FlowyText.medium(          desc,          fontSize: 12,        ),        rightIcon: icon,        onTap: () {          context              .read<HistoricalUserBloc>()              .add(HistoricalUserEvent.openHistoricalUser(user));          didOpenUser();        },      ),    );    return child;  }}
 |