Метод '[]' был вызван на нуль. Получатель: null Пробный вызов: [] (0) - PullRequest
0 голосов
/ 09 февраля 2020

Эта ошибка возникает при попытке включить камеру. Как я могу исправить ошибку. пожалуйста, помогите ...

════════ 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),
    );
  }
}

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

еще раз спасибо .. я исправил это, когда добавил этот код

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

это мне очень помогло, спасибо

0 голосов
/ 09 февраля 2020

Я видел ваш список камер; но он не был инициализирован нигде в вашем коде. Очевидно, что приложение вызовет sh прямо здесь, когда вы вызываете камеры [0].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...