Skip to content

Instantly share code, notes, and snippets.

@kefasjw
Created March 18, 2024 08:23
Show Gist options
  • Save kefasjw/085aaa9893eea2029692d5c4fc83cefc to your computer and use it in GitHub Desktop.
Save kefasjw/085aaa9893eea2029692d5c4fc83cefc to your computer and use it in GitHub Desktop.
riverpod reproduce
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;
});
@kefasjw
Copy link
Author

kefasjw commented Mar 18, 2024

I/flutter (12487): provider start
I/flutter (12487): provider end
D/EGL_emulation(12487): app_time_stats: avg=1842.50ms min=157.73ms max=4729.53ms count=3
I/flutter (12487): provider start
I/flutter (12487): set new state
I/flutter (12487): provider end
E/flutter (12487): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: 'package:riverpod/src/framework/element.dart': Failed assertion: line 462 pos 11: '_debugCurrentlyBuildingElement == null ||
E/flutter (12487):               _debugCurrentlyBuildingElement == this': Providers are not allowed to modify other providers during their initialization.
E/flutter (12487): 
E/flutter (12487): The provider AutoDisposeProvider<int>#13a14 modified AutoDisposeNotifierProviderImpl<MyNotifier, int>#61330 while building.
E/flutter (12487): 
E/flutter (12487): #0      _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:51:61)
E/flutter (12487): #1      _AssertionError._throwNew (dart:core-patch/errors_patch.dart:40:5)
E/flutter (12487): #2      ProviderElementBase._notifyListeners.<anonymous closure> (package:riverpod/src/framework/element.dart:462:11)
E/flutter (12487): #3      ProviderElementBase._notifyListeners (package:riverpod/src/framework/element.dart:473:8)
E/flutter (12487): #4      ProviderElementBase.setState (package:riverpod/src/framework/element.dart:138:7)
E/flutter (12487): #5      NotifierBase.state= (package:riverpod/src/notifier.dart:63:14)
E/flutter (12487): #6      MyNotifier.build.<anonymous closure> (package:flutter_playground/main_riverpod_reproduce.dart:37:9)
E/flutter (12487): #7      ProviderBase.addListener.<anonymous closure> (package:riverpod/src/framework/provider_base.dart:98:41)
E/flutter (12487): #8      _RootZone.runBinaryGuarded (dart:async/zone.dart:1606:10)
E/flutter (12487): #9      ProviderElementBase._notifyListeners.<anonymous closure> (package:riverpod/src/framework/element.dart:525:28)
E/flutter (12487): #10     ResultData.map (package:riverpod/src/result.dart:74:16)
E/flutter (12487): #11     ProviderElementBase._notifyListeners (package:riverpod/src/framework/element.dart:519:14)
E/flutter (12487): #12     ProviderElementBase._performBuild (package:riverpod/src/framework/element.dart:358:7)
E/flutter (12487): #13     ProviderElementBase.flush (package:riverpod/src/framework/element.dart:307:7)
E/flutter (12487): #14     ProviderElementBase._maybeRebuildDependencies.<anonymous closure> (package:riverpod/src/framework/element.dart:321:28)
E/flutter (12487): #15     ProviderElementBase.visitAncestors (package:riverpod/src/framework/element.dart:824:18)
E/flutter (12487): #16     ProviderElementBase._maybeRebuildDependencies (package:riverpod/src/framework/element.dart:320:5)
E/flutter (12487): #17     ProviderElementBase.flush (package:riverpod/src/framework/element.dart:304:5)
E/flutter (12487): #18     ProviderBase.addListener (package:riverpod/src/framework/provider_base.dart:81:13)
E/flutter (12487): #19     ProviderElementBase.listen (package:riverpod/src/framework/element.dart:746:23)
E/flutter (12487): #20     _ProviderSelector.addListener (package:riverpod/src/framework/selector.dart:109:22)
E/flutter (12487): #21     ProviderElementBase.listen (package:riverpod/src/framework/element.dart:746:23)
E/flutter (12487): #22     ProviderElementBase.watch (package:riverpod/src/framework/element.dart:687:19)
E/flutter (12487): #23     combine.<anonymous closure> (package:flutter_playground/main_riverpod_reproduce.dart:48:7)
E/flutter (12487): #24     AutoDisposeProvider._create (package:riverpod/src/provider/auto_dispose.dart:40:60)
E/flutter (12487): #25     ProviderElement.create (package:riverpod/src/provider/base.dart:338:23)
E/flutter (12487): #26     ProviderElementBase.buildState (package:riverpod/src/framework/element.dart:409:7)
E/flutter (12487): #27     ProviderElementBase._performBuild (package:riverpod/src/framework/element.dart:346:5)
E/flutter (12487): #28     ProviderElementBase.flush (package:riverpod/src/framework/element.dart:307:7)
E/flutter (12487): #29     ProviderScheduler._performRefresh (package:riverpod/src/framework/scheduler.dart:94:41)
E/flutter (12487): #30     ProviderScheduler._task (package:riverpod/src/framework/scheduler.dart:82:5)
E/flutter (12487): #31     ProviderScheduler.vsync.<anonymous closure>.invoke (package:riverpod/src/framework/scheduler.dart:41:15)
E/flutter (12487): #32     _UncontrolledProviderScopeElement.build (package:flutter_riverpod/src/framework.dart:396:12)
E/flutter (12487): #33     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5480:15)
E/flutter (12487): #34     Element.rebuild (package:flutter/src/widgets/framework.dart:5196:7)
E/flutter (12487): #35     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2904:19)
E/flutter (12487): #36     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:989:21)
E/flutter (12487): #37     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:448:5)
E/flutter (12487): #38     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1386:15)
E/flutter (12487): #39     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1311:9)
E/flutter (12487): #40     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1169:5)
E/flutter (12487): #41     _invoke (dart:ui/hooks.dart:312:13)
E/flutter (12487): #42     PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:399:5)
E/flutter (12487): #43     _drawFrame (dart:ui/hooks.dart:283:31)
E/flutter (12487): 

@kefasjw
Copy link
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