Flutter - проблема с ImagePicker - PullRequest
0 голосов
/ 10 июля 2020
import 'package:flutter/material.dart';
import 'login_page.dart';
import 'sign_in.dart';
import 'package:image_picker/image_picker.dart';
import 'package:firebase_ml_vision/firebase_ml_vision.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

class FirstScreen extends StatelessWidget {
  var myDatabase = Firestore.instance;
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Center(child: Text('IT Interns are the best!!')),
        ),
        backgroundColor: Colors.white,
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Welcome to Krea\'s Official App!',
              textAlign: TextAlign.center,
              style: TextStyle(
                  fontWeight: FontWeight.w800,
                  fontSize: 40.0,
                  color: Colors.black),
            ),
            SizedBox(height: 30.0),
            Container(
              child: Image.asset('assets/krea.png'),
            ),
            SizedBox(
              height: 50.0,
              width: 250.0,
              child: Divider(color: Colors.blueAccent),
            ),
            Icon(
              Icons.face,
              size: 120,
            ),
            Text(
              'Akshay Jain',
              style: TextStyle(
                fontSize: 40.0,
                color: Colors.black,
                fontWeight: FontWeight.bold,
              ),
            ),
            Text(
              'Krea_StudentLife_Level_100',
              style: TextStyle(
                fontSize: 18.0,
                color: Colors.black,
                fontWeight: FontWeight.normal,
                letterSpacing: 1.0,
              ),
            ),
            SizedBox(height: 20.0),
            RaisedButton(
                onPressed: () {
                  ImagePicker.getImage(source: ImageSource.camera)
                      .then((photo) {
                    BarcodeDetector detector = FirebaseVision.instance
                        .barcodeDetector(BarcodeDetectorOptions(
                            barcodeFormats: BarcodeFormat.qrCode));
                    detector
                        .detectInImage(FirebaseVisionImage.fromFile(photo))
                        .then((barcodes) {
                      if (barcodes.length > 0) {
                        var barcode = barcodes[0]; // Pick first barcode

                        myDatabase.collection("qr_codes").add({
                          "raw_data": barcode.rawValue,
                          "time": new DateTime.now().millisecondsSinceEpoch
                        }).then((_) {
                          print("One document added.");
                        });

                        showDialog(
                            context: context,
                            builder: (context) {
                              return new AlertDialog(
                                title: new Text("QR Code Contents"),
                                content: new Text(barcode.rawValue),
                                actions: <Widget>[
                                  new FlatButton(
                                      onPressed: () {
                                        Navigator.of(context).pop();
                                      },
                                      child: new Text("OK"))
                                ],
                              );
                            });
                      }
                    });
                  });
                },
                child: new Text("Capture QR Code")),
            FloatingActionButton.extended(
              onPressed: () {
                signOutGoogle();
                Navigator.of(context).pushAndRemoveUntil(
                    MaterialPageRoute(builder: (context) {
                  return LoginPage();
                }), ModalRoute.withName('/'));
              },
              backgroundColor: Colors.blue,
              icon: Icon(Icons.lock),
              label: Text('Sign Out'),
            ),
          ],
        ),
      ),
    );
  }
}

Ошибка, которую мы получаем, заключается в том, что в строке 62 говорится, что член экземпляра getImage не может быть доступен с использованием доступа stati c. вот где весь код терпит неудачу. Кажется, это проблема с пакетом, но из-за строки getImage QR-коды не обрабатываются.

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Сначала вам нужно получить экземпляр ImagePicker ():

class FirstScreen extends StatelessWidget {
  var picker = ImagePicker();

А затем в вашей кнопке использовать этот созданный экземпляр:

picker.getImage(source: ImageSource.camera).then((photo) {});
0 голосов
/ 10 июля 2020

Сообщение об ошибке говорит само за себя. Замените ImagePicker.getImage вызовом экземпляра вместо вызова класса stati c, например

var picker = ImagePicker;
picker.getImage(...)
...