请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

调用showModalBottomSheet报错:No MediaQuery widget found.

课程5-16,点击右下角按钮的时候报错

问题

代码如下:

import 'dart:io';

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

void main() => runApp(PhotoPage());

class PhotoPage extends StatefulWidget {
  @override
  _PhotoPageState createState() => _PhotoPageState();
}

class _PhotoPageState extends State<PhotoPage> {
  File _image;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Photo App',
      theme:
          ThemeData(primarySwatch: Colors.blue, brightness: Brightness.light),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Image Picker Example'),
        ),
        body: Center(
          child:
              _image == null ? Text('No image selected.') : Image.file(_image),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: _pickImage,
          tooltip: '选择图片',
          child: Icon(Icons.add_a_photo),
        ),
      ),
    );
  }

  _pickImage() {
    showModalBottomSheet(
        context: context,
        builder: (context) => Container(
              height: 160,
              child: Column(
                children: <Widget>[
                  _listItem('拍照', true),
                  _listItem('从相册选择', false)
                ],
              ),
            ));
  }

  _listItem(String title, bool camera) {
    return GestureDetector(
      child: ListTile(
        leading: Icon(camera ? Icons.camera_alt : Icons.photo_library),
        title: Text(
          title,
          textDirection: TextDirection.ltr,
        ),
        onTap: () => getImage(camera),
      ),
    );
  }

  Future getImage(bool camera) async {
    var image = await ImagePicker.pickImage(
        source: camera ? ImageSource.camera : ImageSource.gallery);

    setState(() {
      _image = image;
    });
  }
}

另外,如果build方法最外层返回的Scaffold不使用MaterialApp包裹的话,也会报类似的错误

正在回答 回答被采纳积分+3

1回答

CrazyCodeBoy 2019-10-14 20:54:49

使用MediaQuery.of时要留意它所属的widget不能直接和runApp接触,需要用一个带有MaterialApp的widget包裹一下这样才能使用MediaQuery.of,这里用到了showModalBottomSheet,而showModalBottomSheet中调用了MediaQuery.of所以会报这个错误。

解决方案,可以参考课程中的方式,在使用showModalBottomSheet的widget外在包一层widget。

1 回复 有任何疑惑可以回复我~
  • 课程中代码也是报错的哈。参考课程?在哪里。我整个问答搜了,把课程全部拷贝也是报错哈。
    回复 有任何疑惑可以回复我~ 2022-08-28 21:03:39
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号