import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:yumi/services/audio/rtc_manager.dart'; import 'package:yumi/services/audio/rtm_manager.dart'; import 'package:yumi/ui_kit/widgets/room/room_bottom_widget.dart'; void main() { testWidgets('room bottom shows mic after self goes on mic', (tester) async { SharedPreferences.setMockInitialValues({}); await tester.binding.setSurfaceSize(const Size(1080, 2400)); addTearDown(() async { await tester.binding.setSurfaceSize(null); }); final rtcProvider = _TestRtcProvider(); final rtmProvider = RealTimeMessagingManager(); await tester.pumpWidget( ScreenUtilInit( designSize: const Size(375, 812), builder: (_, __) => MultiProvider( providers: [ ChangeNotifierProvider.value(value: rtcProvider), ChangeNotifierProvider.value(value: rtmProvider), ], child: const MaterialApp( home: Scaffold( body: Align( alignment: Alignment.bottomCenter, child: RoomBottomWidget(showGiftComboButton: false), ), ), ), ), ), ); expect(_micImageFinder(), findsNothing); rtcProvider.setOnMic(true); await tester.pump(); expect(rtcProvider.isOnMai(), isTrue); expect(_micImageFinder(), findsOneWidget); }); } class _TestRtcProvider extends RealTimeCommunicationManager { bool _onMic = false; @override bool isOnMai() => _onMic; void setOnMic(bool value) { _onMic = value; notifyListeners(); } } Finder _micImageFinder() { return find.byWidgetPredicate((widget) { if (widget is! Image || widget.image is! AssetImage) { return false; } final assetName = (widget.image as AssetImage).assetName; return assetName == 'sc_images/room/sc_icon_botton_mic_open.png' || assetName == 'sc_images/room/sc_icon_botton_mic_close.png'; }); }