動くコード図鑑技術記事現場の渡り方キャリア論すべての記事About
技術記事

FlutterでConsumerを使うときに型指定をせずに怒られた話

バイブス父さん
現役の業務SE
2021年6月3日2 min read
FlutterでConsumerを使うときに型指定をせずに怒られた話

みなさんこんにちは!ひろぽんです!

いやーーFlutterはなんであんなに楽しいんやろか?というくらい楽しくて、日々ずっとコードを書いています!

そんなFlutterを程度かけるようになってくると、次のステップとしてFlutterでの状態管理をProviderでしようと思い始めると思います。

私もその1人なのですが、以前そのProviderでConsumerを使用する際に下記のような感じで怒られました。

Tried to call Provider.of<dynamic>. This is likely a mistake and is therefore (bash)#a6a8c66186a7
Tried to call Provider.of<dynamic>. This is likely a mistake and is therefore
unsupported.
 
If you want to expose a variable that can be anything, consider changing
`dynamic` to `Object` instead.
'package:provider/src/provider.dart':
Failed assertion: line 307 pos 7: 'T != dynamic'
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です

翻訳にかけると下記のような感じ。

Provider.of を呼び出そうとしました。 これは間違いである可能性が高いため、
サポートされていません。

何でもよい変数を公開したい場合は、変更を検討してください
代わりに「動的」から「オブジェクト」へ。
「パッケージ:プロバイダー/src/provider.dart」:
失敗したアサーション: 行 307 pos 7: ‘T != dynamic’

は??

って思っていろいろ調べて1時間はまりました。

原因は下記。

    return Consumer(builder: (_,model,__){

ConsumerでラップしたWidgetを返しているのですが、Consumerにジェネリック型指定をしていない!!!!!

下記のように修正したら無事ビルドは通りました。

    return Consumer<ProjectItemListViewModel>(builder: (_,model,__){
この記事のコードと手順は ぜんぶ動作検証済み。 安心して現場で試してくれ。
バイブス父さん

現役の業務SE。C# / SQL Server 保守の現場から、コードも人もキャリアも全部書く。 実体験ベース。

運営者について