如何修复 Flutter 中 Provider 包的 "Failed assertion: 'create != null': is not true" 错误?
How to fix "Failed assertion: 'create != null': is not true" error with Provider package in Flutter?
这是来自 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' 小部件中(使用包版本 provider: ^4.3.2 in pubspec.yaml > 运行 '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
),
);
}
}
提供程序小部件具有必需的创建属性。
您应该使用 'create' 创建您要提供的对象。
return Provider(
create: (context)=> ObjectToBeProvidedHere(),
child: MaterialApp(
home:
TasksScreen(), // matches "TasksScreen" class created on tasks_screen.dart
),
);
这是来自 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' 小部件中(使用包版本 provider: ^4.3.2 in pubspec.yaml > 运行 '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
),
);
}
}
提供程序小部件具有必需的创建属性。
您应该使用 'create' 创建您要提供的对象。
return Provider(
create: (context)=> ObjectToBeProvidedHere(),
child: MaterialApp(
home:
TasksScreen(), // matches "TasksScreen" class created on tasks_screen.dart
),
);