flutter - 带有模板的 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);
}
解决方案
乍一看您的代码,我可以看到您正在MyChildState("Hello world !")
作为值传递,但稍后在MyParentWidget
课堂上您正在请求一个State
object final State state = Provider.of(context);
。
尝试请求MyChildState
而不是State
.
阅读您的代码后,我的第一印象是您来自不同的编程语言,现在您正在尝试 Flutter。一个友好的建议是让一切尽可能简单。
当您稍后查看您编写的代码而不是帮助您时,所有的抽象以及代码的组织方式可能会让您感到困惑。
推荐阅读
- php - Zend 1 php 如何获取助手并在课堂外执行它?
- html - 选择第二个 col_content
- yaml - 用于从 Artifact 存储库下载最新 Artifact 的 Yaml 脚本
- sql-server - 在计算实例数时如何选择所有行?
- python - 如何在python中处理原始字符串中的通配符
- mysql - MySQL_Retrieving 基于 max 和 min_date 的股票价格
- javascript - history.back 在 Karma 中的行为不符合预期
- javascript - 如何通过方法在动态创建的行中分配/传递数据 - Vue.js
- machine-learning - 为什么不能从宏精度和召回率计算宏 F1 度量?
- mongodb - mongodb 聚合唯一性和计数同时具有更高级别的平均值