首页 > 解决方案 > Dart Riverpod:未定义的类'WidgetRef'

问题描述

我正在阅读 Flutter Riverpod包文档,出于某种原因,“入门”中的基本示例抛出错误:

未定义的类“WidgetRef”。尝试将名称更改为现有类的名称,或创建一个名为“WidgetRef”的类。

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

final helloWorldProvider = Provider((_) => 'Hello World');

void main() {
  runApp(
    ProviderScope(child: MyApp()),
  );
}

class MyApp extends ConsumerWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final String value = ref.watch(helloWorldProvider);
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Text(value),
        ),
      ),
    );
  }
}

发布规范.yaml

environment:
  sdk: ">=2.12.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^1.0.2
  flutter_riverpod: ^0.14.0+3

dev_dependencies:
  flutter_test:
    sdk: flutter

标签: flutterdartriverpod

解决方案


在您的 pubspec 中您已指定flutter_riverpod: ^0.14.0+3,而WidgetRef仅适用于 1.0.0 版本(目前是开发版本,而不是完整版本)。

在您的 Riverpod 版本中,您可以使用 ConsumerWidget,如下所示:

class MyApp extends ConsumerWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context, ScopedReader watch) {
    final String value = watch(helloWorldProvider);
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Text(value),
        ),
      ),
    );
  }
}

或者,您可以升级到flutter_riverpod: ^1.0.0-dev.6


推荐阅读