小编Mic*_*ton的帖子

将 gif 添加到 Jetpack Compose 中

我想将一张 gif 放入我的应用程序中。我知道如何插入图像资源,但是当我尝试添加 gif 时,它变成了静态图像。

DrawImage(image = +imageResource(R.drawable.gif))
Run Code Online (Sandbox Code Playgroud)

有没有人尝试过在 Jetpack Compose 中添加 gif,因为很难在网上找到如何添加 gif 文档?

android gif kotlin android-jetpack android-jetpack-compose

19
推荐指数
3
解决办法
2万
查看次数

每天午夜执行 Flutter 后台任务以处理和安排当天的通知

应用:任务提醒。用户创建一个任务并安排该任务到期的时间。

这个包flutter_local_notification允许我在用户创建此任务时安排未来的通知。如果我在任务到期时安排一个通知,那很好。

但是,如果用户忘记完成该任务并且该任务到期的日期已经过去(原始通知已经过去)。我希望应用程序每天一次继续通知用户他们尚未完成此任务,直到他们打开应用程序取消通知/将任务标记为完成。

我敢肯定其他人一定已经创建了这样的东西,但我正在努力在网上找到明确的解决方案,所以我想我会在这里问,看看人们对什么是最佳实践的意见。

我能想到的两种解决方案:


每日后台任务

每天运行一次的后台任务,以检查当天哪些任务到期和逾期,然后安排当天晚些时候的某个时间点的通知。

系列活动

  • 每天 00:00 应用程序运行后台任务,检查今天到期的任务
  • 如果任务今天到期或已过期。安排当天晚些时候的通知。
  • 如果应用程序从未打开过,这个检查和发送通知的过程每天都会重复。

每天重复通知

在“星期一”到期的示例任务

而不是每天运行后台任务。对于这个示例任务,我想我可以在星期一安排通知,同时还无限期地安排每天(星期二,星期三,星期四......)之后的每天重复通知。然后,如果用户打开应用程序并完成任务,这些重复通知将被取消。如果没有,用户每天都会收到通知,直到他们通知为止。

我认为这种方法可行,但我想避免在未来安排这么多通知,而只安排“今天”通知。因为这个应用程序可能有很多由用户创建的任务。


我的 flutter 应用程序目前仅在Android上运行,但我不想排除iOS。所以理想的方法是跨平台工作。

所有数据都存储在本地,因此我无法让后端完成数据检查和发送推送通知。

关于这个问题的解决方案的想法?

notifications android android-notifications dart flutter

9
推荐指数
1
解决办法
2318
查看次数

使用 Google Analytics 进行 Flutter 日志事件

我已经在我的 flutter 应用程序中设置了 Google Analytics。这一切似乎都按标准工作,数据通过并显示在分析控制台屏幕上,向用户显示、事件计数之类的事情。

我看到默认事件是:user_engagement、screen_view、session_start、first_open、app_remove、app_clear_data。

这些都有很好的事件计数数据。我想在 flutter 应用程序中设置自己的自定义事件。我已经尝试过这个...

_sendAnalyticsEvent() async {
    FirebaseAnalytics analytics = FirebaseAnalytics();

    await analytics.logEvent(
      name: "save_plant",
      parameters: <String, dynamic>{
        'plant_name': currentPlant.name,
        'plant_species': currentPlant.species,
        'plant_group': currentPlant.group,
        'new_plant': widget.newPlant
      },
    );
  }
Run Code Online (Sandbox Code Playgroud)

......但这些事件似乎没有任何进展。我在使用 flutter 应用程序执行自定义事件时是否遗漏了一些东西?我在 android 应用程序目录中正确拥有 google-services.json 文件。

android google-analytics dart flutter firebase-analytics

7
推荐指数
1
解决办法
1万
查看次数

Flutter Splash Screen 在加载时将图像拉伸一秒钟

我正在使用 Flutter 创建一个新应用程序,并希望在初始启动屏幕上添加自定义图像。

图像出现在初始屏幕上,但在大约半秒钟内它似乎被拉伸,看起来不太好。

