-
-
Save kefasjw/085aaa9893eea2029692d5c4fc83cefc to your computer and use it in GitHub Desktop.
riverpod reproduce
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart'; | |
import 'package:flutter_riverpod/flutter_riverpod.dart'; | |
void main() => runApp(ProviderScope(child: MyPage())); | |
class MyPage extends ConsumerWidget { | |
const MyPage({ | |
Key? key, | |
}) : super(key: key); | |
@override | |
Widget build(BuildContext context, WidgetRef ref) { | |
ref.watch(combine); | |
return MaterialApp(home: const Placeholder()); | |
} | |
} | |
final data = FutureProvider.autoDispose((ref) async { | |
await Future.delayed(Duration(seconds: 1)); | |
return 'data'; | |
}); | |
final data2 = Provider.autoDispose((ref) => ref.watch(data).valueOrNull); | |
final data3 = Provider.autoDispose((ref) => ref.watch(data2)); | |
final myNotifierProvider = | |
AutoDisposeNotifierProvider<MyNotifier, int>(() => MyNotifier()); | |
class MyNotifier extends AutoDisposeNotifier<int> { | |
@override | |
build() { | |
ref.listen( | |
data3, | |
(previous, next) { | |
print('set new state'); | |
state = 1; | |
}, | |
); | |
return 0; | |
} | |
} | |
final combine = Provider.autoDispose((ref) { | |
print('provider start'); | |
ref.watch(data2); | |
// ref.watch(data3); // uncomment this to fix | |
ref.watch( | |
myNotifierProvider.select((value) => value)); // or remove select to fix | |
print('provider end'); | |
return 0; | |
}); |
Author
kefasjw
commented
Mar 18, 2024
/Users/macbook-kefaswiryadi/fvm/default/bin/flutter --no-color test --machine --start-paused test/riverpod_reproduce_test.dart
Testing started at 15.30 ...
provider start
provider end
provider start
set new state
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following assertion was thrown running a test:
Providers are not allowed to modify other providers during their initialization.
The provider AutoDisposeProvider<int>#b2edb modified AutoDisposeNotifierProviderImpl<MyNotifier,
int>#a5c68 while building.
'package:riverpod/src/framework/element.dart':
Failed assertion: line 462 pos 11: '_debugCurrentlyBuildingElement == null ||
_debugCurrentlyBuildingElement == this'
When the exception was thrown, this was the stack:
#2 ProviderElementBase._notifyListeners.<anonymous closure> (package:riverpod/src/framework/element.dart:462:11)
#3 ProviderElementBase._notifyListeners (package:riverpod/src/framework/element.dart:473:8)
#4 ProviderElementBase.setState (package:riverpod/src/framework/element.dart:138:7)
#5 NotifierBase.state= (package:riverpod/src/notifier.dart:63:14)
#6 MyNotifier.build.<anonymous closure> (package:flutter_playground/main_riverpod_reproduce.dart:37:9)
#7 ProviderBase.addListener.<anonymous closure> (package:riverpod/src/framework/provider_base.dart:98:41)
#11 ProviderElementBase._notifyListeners.<anonymous closure> (package:riverpod/src/framework/element.dart:525:28)
#12 ResultData.map (package:riverpod/src/result.dart:74:16)
#13 ProviderElementBase._notifyListeners (package:riverpod/src/framework/element.dart:519:14)
#14 ProviderElementBase._performBuild (package:riverpod/src/framework/element.dart:358:7)
#15 ProviderElementBase.flush (package:riverpod/src/framework/element.dart:307:7)
#16 ProviderElementBase._maybeRebuildDependencies.<anonymous closure> (package:riverpod/src/framework/element.dart:321:28)
#17 ProviderElementBase.visitAncestors (package:riverpod/src/framework/element.dart:824:18)
#18 ProviderElementBase._maybeRebuildDependencies (package:riverpod/src/framework/element.dart:320:5)
#19 ProviderElementBase.flush (package:riverpod/src/framework/element.dart:304:5)
#20 ProviderBase.addListener (package:riverpod/src/framework/provider_base.dart:81:13)
#21 ProviderElementBase.listen (package:riverpod/src/framework/element.dart:746:23)
#22 _ProviderSelector.addListener (package:riverpod/src/framework/selector.dart:109:22)
#23 ProviderElementBase.listen (package:riverpod/src/framework/element.dart:746:23)
#24 ProviderElementBase.watch (package:riverpod/src/framework/element.dart:687:19)
#25 combine.<anonymous closure> (package:flutter_playground/main_riverpod_reproduce.dart:48:7)
#26 AutoDisposeProvider._create (package:riverpod/src/provider/auto_dispose.dart:40:60)
#27 ProviderElement.create (package:riverpod/src/provider/base.dart:338:23)
#28 ProviderElementBase.buildState (package:riverpod/src/framework/element.dart:409:7)
#29 ProviderElementBase._performBuild (package:riverpod/src/framework/element.dart:346:5)
#30 ProviderElementBase.flush (package:riverpod/src/framework/element.dart:307:7)
#31 ProviderScheduler._performRefresh (package:riverpod/src/framework/scheduler.dart:94:41)
#32 ProviderScheduler._task (package:riverpod/src/framework/scheduler.dart:82:5)
#33 ProviderScheduler.vsync.<anonymous closure>.invoke (package:riverpod/src/framework/scheduler.dart:41:15)
#34 _UncontrolledProviderScopeElement.build (package:flutter_riverpod/src/framework.dart:396:12)
#35 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5480:15)
#36 Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
#37 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2904:19)
#38 AutomatedTestWidgetsFlutterBinding.drawFrame (package:flutter_test/src/binding.dart:1414:19)
#39 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:448:5)
#40 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1386:15)
#41 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1311:9)
#42 AutomatedTestWidgetsFlutterBinding.pump.<anonymous closure> (package:flutter_test/src/binding.dart:1269:9)
#45 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:71:41)
#46 AutomatedTestWidgetsFlutterBinding.pump (package:flutter_test/src/binding.dart:1256:27)
#47 WidgetTester.pumpAndSettle.<anonymous closure> (package:flutter_test/src/widget_tester.dart:712:23)
#50 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:71:41)
#51 WidgetTester.pumpAndSettle (package:flutter_test/src/widget_tester.dart:705:27)
#52 main.<anonymous closure> (file:///Users/macbook-kefaswiryadi/Projects/flutter-playground/test/riverpod_reproduce_test.dart:9:18)
<asynchronous suspension>
#53 testWidgets.<anonymous closure>.<anonymous closure> (package:flutter_test/src/widget_tester.dart:183:15)
<asynchronous suspension>
#54 TestWidgetsFlutterBinding._runTestBody (package:flutter_test/src/binding.dart:1017:5)
<asynchronous suspension>
<asynchronous suspension>
(elided 10 frames from class _AssertionError, dart:async, and package:stack_trace)
The test description was:
description
════════════════════════════════════════════════════════════════════════════════════════════════════
provider end
Test failed. See exception logs above.
The test description was: description
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment