【问题标题】:flutter how to randomize splash screens in android颤动如何在android中随机化启动画面
【发布时间】:2019-08-16 09:45:20
【问题描述】:

我目前正在用 dart 编写一个颤振项目,并从颤振构建 android 应用程序。我目前有一个覆盖整个屏幕的图像作为启动屏幕。现在我想提供其他图像,以便应用在每次用户打开应用时显示随机图像。

我已经搜索过“如何为 android 随机化启动画面”,但这都需要修改一些 java 代码(但我正在编写一个 dart 项目)。是否有另一种方法,例如仅修改 .dart 和/或 .xml 代码? 我已将第二张图片添加到不同的地方,但没有任何效果。见下文:

在launch_background.xml中,下面只显示splash_screen_1图像,从不显示splash_screen_2。

<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/white" />

    <!-- You can insert your own image assets here -->
    <item>
        <bitmap
            android:gravity="fill_horizontal|fill_vertical"
            android:src="@drawable/splash_screen_1" />
        <bitmap
            android:gravity="fill_horizontal|fill_vertical"
            android:src="@drawable/splash_screen_2" />
    </item>
</layer-list>

下面只显示 splash_screen_2 图像,从不显示 splash_screen_1。

<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/white" />

    <!-- You can insert your own image assets here -->
    <item>
        <bitmap
            android:gravity="fill_horizontal|fill_vertical"
            android:src="@drawable/splash_screen_1" />
    </item>
    <item>
        <bitmap
            android:gravity="fill_horizontal|fill_vertical"
            android:src="@drawable/splash_screen_2" />
    </item>
</layer-list>

有没有办法在颤振中解决它?例如只修改 .xml 和/或 .dart 代码而无需修改 java 代码?谢谢!

【问题讨论】:

  • 你所说的“有没有一种颤动的方式”是什么意思?您的问题令人困惑。
  • 对不起,我的意思是不修改java代码,只修改.xml和/或.dart代码
  • 所以你的项目是一个普通的 android 项目,但是你想从那里运行一个 dart 类?我认为这不是一个明智的做法。如果你想要一个成熟的 Flutter 应用程序,请使用 IndexedStack 之类的东西。如果你想用 Java/Kotlin 编写一个安卓应用,你可以使用ViewSwitcher
  • 谢谢,不过我的项目不是普通的android项目,而是flutter项目。我已经在 dart 中编写了所有代码(在 java 中没有)。我想从颤振构建android应用程序。但是当我在网上搜索时,他们都提供了java解决方案,所以我很困惑。我想在 dart/xml 中有一些解决方案,但我被卡住了。

标签: android xml flutter dart


【解决方案1】:

试试这个:

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

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

Widget randomScreen(int max) {
  var rnd = Random();
  var num = rnd.nextInt(max);
  print(num);
  switch (num) {
    case 1: return SecondSplashScreen();break;
    case 2: return ThirdSplashScreen();break;
    default: return FirstSplashScreen();break;
  }
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: randomScreen(4),
    );
  }
}

class FirstSplashScreen extends StatefulWidget {
  FirstSplashScreen({Key key}) : super(key: key);

  _FirstSplashScreenState createState() => _FirstSplashScreenState();
}

class _FirstSplashScreenState extends State<FirstSplashScreen> {
  @override
  Widget build(BuildContext context) {
    return Container(
       color: Colors.blue
    );
  }
}


class SecondSplashScreen extends StatefulWidget {
  SecondSplashScreen({Key key}) : super(key: key);

  _SecondSplashScreenState createState() => _SecondSplashScreenState();
}

class _SecondSplashScreenState extends State<SecondSplashScreen> {
  @override
  Widget build(BuildContext context) {
    return Container(
       color: Colors.red
    );
  }
}


class ThirdSplashScreen extends StatefulWidget {
  ThirdSplashScreen({Key key}) : super(key: key);

  _ThirdSplashScreenState createState() => _ThirdSplashScreenState();
}

class _ThirdSplashScreenState extends State<ThirdSplashScreen> {
  @override
  Widget build(BuildContext context) {
    return Container(
       color: Colors.green
    );
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 2021-05-18
    • 1970-01-01
    相关资源
    最近更新 更多