如何制作 transparent/wallpaper-showing Flutter 应用

How to make a transparent/wallpaper-showing Flutter app

基本上,我只是为了好玩而尝试使用 Flutter 编写启动器,而我坚持的一件事是主屏幕。我正在努力做到这一点,以便您可以通过 应用程序和墙纸看到。我像这样更改了 AndroidManifest.xml

<activity android:name=".MainActivity"
          android:launchMode="singleTop"
          android:theme="@android:style/Theme.Wallpaper.NoTitleBar"  <!-- I changed this line -->
          android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection"
          android:hardwareAccelerated="true"
          android:windowSoftInputMode="adjustResize">

并将其放入我的 main.dart:

return new MaterialApp(
  title: 'Launcher',
  theme: new ThemeData(
    scaffoldBackgroundColor: Colors.transparent,  // <-- this line
  ),
  home: new HomeScreen(),
);

但它仍然不起作用。我错过了什么?

我相信您 运行 发现了 Flutter 引擎中的一个错误,该错误由 https://github.com/flutter/flutter/issues/9627 跟踪。在撰写本文时,该错误已确定 Flutter 引擎(Flutter 的 C++ 部分)默认情况下在 Android 上用黑色填充整个 FlutterView 区域,然后再让 Dart 代码绘制。

现在(2019 年 7 月)可以实现透明的颤动背景。

正在讨论 Android 问题 here

怎么做:

  • This评论有详细解释

一些透明的工作Android演示应用程序:

  • 显示设备壁纸的透明应用程序GitHub repo
  • 一个透明的应用程序,显示在其他应用程序之上。 GitHub repo

iOS 问题是 here

A comment 建议可以在 iOS 上设置透明背景。

可以通过在ViewController.

中添加以下行来实现
flutterViewController.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext

并设置flutterViewController.isViewOpaque = false