【问题标题】:How to fix "Failed assertion: 'create != null': is not true" error with Provider package in Flutter?如何修复 Flutter 中 Provider 包的“断言失败:'create != null': is not true”错误?
【发布时间】:2021-02-25 17:32:00
【问题描述】:

这是来自 Android Studio 的错误消息:

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following assertion was thrown building MyZippyApp(dirty):
'package:provider/src/provider.dart': Failed assertion: line 181 pos 16: 'create != null': is not true.

The relevant error-causing widget was: 
  MyZippyApp file:///Users/mgav/AndroidStudioProjects/streakers_journal_beta/lib/main.dart:5:23
When the exception was thrown, this was the stack: 
#2      new Provider (package:provider/src/provider.dart:181:16)
#3      MyZippyApp.build (package:streakers_journal_beta/main.dart:10:12)
#4      StatelessElement.build (package:flutter/src/widgets/framework.dart:4701:28)
#5      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4627:15)
#6      Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)

只要我将“MaterialApp”包装在“Provider”小部件中(在 pubspec.yaml 中使用包版本 provider: ^4.3.2 > 运行“Pub get”),它就会出现,然后尝试运行应用程序。

这是使用“Provider”小部件包装之前的 main.dart 代码(效果很好):

import 'package:flutter/material.dart';
import 'package:streakers_journal_beta/screens/tasks_screen.dart';
import 'package:provider/provider.dart';

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

class MyZippyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home:
          TasksScreen(), // matches "TasksScreen" class created on tasks_screen.dart
    );
  }
}

这是使用提供程序小部件包装后的 main.dart 代码:

import 'package:flutter/material.dart';
import 'package:streakers_journal_beta/screens/tasks_screen.dart';
import 'package:provider/provider.dart';

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

class MyZippyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Provider(
      child: MaterialApp(
        home:
            TasksScreen(), // matches "TasksScreen" class created on tasks_screen.dart
      ),
    );
  }
}

根据下面 Farhan Syah 的回答,这是反映他的回答(并解决了问题)的修改后的代码:

import 'package:flutter/material.dart';
import 'package:streakers_journal_beta/screens/tasks_screen.dart';
import 'package:provider/provider.dart';

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

class MyZippyApp extends StatelessWidget {
  final String testingText = 'Thank you Farhan Syah';

  @override
  Widget build(BuildContext context) {
    return Provider(
      create: (context) => testingText,
      child: MaterialApp(
        home:
            TasksScreen(), // matches "TasksScreen" class created on tasks_screen.dart
      ),
    );
  }
}

【问题讨论】:

标签: android-studio flutter flutter-provider


【解决方案1】:

Provider 小部件具有必需的创建属性。

你应该使用'create'来创建你想要提供的对象。

return Provider(
      create: (context)=> ObjectToBeProvidedHere(),
      child: MaterialApp(
        home:
            TasksScreen(), // matches "TasksScreen" class created on tasks_screen.dart
      ),
    );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-30
    • 2020-06-05
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 2021-03-07
    相关资源
    最近更新 更多