Как вызвать метод из navbar во флаттере - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь вызвать метод из панели навигации, когда я вызываю объект, выбранное изображение не появляется на экране.

Моя цель состоит в том, чтобы сделать это, когда я нажимаю в Галерее и выбираю новое изображение, показываю это, как на экране 2.

First screen to select way to choose the image

The screen that I want to show when I selected the photo

Код для этого взаимодействия,

  File imageFile;

  _openGallery(BuildContext context) async{
    var picture = await ImagePicker.pickImage(source:ImageSource.gallery);
    this.setState((){
      imageFile = picture;
    });
    Navigator.of(context).pop();
  }


  _openCamera(BuildContext context) async{
    var picture = await ImagePicker.pickImage(source:ImageSource.camera);
    this.setState((){
      imageFile = picture;
    });
    Navigator.of(context).pop();
  }

И виджет сборки

@override
  Widget build(BuildContext context) {
    return Scaffold(


        body: Container(
          child: Center(
              child: Column(
              mainAxisAlignment: MainAxisAlignment.spaceAround,
              children: <Widget>[
                _decideImageView(),
                RaisedButton(onPressed: (){
                  _showChoiceDialog(context);
                },child: Text('Select Image'),),
                _decideButton(context)

              ],
            ),
          ),
        ),

        bottomNavigationBar: BottomNavigationBar(
        type:BottomNavigationBarType.fixed,
        onTap: (int index) {
          if (index==0)
            _openGallery(context);
          if (index == 1)
            _openCamera(context);
        },
        items: [
          BottomNavigationBarItem(
            icon: Icon(Icons.photo_library),
            title: Text('Home')
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.camera_alt),
            title: Text('Camera')
          ),
         ],
      ),

    );
  }

Функция для определения, если выВы увидите текст с просьбой выбрать изображение или вернуть изображение на экране. Этот метод называется _decideImageView.

  Widget _decideImageView(){
    if(imageFile == null){
      return Text('Kein Bild ausgewählt',
       style: TextStyle(
                                    color:Colors.black,
                                    fontFamily: 'Lato', 
                                    fontSize: 25,
                                    letterSpacing: 1.0
                                    ),          );
    }
    else{

      return Image.file(imageFile,width:400,height:400);
    }
  }

1 Ответ

1 голос
/ 30 октября 2019

Попробуйте удалить это: Navigator.of (context) .pop ();о двух способах выбора изображения, это работает для меня, но вы должны знать, что это не лучший способ создания средства выбора изображений.

...