我一直在寻找,但一直在努力寻找有同样问题的人。

有任何想法吗?

我曾尝试使用 mipmap 提供可变大小的图像,但产生相同的结果。

launch_background.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/green" />
    <item>
        <bitmap
            android:gravity="center_horizontal"
            android:src="@drawable/ic_logo"
            android:tileMode="disabled"/>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

样式文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <item name="android:windowBackground">@drawable/launch_background</item>
        <item name="android:windowFullscreen">false</item>
    </style>
    <color name="green">#b7dd05</color>
</resources>
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.flutter_app">

    <!-- io.flutter.app.FlutterApplication is an android.app.Application that
         calls FlutterMain.startInitialization(this); in its onCreate method.
         In most cases you can leave this as-is, but you if you want to provide
         additional functionality it is fine to subclass or …
Run Code Online (Sandbox Code Playgroud)

xml android splash-screen bitmap flutter

6
推荐指数
1
解决办法
5614
查看次数

Flutter 应用程序,每天在 x 时间检查以查看是否需要向用户发送本地通知

我对如何完成这项任务有点不确定,希望得到一些澄清。

APP:它提醒人们给植物浇水,用户可以指定他们希望这样做的频率。

我面临的问题是如何向用户发送本地通知。而不是为他们有预定时间关闭的每个新工厂设置单独的通知。我希望我可以指定一天中的某个时间(比如早上 8:00),我的应用程序会在其中运行我所有的植物并检查今天是否需要浇水。如果他们这样做了,它会通过本地通知告诉用户,例如“今天你有 5 株植物要浇水”,当他们点击它时,他们会进入应用程序,向他们显示它们是什么植物。

  • 我应该使用警报管理器 api 进行每日警报吗?但是这可以运行一个脚本来检查植物数据,然后发送本地通知。
  • 或者最好只为每个工厂附加一个单独的本地通知?

现在我仍然是 Android/Flutter 开发的新手,只是有点不确定这方面的最佳实践是什么?希望我说的够清楚,很高兴回答任何进一步的问题。在此先感谢您的帮助。

android android-alarms android-notifications dart flutter

6
推荐指数
1
解决办法
2134
查看次数

Jetpack Compose 和 Android Room 兼容性

我正在尝试在我的 Jetpack Compose 项目中设置 Android Room。但是,当尝试添加...

kapt "androidx.room:room-compiler:2.2.3"
Run Code Online (Sandbox Code Playgroud)

...到应用程序 build.gradle 依赖项。我的构建失败并出现错误...

e: java.lang.NoSuchMethodError: org.jetbrains.kotlin.codegen.state.GenerationState$Builder.isIrBackend(Z)Lorg/jetbrains/kotlin/codegen/state/GenerationState$Builder;
Run Code Online (Sandbox Code Playgroud)

关于为什么会这样的任何见解?我们可以将 Android Room 与 Jetpack Compose 一起使用吗?

android kotlin android-room android-jetpack android-jetpack-compose

6
推荐指数
1
解决办法
1554
查看次数

导航抽屉用另一个有问题的保留抽屉选项的片段替换片段

我有一个基本的应用程序,包含抽屉布局。抽屉中的每个选项都会打开一个新的片段页面供用户查看。这是抽屉布局代码。

<androidx.drawerlayout.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</androidx.drawerlayout.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

这是app_bar_main.xml 代码。

<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".DashBoardActivity">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </com.google.android.material.appbar.AppBarLayout>

    <include layout="@layout/content_main" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

这是 content_main.xml。还有主要活动 DashBoardActivity.kt

class DashBoardActivity : AppCompatActivity() {

    private lateinit var appBarConfiguration: AppBarConfiguration

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_dashboard)

        val toolbar: Toolbar = findViewById(R.id.toolbar)
        setSupportActionBar(toolbar)

        val drawerLayout: DrawerLayout = …
Run Code Online (Sandbox Code Playgroud)

xml android android-layout android-fragments kotlin

2
推荐指数
1
解决办法
2123
查看次数