You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用仅iPad出现Null check operator空值错误求助

Flutter iPad端出现「Null check operator used on a null value」错误

我是Flutter新手,开发的应用在iPhone上运行正常,但在iPad端触发了「Null check operator used on a null value」错误。错误由FutureBuilder<Object?>引发,栈追踪显示问题根源在course_details_screen.dart的451行unPurchasedCourseDetails方法。

错误详情

========= 组件库捕获异常 =======================================================
构建FutureBuilder<Object?>(dirty, state: _FutureBuilderState<Object?>#11868)时抛出_TypeError:
Null check operator used on a null value

相关错误组件

  • FutureBuilder<Object?>,路径:file:///Volumes/Data%201/Elmasria_App_2/user_App/lib/Screens/course_details_screen.dart:667:12

错误栈追踪(部分)

#0      _CourseDetailScreenState.unPurchasedCourseDetails (package:eclass/Screens/course_details_screen.dart:451:107)
#1      _CourseDetailScreenState.detailsSection (package:eclass/Screens/course_details_screen.dart:1062:15)
#2      _CourseDetailScreenState.scaffoldBody.<anonymous closure> (package:eclass/Screens/course_details_screen.dart:678:17)
#3      _FutureBuilderState.build (package:flutter/src/widgets/async.dart:612:55)

_app.dart代码

import 'package:eclass/Screens/blog_list_screen.dart';
import 'package:eclass/Screens/terms_policy.dart';
import 'package:eclass/localization/language_screen.dart';
import 'package:eclass/player/offline/downloads_screen.dart';
import 'package:eclass/provider/InstituteDetailsProvider.dart';
import 'package:eclass/provider/blog_provider.dart';
import 'package:eclass/localization/language_provider.dart';
import 'package:eclass/provider/InstituteProvider.dart';
import 'package:eclass/provider/compareCourseProvider.dart';
import 'package:eclass/provider/currenciesProvider.dart';
import 'package:eclass/provider/manual_payment_provider.dart';
import 'package:eclass/provider/terms_policy_provider.dart';
import 'package:eclass/provider/walletDetailsProvider.dart';
import 'package:eclass/provider/watchlist_provider.dart';
import 'package:eclass/screens/compare_course_screen.dart';
import 'package:eclass/screens/currency_screen.dart';
import 'package:eclass/screens/wallet_screen.dart';
import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_translate/flutter_translate.dart';
import 'Screens/loading_screen.dart';
import 'gateways/donate.dart';
import 'provider/cart_provider.dart';
import 'provider/content_provider.dart';
import 'provider/course_details_provider.dart';
import 'provider/recent_course_provider.dart';
import 'Screens/faq_screen.dart';
import 'Screens/instructor_faq_screen.dart';
import 'Screens/about_us_screen.dart';
import 'Screens/became_instructor_screen.dart';
import 'Screens/bundle_detail_screen.dart';
import 'Screens/category_screen.dart';
import 'Screens/child_category_screen.dart';
import 'Screens/contact_us_screen.dart';
import 'Screens/course_details_screen.dart';
import 'Screens/course_instructor_screen.dart';
import 'Screens/courses_screen.dart';
import 'Screens/edit_profile.dart';
import 'Screens/filter_screen.dart';
import 'Screens/forgot_password.dart';
import 'Screens/home_screen.dart';
import 'Screens/sign_in_screen.dart';
import 'Screens/notification_detail_screen.dart';
import 'Screens/notifications_screen.dart';
import 'Screens/purchase_history_screen.dart';
import 'Screens/sign_up_screen.dart';
import 'Screens/sub_category_screen.dart';
import 'provider/bundle_course.dart';
import 'provider/cart_pro_api.dart';
import 'provider/filter_pro.dart';
import 'provider/home_data_provider.dart';
import 'provider/payment_api_provider.dart';
import 'provider/visible_provider.dart';
import 'provider/wish_list_provider.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'provider/courses_provider.dart';
import 'provider/user_details_provider.dart';
import 'common/theme.dart' as T;
import 'provider/user_profile.dart';

// ignore: must_be_immutable
class MyApp extends StatelessWidget {
  String? token;
  MyApp(this.token);
  // This widget is the root of your application.

  static FirebaseAnalytics analytics = FirebaseAnalytics.instance;
  static FirebaseAnalyticsObserver observer =
      FirebaseAnalyticsObserver(analytics: analytics);

  @override
  Widget build(BuildContext context) {
    var localizationDelegate = LocalizedApp.of(context).delegate;

    return MultiProvider(
      providers: [
        ChangeNotifierProvider(
            create: (_) => UserDetailsProvider()), // Fetch User Details
        ChangeNotifierProvider(create: (_) => T.Theme()), // Theme Data
        ChangeNotifierProvider(create: (_) => UserProfile()),
        ChangeNotifierProvider(create: (_) => WishListProvider()),
        ChangeNotifierProvider(create: (_) => CoursesProvider()),
        ChangeNotifierProvider(create: (_) => CartProducts()),
        ChangeNotifierProvider(create: (_) => FilterDetailsProvider()),
        ChangeNotifierProvider(create: (_) => BundleCourseProvider()),
        ChangeNotifierProvider(create: (_) => HomeDataProvider()),
        ChangeNotifierProvider(create: (_) => Visible()),
        ChangeNotifierProvider(create: (_) => RecentCourseProvider()),
        ChangeNotifierProvider(create: (_) => PaymentAPIProvider()),
        ChangeNotifierProvider(create: (_) => ContentProvider()),
        ChangeNotifierProvider(create: (_) => CourseDetailsProvider()),
        ChangeNotifierProvider(create: (_) => BlogProvider()),
        ChangeNotifierProvider(create: (_) => CartProvider()),
        ChangeNotifierProvider(create: (_) => LanguageProvider()),
        ChangeNotifierProvider(create: (_) => TermsPolicyProvider()),
        ChangeNotifierProvider(create: (_) => WatchlistProvider()),
        ChangeNotifierProvider(create: (_) => ManualPaymentProvider()),
        ChangeNotifierProvider(create: (_) => InstituteProvider()),
        ChangeNotifierProvider(create: (_) => InstituteDetailsProvider()),
        ChangeNotifierProvider(create: (_) => CompareCourseProvider()),
        ChangeNotifierProvider(create: (_) => WalletDetailsProvider()),
        ChangeNotifierProvider(create: (_) => CurrenciesProvider()),
      ],
      child: LocalizationProvider(
        state: LocalizationProvider.of(context).state,
        child: MaterialApp(
          navigatorObservers: <NavigatorObserver>[observer],
          localizationsDelegates: [
            GlobalMaterialLocalizations.delegate,
            GlobalWidgetsLocalizations.delegate,
            localizationDelegate
          ],
          supportedLocales: localizationDelegate.supportedLocales,
          locale: localizationDelegate.currentLocale,
          home: token == null ? SignInScreen() : LoadingScreen(token),
          debugShowCheckedModeBanner: false,
          theme: ThemeData(fontFamily: 'Mada'),
          routes: {
            '/SignIn': (context) => SignInScreen(),
            '/courseDetails': (context) => CourseDetailScreen(),
            '/InstructorScreen': (context) => CourseInstructorScreen(),
            '/homeScreen': (context) => HomeScreen(),
            '/CoursesScreen': (context) => CoursesScreen(),
            '/signUp': (context) => SignUpScreen(),
            '/category': (context) => CategoryScreen(),
            '/subCategory': (context) => SubCategoryScreen(),
            '/childCategory': (context) => ChildCategoryScreen(),
            '/forgotPassword': (context) => ForgotPassword(),
            '/editProfile': (context) => EditProfile(),
            "/bundleCourseDetail": (context) => BundleDetailScreen(),
            "/filterScreen": (context) => FilterScreen(),
            '/notifications': (context) => NotificationScreen(),
            '/becameInstructor': (context) => BecomeInstructor(),
            '/aboutUs': (context) => AboutUsScreen(),
            '/purchaseHistory': (context) => PurchaseHistoryScreen(),
            '/contactUs': (context) => ContactUsScreen(),
            '/notificationDetail': (context) => NotificationDetail(),
            '/userFaq': (context) => FaqScreen(),
            '/instructorFaq': (context) => InstructorFaqScreen(),
            '/blogList': (context) => BlogListScreen(),
            '/languageScreen': (context) => LanguageScreen(),
            '/termsPolicy': (context) => TermsPolicy(),
            '/donate': (context) => Donate(),
            '/downloads': (context) => DownloadsScreen(),
            '/currency': (context) => CurrencyScreen(),
            '/compare': (context) => CompareCourseScreen(),
            '/wallet': (context) => WalletScreen(),
          },
        ),
      ),
    );
  }
}

内容的提问来源于stack exchange,提问作者shereif Nour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:37:32