【问题标题】:The method '[]' was called on null. Receiver: null Tried calling: [](0)在 null 上调用了方法“[]”。接收方:null 尝试调用:[](0)
【发布时间】:2020-05-24 23:58:09
【问题描述】:

当我尝试打开相机时出现此错误。我该如何解决这个错误。请帮忙...

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following NoSuchMethodError was thrown building KeyedSubtree-[<0>]:

**The method '[]' was called on null.
Receiver: null
Tried calling: [](0)**

The relevant error-causing widget was: 
  TabBarView file:///C:/Users/PC/AndroidStudioProjects/flutter_app/lib/main.dart:69:38
When the exception was thrown, this was the stack: 
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
#1      _CameraTabPageState.initState (package:flutter_app/tab_pages/camera.dart:17:42)
#2      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4355:58)
#3      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
#4      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
...
════════════════════════════════════════════════════════════════════════════════════════════════════

在 main.dart 中

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:camera/camera.dart';

//Own page imports
import 'package:flutter_app/tab_pages/camera.dart';

List<CameraDescription> cameras;
Future<void> main() async{
  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.red,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {


  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final tabs=<Tab>[
    Tab(icon: Icon(Icons.photo_camera)),
    Tab(text: "Chats",),
    Tab(text: "Status",),
    Tab(text: "Calls",),
  ];

  final tabPages=<Widget>[
    CameraTabPage(),
    Center(child: Text("Chats"),),
    Center(child: Text("Status"),),
    Center(child: Text("Calls"),),
  ];

  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      initialIndex: 1,
      length: tabs.length,
      child: CustomScrollView(
        slivers: <Widget>[
          SliverAppBar(
            snap: true,
            pinned: false,
            floating: true,
            title: Text("TellMe"),
            bottom: TabBar(tabs: tabs),
            actions: <Widget>[
              IconButton(icon: Icon(Icons.search, color: Colors.white,),onPressed: (){},tooltip: "Search",),
              IconButton(icon: Icon(Icons.menu, color: Colors.white),onPressed: (){},tooltip: "More options",),
            ],
          ),
          SliverFillRemaining(child: TabBarView(children: tabPages,),
          ),
        ],
      ),
    );
  }
}

在 camera.dart 中

import 'package:flutter/material.dart';
import 'package:camera/camera.dart';
import 'package:flutter_app/main.dart';

class CameraTabPage extends StatefulWidget {
  @override
  _CameraTabPageState createState() => _CameraTabPageState();
}

class _CameraTabPageState extends State<CameraTabPage> {
  CameraController controller;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    controller = CameraController(cameras[0],ResolutionPreset.medium);
    controller.initialize().then((_){
      if(!mounted){
        return;
      }
      setState((){});
    });
  }

  @override
  void dispose() {
    controller?.dispose();
    // TODO: implement dispose
    super.dispose();

  }
  @override
  Widget build(BuildContext context) {
    if(!controller.value.isInitialized){
      return Container();
    }
    return AspectRatio(
      aspectRatio: controller.value.aspectRatio,
      child: CameraPreview(controller),
    );
  }
}

【问题讨论】:

    标签: flutter dart compiler-errors


    【解决方案1】:

    我看到了你的列表相机;但它没有在您的代码中的任何地方初始化。所以很明显,当你调用相机[0]时,应用程序会在那里崩溃。

    【讨论】:

    • 感谢您的回答.. 但是您能帮我解决这个问题吗?
    • 我不知道你的“相机”是什么,它来自哪里。您需要提供更多信息
    • 再次谢谢你..当我添加此代码列表相机时,我已经修复它; Future main() async { WidgetsFlutterBinding.ensureInitialized();相机 = 等待可用相机(); runApp(MyApp());
    【解决方案2】:

    再次感谢您..我添加此代码时已修复它

    List<CameraDescription> cameras; 
    Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); cameras = await availableCameras(); runApp(MyApp()); 
    – Mohammad jayyousi Feb 10 at 13:34 
    

    这对我有很大帮助 谢谢

    【讨论】:

    • 请不要添加 "thanks" 作为答案。它们实际上并没有提供问题的答案,并且可能被未来的访问者视为噪音。一旦你earn足够reputation,你将获得upvote answers你喜欢的特权。这样,问题的未来访问者将看到对该答案的更高投票数,并且回答者也将获得声誉积分奖励。见Why is voting important
    猜你喜欢
    • 2021-08-26
    • 2020-12-06
    • 2021-01-14
    • 2022-08-05
    • 2021-04-17
    • 2020-07-03
    • 2021-03-29
    • 1970-01-01
    • 2022-09-26
    相关资源
    最近更新 更多