Средство выбора изображений с дротиками не отображается в Android 10

#flutter #dart #flutter-dependencies #imagepicker

#flutter #dart #зависимости от flutter #средство выбора изображений

Вопрос:

Я новичок в flutter. Я проверял, чтобы использовать image_picker в flutter. Но когда я попытался проверить image_picker на своем телефоне Andorid (10), оно не будет отображаться. Я не знаю, что произошло, я добавил android:requestLegacyExternalStorage = «true» в AndroidManifest.xml,

по-прежнему без изменений, я не знаю, что делать? Пожалуйста, помогите мне

     import 'package:flutter/material.dart';
    import 'package:image_picker/image_picker.dart';
    import 'package:path/path.dart';
    import 'package:path_provider/path_provider.dart';

    void main() {
      runApp(MyApp());
    }

    class MyApp extends StatelessWidget {
      @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  File _fileimage;

  final _picker = ImagePicker();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              _fileimage != null
                  ? FileImage(_fileimage)
                  : Text('No image selected'),
              RaisedButton(
                onPressed: () => _takePicture,
                child: Text('hi'),
              )
            ],
          ),
        ),
      ),
    );
  }

  void _takePicture() async {
    final pickedImage = await _picker.getImage(source: ImageSource.gallery);

    // if (pickedImage == null) {
    //   return;
    // }

    File tmpFile = File(pickedImage.path);

    final Directory directory = await getApplicationDocumentsDirectory();
    final String path = directory.path;

    final String fileName =
        basename(pickedImage.path); // Filename without extension
    final String fileExtension = extension(pickedImage.path); // e.g.

    tmpFile = await tmpFile.copy('$path/$fileName$fileExtension');
    setState(() => _fileimage = tmpFile);
  }
}
  

Комментарии:

1. какие-либо ошибки при отладке?

2. какие-либо обновления по нему? У меня такая же проблема

Ответ №1:

Я обнаружил проблему с вашим кодом. Вы использовали «Изображение файла» в «Виджете» обязательно. Поскольку ‘FileImage’ возвращает ‘ImageProvider’, вам следует использовать ‘Image.file()’ вместо ‘FileImage’.

 import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  File _fileimage;

  final _picker = ImagePicker();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              _fileimage != null
                  ? Image.file(_fileimage)
                  : Text('No image selected'),
              RaisedButton(
                onPressed: () async {
                  _takePicture();
                },
                child: Text('hi'),
              )
            ],
          ),
        ),
      ),
    );
  }

  void _takePicture() async {
    final pickedImage = await _picker.getImage(source: ImageSource.gallery);

    // if (pickedImage == null) {
    //   return;
    // }

    File tmpFile = File(pickedImage.path);

    final Directory directory = await getApplicationDocumentsDirectory();
    final String path = directory.path;

    final String fileName =
        basename(pickedImage.path); // Filename without extension
    final String fileExtension = extension(pickedImage.path); // e.g.

    tmpFile = await tmpFile.copy('$path/$fileName$fileExtension');
    setState(() => _fileimage = tmpFile);
  }
}
  

Комментарии:

1. есть ли какой-либо способ подогнать по ширине экрана, используя Image.file ()

2. Container( decoration: BoxDecoration( color: Colors.black, image: DecorationImage( image: FileImage(_fileimage), fit: BoxFit.contain, ), ), )