144 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Dart
		
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Dart
		
	
	
	
| import 'package:flutter/material.dart';
 | |
| 
 | |
| import 'package:fluffychat/generated/l10n/l10n.dart';
 | |
| 
 | |
| import 'package:fluffychat/config/themes.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,
 | |
|                 );
 | |
|               },
 | |
|             );
 | |
|           },
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 |