【问题标题】:Flutter: How to add SVG as Splash Screen?Flutter:如何将 SVG 添加为启动画面?
【发布时间】:2021-10-24 10:36:54
【问题描述】:

我想将 Splash Screen 作为 SVG 添加到我的 Flutter 应用中,但我找不到方法

我还没有尝试过 iOS,但是通过 Android Studio、Respresso 或 SVG2Android 将其转换为矢量资产的特定 Android 方式不起作用。

此外,像 splash_screen_view 和 flutter_native_splash 这样的依赖项只能用于 JPG 和 PNG。

有人知道原因或替代方法吗?

有关项目的更多详情

@drawable/launch_background.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/black" />

    <item android:drawable="@drawable:splashscreen" android:gravity="center" />

    <!-- <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/splashscreen" />
    </item> -->
</layer-list>

main/AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ro.adservio.app.adservio">
   <application
        android:label="adservio"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/splashScreenTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">

            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />
    
            <meta-data
              android:name="io.flutter.embedding.android.SplashScreenDrawable"
              android:resource="@drawable/launch_background"
              />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
</manifest>

提前感谢您的帮助! :)

【问题讨论】:

  • 你的 SVG 是 SVG 图像吗?
  • 是的,它是 SVG 图像 :) 我也尝试过使用其转换后的矢量资产
  • 所以你可以使用flutter_svg => pub.dev/packages/flutter_svg这个包并手动延迟3秒然后导航到其他屏幕

标签: android ios flutter dart mobile


【解决方案1】:

对于SplashScreen中的SVG Image,需要添加flutter_svg包=>https://pub.dev/packages/flutter_svg

有关更多信息,您可以查看此软件包文档

对于基本信息,您需要在 pubspec.yaml 文件中定义您的 SVG 图像,像这样

  assets:
    - assets/yourImageName.svg
class SplashScreen extends StatefulWidget {
  const SplashScreen({Key key}) : super(key: key);

  @override
  _SplashScreenState createState() => _SplashScreenState();
}

class _SplashScreenState extends State<SplashScreen> {
  
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    startTime();
  }

  startTime() async {
    var _duration = Duration(seconds: 4);
    return Timer(_duration, () {
 //Navigate to another screen or anyOther function, like i set duration 4 sec so this function run after 4 sec
    });
  }
  
  @override
  Widget build(BuildContext context) {
    return Container(
      height: MediaQuery.of(context).size.height,
      width: MediaQuery.of(context).size.height,
      child: SvgPicture.asset("yourSVGImagePath", //just like you define in pubspec.yaml file
          color: Colors.red, semanticsLabel: 'A red up arrow'),
    );
  }
}

如果这对您有帮助,请竖起大拇指回答并右打勾,谢谢:)

【讨论】:

  • 其实也没用?我不得不将SVG设置为Splash Screen,而不是在Widget中
  • 那么如何在没有 Flutter 小部件帮助的情况下将 SVG 实现为闪屏?因为颤振是基于小部件来构建应用程序的:) 另外,您还没有提供颤振代码以便更好地理解
  • 启动画面是加载屏幕,应用程序将从文件夹加载启动画面,然后渲染您的小部件。如果我将它添加为小部件,我将有一个空白的初始屏幕,然后是一个初始屏幕小部件。
  • youtube.com/watch?v=8ME8Czqc-Oc,look 在此视频中可能会对您有所帮助。
  • 是的,我使用了一个类似的包,想法是 PM 想使用 SVG 作为启动画面的背景图像,但最后我发现这是不可能的。使用这些库或在 android 和 ios 目录中手动操作不适用于 SVG,仅适用于 PNG 和 JPG。但是非常感谢您的帮助! :)
猜你喜欢
  • 2022-01-08
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多