【问题标题】:Dart Riverpod: Undefined class 'WidgetRef'Dart Riverpod:未定义的类“WidgetRef”
【发布时间】:2021-10-14 01:19:53
【问题描述】:

我正在浏览 Flutter Riverpod 包文档,出于某种原因,“入门”中的基本 example 正在抛出错误:

未定义的类“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),
        ),
      ),
    );
  }
}

pubspec.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

【问题讨论】:

    标签: flutter dart riverpod


    【解决方案1】:

    在您的 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

    【讨论】:

    • WidgetRefScopedReader 的替代品吗?
    • @mLstudent33 It would seem so,以及它的引用方式(从watch()ref.watch())。
    猜你喜欢
    • 2022-07-01
    • 2021-10-17
    • 2023-02-22
    • 2018-07-30
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    相关资源
    最近更新 更多