57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
		
		
			
		
	
	
			57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
|  | import 'package:flutter/material.dart'; | ||
|  | import 'package:flutter_hbb/common.dart'; | ||
|  | import 'package:flutter_hbb/models/platform_model.dart'; | ||
|  | 
 | ||
|  | typedef AudioINputSetDevice = void Function(String device); | ||
|  | typedef AudioInputBuilder = Widget Function( | ||
|  |     List<String> devices, String currentDevice, AudioINputSetDevice setDevice); | ||
|  | 
 | ||
|  | class AudioInput extends StatelessWidget { | ||
|  |   final AudioInputBuilder builder; | ||
|  | 
 | ||
|  |   const AudioInput({Key? key, required this.builder}) : super(key: key); | ||
|  | 
 | ||
|  |   static String getDefault() { | ||
|  |     if (isWindows) return translate('System Sound'); | ||
|  |     return ''; | ||
|  |   } | ||
|  | 
 | ||
|  |   static Future<String> getValue() async { | ||
|  |     String device = await bind.mainGetOption(key: 'audio-input'); | ||
|  |     if (device.isNotEmpty) { | ||
|  |       return device; | ||
|  |     } else { | ||
|  |       return getDefault(); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   static Future<void> setDevice(String device) async { | ||
|  |     if (device == getDefault()) device = ''; | ||
|  |     await bind.mainSetOption(key: 'audio-input', value: device); | ||
|  |   } | ||
|  | 
 | ||
|  |   static Future<Map<String, Object>> getDevicesInfo() async { | ||
|  |     List<String> devices = (await bind.mainGetSoundInputs()).toList(); | ||
|  |     if (isWindows) { | ||
|  |       devices.insert(0, translate('System Sound')); | ||
|  |     } | ||
|  |     String current = await getValue(); | ||
|  |     return {'devices': devices, 'current': current}; | ||
|  |   } | ||
|  | 
 | ||
|  |   @override | ||
|  |   Widget build(BuildContext context) { | ||
|  |     return futureBuilder( | ||
|  |       future: getDevicesInfo(), | ||
|  |       hasData: (data) { | ||
|  |         String currentDevice = data['current']; | ||
|  |         List<String> devices = data['devices'] as List<String>; | ||
|  |         if (devices.isEmpty) { | ||
|  |           return const Offstage(); | ||
|  |         } | ||
|  |         return builder(devices, currentDevice, setDevice); | ||
|  |       }, | ||
|  |     ); | ||
|  |   } | ||
|  | } |