如何使用提供程序包初始化状态?

hai
TL;DR - Getting providerInfo = null from Consumer<ProviderInfo>(
    builder: (context, providerInfo, child),

我有一个使用scoped_model的flutter应用程序,该应用程序工作正常,但是我想对其进行重构,以便使用Provider

具有scoped_model的代码:

//imports...
void main() {
  runApp(MyApp());
}
class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _MyAppState();
  }
}

class _MyAppState extends State<MyApp> {
  final MainModel _model = MainModel();// The data class, extends scoped_model.Model class, with all of other models...
  bool _isAuthenticated = false;
  @override
  void initState() {
    _model.init();
    super.initState();
}
@override
  Widget build(BuildContext context) {
    return ScopedModel<MainModel>(
      model: _model,
      child: MaterialApp(
        title: "MyApp",
        routes: {
          '/': (BuildContext context) => _isAuthenticated == false ? AuthenticationPage() : HomePage(_model),
          '/admin': (BuildContext context) =>
              _isAuthenticated == false ? AuthenticationPage() : AdminPage(_model),
        },
// the rest of build...

}

以及我尝试重构以使用Provider的代码:

//@lib/main.dart
//imports...
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider<ProviderInfo>(
      builder: (context) {
        ProviderInfo(); // the data model. 
      },
      child: Consumer<ProviderInfo>(
        builder: (context, providerInfo, child) => MaterialApp(
              title: "MyApp",
              routes: {
                '/': (BuildContext context) {
                  providerInfo.isAuthenticated == false ? AuthenticationPage() : HomePage(providerInfo);
                },
                '/admin': (BuildContext context) {
                    providerInfo.isAuthenticated == false ? AuthenticationPage() : AdminPage(_model);
                },     
//the rest of build...
              },

//@ProviderInfo
class ProviderInfo extends CombinedModel with ProductModel, UserModel, UtilityModel {

  ProviderInfo() {
    this.init();
  }
}


这段代码的问题是,在该设计器功能Consumer<ProviderInfo>providerInfo为空(也当然后,在路线等)。

我做错了什么?我该如何重构它才能正常工作?

雷米·罗素(Remi Rousselet)

您忘记退还builder您提供者的。

更改

 ProviderInfo() 

 return ProviderInfo() 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Vue中的每个路由上重新初始化程序包?

如何使用提供程序包更改狀態

具有依赖项初始化错误的自定义程序包:ModuleNotFoundError或ImportError

Visual Studio程序包安装错误:“无法初始化PowerShell主机。”

如何使用需要异步初始化的提供程序配置angular?

如何使用JSON数据初始化多个nestjs提供程序?

调用程序包时,由于“内部”保护级别,无法访问“ CircularProgressView”初始化程序

如何使用useState钩子和Typescript初始化状态

如何使用api的数据初始化状态

如何使用redux-form从状态初始化FieldArray?

如何使用状态对象作为参数初始化视图?

如何在 Swift UI 中初始化状态变量而不出现错误“无法在属性初始化程序中使用实例成员‘XXX’;”

如何使用对象初始化程序初始化WebClient?

使用函数初始化反应状态

如何使用javax动态servlet注册配置多个Jersey提供程序包

如何在Flutter中使用提供程序包创建全局变量?

如何使用 Flutter 提供程序包从列表中添加和删除项目?

如何使用提供程序包 Flutter/Dart 按 id 过滤?

哪个软件包提供了Postgresql初始化scipt?

使用聚合初始化和成员初始化程序初始化结构

如何在 SwiftUI 中的预览提供程序中初始化数据

如何在Kotlin中编写包级静态初始化程序?

如何使用初始化列表初始化地图

如何初始化事件处理程序

未使用初始化程序的结果?

Firebase初始化提供程序类未找到异常

访问VBA:无法初始化数据提供程序

C ++程序为初始化变量提供垃圾值

错误:为函数__THROW __asm提供了初始化程序