46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
| import 'package:flutter/material.dart';
 | |
| 
 | |
| import 'package:matrix/matrix.dart';
 | |
| 
 | |
| IconData _getIconFromName(String displayname) {
 | |
|   final name = displayname.toLowerCase();
 | |
|   if ({'android'}.any((s) => name.contains(s))) {
 | |
|     return Icons.phone_android_outlined;
 | |
|   }
 | |
|   if ({'ios', 'ipad', 'iphone', 'ipod'}.any((s) => name.contains(s))) {
 | |
|     return Icons.phone_iphone_outlined;
 | |
|   }
 | |
|   if ({
 | |
|     'web',
 | |
|     'http://',
 | |
|     'https://',
 | |
|     'firefox',
 | |
|     'chrome',
 | |
|     '/_matrix',
 | |
|     'safari',
 | |
|     'opera',
 | |
|   }.any((s) => name.contains(s))) {
 | |
|     return Icons.web_outlined;
 | |
|   }
 | |
|   if ({'desktop', 'windows', 'macos', 'linux', 'ubuntu'}
 | |
|       .any((s) => name.contains(s))) {
 | |
|     return Icons.desktop_mac_outlined;
 | |
|   }
 | |
|   return Icons.device_unknown_outlined;
 | |
| }
 | |
| 
 | |
| extension DeviceExtension on Device {
 | |
|   String get displayname =>
 | |
|       (displayName?.isNotEmpty ?? false) ? displayName! : 'Unknown device';
 | |
| 
 | |
|   IconData get icon => _getIconFromName(displayname);
 | |
| }
 | |
| 
 | |
| extension DeviceKeysExtension on DeviceKeys {
 | |
|   String get displayname => (deviceDisplayName?.isNotEmpty ?? false)
 | |
|       ? deviceDisplayName!
 | |
|       : 'Unknown device';
 | |
| 
 | |
|   IconData get icon => _getIconFromName(displayname);
 | |
| }
 |