You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			143 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			143 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Dart
		
	
import 'package:flutter/material.dart';
 | 
						|
 | 
						|
import 'package:fluffychat/config/themes.dart';
 | 
						|
import 'package:fluffychat/l10n/l10n.dart';
 | 
						|
import 'package:fluffychat/pages/device_settings/device_settings.dart';
 | 
						|
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
 | 
						|
import 'user_device_list_item.dart';
 | 
						|
 | 
						|
class DevicesSettingsView extends StatelessWidget {
 | 
						|
  final DevicesSettingsController controller;
 | 
						|
 | 
						|
  const DevicesSettingsView(this.controller, {super.key});
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) {
 | 
						|
    return Scaffold(
 | 
						|
      appBar: AppBar(
 | 
						|
        automaticallyImplyLeading: !FluffyThemes.isColumnMode(context),
 | 
						|
        centerTitle: FluffyThemes.isColumnMode(context),
 | 
						|
        title: Text(L10n.of(context).devices),
 | 
						|
      ),
 | 
						|
      body: MaxWidthBody(
 | 
						|
        child: FutureBuilder<bool>(
 | 
						|
          future: controller.loadUserDevices(context),
 | 
						|
          builder: (BuildContext context, snapshot) {
 | 
						|
            final theme = Theme.of(context);
 | 
						|
            if (snapshot.hasError) {
 | 
						|
              return Center(
 | 
						|
                child: Column(
 | 
						|
                  mainAxisSize: MainAxisSize.min,
 | 
						|
                  children: <Widget>[
 | 
						|
                    const Icon(Icons.error_outlined),
 | 
						|
                    Text(snapshot.error.toString()),
 | 
						|
                  ],
 | 
						|
                ),
 | 
						|
              );
 | 
						|
            }
 | 
						|
            if (!snapshot.hasData || controller.devices == null) {
 | 
						|
              return const Center(
 | 
						|
                child: CircularProgressIndicator.adaptive(strokeWidth: 2),
 | 
						|
              );
 | 
						|
            }
 | 
						|
            return ListView.builder(
 | 
						|
              shrinkWrap: true,
 | 
						|
              physics: const NeverScrollableScrollPhysics(),
 | 
						|
              itemCount: controller.notThisDevice.length + 1,
 | 
						|
              itemBuilder: (BuildContext context, int i) {
 | 
						|
                if (i == 0) {
 | 
						|
                  return Column(
 | 
						|
                    mainAxisSize: MainAxisSize.min,
 | 
						|
                    children: [
 | 
						|
                      if (controller.chatBackupEnabled == false)
 | 
						|
                        Padding(
 | 
						|
                          padding: const EdgeInsets.symmetric(horizontal: 8.0),
 | 
						|
                          child: ListTile(
 | 
						|
                            leading: const CircleAvatar(
 | 
						|
                              child: Icon(Icons.info_outlined),
 | 
						|
                            ),
 | 
						|
                            subtitle: Text(
 | 
						|
                              L10n.of(context)
 | 
						|
                                  .noticeChatBackupDeviceVerification,
 | 
						|
                            ),
 | 
						|
                          ),
 | 
						|
                        ),
 | 
						|
                      if (controller.thisDevice != null) ...[
 | 
						|
                        Container(
 | 
						|
                          padding: const EdgeInsets.symmetric(
 | 
						|
                            horizontal: 16.0,
 | 
						|
                            vertical: 8.0,
 | 
						|
                          ),
 | 
						|
                          alignment: Alignment.centerLeft,
 | 
						|
                          child: Text(
 | 
						|
                            L10n.of(context).thisDevice,
 | 
						|
                            style: TextStyle(
 | 
						|
                              fontWeight: FontWeight.bold,
 | 
						|
                              color: theme.colorScheme.primary,
 | 
						|
                            ),
 | 
						|
                            textAlign: TextAlign.left,
 | 
						|
                          ),
 | 
						|
                        ),
 | 
						|
                        UserDeviceListItem(
 | 
						|
                          controller.thisDevice!,
 | 
						|
                          rename: controller.renameDeviceAction,
 | 
						|
                          remove: (d) => controller.removeDevicesAction([d]),
 | 
						|
                          verify: controller.verifyDeviceAction,
 | 
						|
                          block: controller.blockDeviceAction,
 | 
						|
                          unblock: controller.unblockDeviceAction,
 | 
						|
                        ),
 | 
						|
                      ],
 | 
						|
                      if (controller.notThisDevice.isNotEmpty)
 | 
						|
                        Padding(
 | 
						|
                          padding: const EdgeInsets.symmetric(
 | 
						|
                            horizontal: 16.0,
 | 
						|
                            vertical: 8.0,
 | 
						|
                          ),
 | 
						|
                          child: SizedBox(
 | 
						|
                            width: double.infinity,
 | 
						|
                            child: TextButton.icon(
 | 
						|
                              label: Text(
 | 
						|
                                L10n.of(context).removeAllOtherDevices,
 | 
						|
                              ),
 | 
						|
                              style: TextButton.styleFrom(
 | 
						|
                                iconColor: theme.colorScheme.onErrorContainer,
 | 
						|
                                foregroundColor:
 | 
						|
                                    theme.colorScheme.onErrorContainer,
 | 
						|
                                backgroundColor:
 | 
						|
                                    theme.colorScheme.errorContainer,
 | 
						|
                              ),
 | 
						|
                              icon: const Icon(Icons.delete_outline),
 | 
						|
                              onPressed: () => controller.removeDevicesAction(
 | 
						|
                                controller.notThisDevice,
 | 
						|
                              ),
 | 
						|
                            ),
 | 
						|
                          ),
 | 
						|
                        )
 | 
						|
                      else
 | 
						|
                        Center(
 | 
						|
                          child: Padding(
 | 
						|
                            padding: const EdgeInsets.all(16.0),
 | 
						|
                            child: Text(L10n.of(context).noOtherDevicesFound),
 | 
						|
                          ),
 | 
						|
                        ),
 | 
						|
                    ],
 | 
						|
                  );
 | 
						|
                }
 | 
						|
                i--;
 | 
						|
                return UserDeviceListItem(
 | 
						|
                  controller.notThisDevice[i],
 | 
						|
                  rename: controller.renameDeviceAction,
 | 
						|
                  remove: (d) => controller.removeDevicesAction([d]),
 | 
						|
                  verify: controller.verifyDeviceAction,
 | 
						|
                  block: controller.blockDeviceAction,
 | 
						|
                  unblock: controller.unblockDeviceAction,
 | 
						|
                );
 | 
						|
              },
 | 
						|
            );
 | 
						|
          },
 | 
						|
        ),
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |