用户单击屏幕或打开键盘时如何隐藏状态栏和导航栏?

时间:2019-07-20 09:44:07

标签: flutter dart

我有一个全屏的Flutter应用程序。 但是问题是当用户触摸屏幕时,出现顶部状态栏,或者当用户触摸文本字段时,出现底部状态栏和顶部状态栏。

如何预防此问题。

这是我的使Flutter应用全屏显示的代码:

await SystemChrome.setPreferredOrientations(
      [DeviceOrientation.landscapeRight]);
await SystemChrome.setEnabledSystemUIOverlays([]);

2 个答案:

答案 0 :(得分:1)

对于 Textfield,我解决的解决方案是在 Textfield 失去焦点时将用户返回到全屏模式(即隐藏状态和导航)...

class _SomeWidget extends State<SomeWidget> {

    FocusNode _focus = new FocusNode();

    void _onFocusChange(){
        SystemChrome.setEnabledSystemUIOverlays([]); // hide status + action buttons
    }

    @override
    void initState() {
        super.initState();
        _focus.addListener(_onFocusChange);
    }

   @override
   Widget build(BuildContext context) {
       
       return TextField(
           focusNode: _focus,
           ...
           );
    }
}

答案 1 :(得分:0)

输出:

enter image description here

我不确定您在哪里使用该电话。这是最小的代码重现。

[Test]
public void Can_Save_Valid_Changes() {
    //Arrange
    var httpContext = new DefaultHttpContext();
    var tempData = new TempDataDictionary(httpContext, Mock.Of<ITempDataProvider>());
    var mock = new Mock<IProductRepository>();
    AdminController controller = new AdminController(mock.Object);
    controller.TempData = tempData;

    Product product = new Product { Name = "Test"};

    //Act
    IActionResult result = controller.Edit(product);

    //Assert
    // check if have saved product to repo 
    mock.Verify(m => m.SaveProduct(product));
    Assert.IsNotInstanceOf<ViewResult>(result);
    Assert.IsTrue(tempData.ContainsKey("message"));
}