首页 > 解决方案 > 带有模板的 Flutter 包提供程序

问题描述

我正在尝试将提供程序与模板一起使用,但 Provider.of 似乎不能那样工作。

日志:

theftion trible tribrars捕获的例外╞═════════════════════════════════════════ ══════════════════ 在构建 MyChildWidget(dirty) 时引发了以下 ProviderNotFoundError:错误:在此 MyChildWidget 小部件上方找不到正确的提供程序

要修复,请:

  • 确保 Provider 是此 MyChildWidget 小部件的祖先
  • 向 Provider 提供类型
  • 向消费者提供类型
  • 向 Provider.of() 提供类型
  • 始终使用包导入。例如:`import 'package:my_app/my_code.dart';
  • 确保使用正确context

你知道任何解决方案吗?

显示问题的示例:

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Provider<MyChildState>.value(
          value: MyChildState("Hello world !"),
          child: MaterialApp(
            home: MyChildWidget(),
          )),
    );
  }
}

abstract class MyParentWidget<State extends MyParentState> extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final State state = Provider.of(context);
    return Text(state.text);
  }
}

abstract class MyParentState {
  final String text;

  MyParentState(this.text);
}

class MyChildWidget<MyChildState> extends MyParentWidget{
}

class MyChildState extends MyParentState {
  MyChildState(String text) : super(text);
}

标签: flutterdartflutter-provider

解决方案


乍一看您的代码,我可以看到您正在MyChildState("Hello world !")作为值传递,但稍后在MyParentWidget课堂上您正在请求一个Stateobject final State state = Provider.of(context);

尝试请求MyChildState而不是State.

阅读您的代码后,我的第一印象是您来自不同的编程语言,现在您正在尝试 Flutter。一个友好的建议是让一切尽可能简单

当您稍后查看您编写的代码而不是帮助您时,所有的抽象以及代码的组织方式可能会让您感到困惑。


推荐阅读