小编Sow*_*ber的帖子

连接包的 onConnectionChanged() 被多次调用

我已经使用Connectivity 的自述文件设置了一项基本检查来检查互联网连接。

@override
  void initState() {
    super.initState();
    subscription = Connectivity()
        .onConnectivityChanged
        .listen((ConnectivityResult result) {
      // Got a new connectivity status!
      print("Check: $result");
    });

  }

  @override
  void dispose() {
    print("Disposing Connection ...");
    super.dispose();
    subscription.cancel();
  }

Run Code Online (Sandbox Code Playgroud)

我没有对代码本身进行任何重大更改。onConnectivityChanged()但是,当我检查日志时,每次连接发生变化时,应用程序似乎都会调用该函数两次。

这是日志:

Restarted application in 1,611ms.
I/flutter (17481): Check: ConnectivityResult.none
I/flutter (17481): Check: ConnectivityResult.mobile
I/flutter (17481): Check: ConnectivityResult.mobile
I/flutter (17481): Check: ConnectivityResult.none
I/flutter (17481): Check: ConnectivityResult.none
I/flutter (17481): Check: ConnectivityResult.wifi
I/flutter (17481): Check: ConnectivityResult.wifi
Run Code Online (Sandbox Code Playgroud)

第一个结果是ConnectivityResult.none并且只出现一次。因为应用程序仅在当前小部件加载时检查连接一次。然而,在第一个(正确的)结果之后,所有结果都会获得两次,即使它们应该只出现一次。

这导致我的应用程序出现一些复杂情况。每次看到连接更改时,我都会向用户显示一个对话框,其中包含以下选项:

  • 您离线

  • 您正在使用移动网络

但由于检查在连接更改时以某种方式运行两次,因此我看到了两个对话框。不仅如此,因为当我从上下文中弹出对话框时,应用程序会再次加载并检查initState()是否导致对话框再次显示。除非手机连接到 …

android connectivity dart flutter

7
推荐指数
0
解决办法
1728
查看次数

物料设计-将卡扩展(过渡)到全屏

我正在努力实现Android版Material Design所描述的卡片视图的扩展功能。

在他们的设计指南中,他们展示了Card组件的不同布局,但是一个示例显示了Card过渡到全屏 onClick的过程。

这是他们网站上显示的转换:

卡过渡到全屏

我已经尝试过实现这样的功能,但是比他们的指导示例所建议的要花更多的工作...材料设计如何实现这一目标?是否有内置功能?我应该手动翻译卡片并使其适合屏幕大小,还是我应该对整个卡片视图使用全新的片段或活动?

这是包含该示例的设计指南,但是没有任何有关过渡的说明,在文档化的“ 开发”页面上也没有任何内容,这实际上是最小的。

android material-design android-cardview

5
推荐指数
1
解决办法
883
查看次数

失败的断言:!_debugLocked 在 Flutter 中使用 Navigator.popUntil() 时不为真

在我的 flutter 应用程序中,我使用此代码转到我的仪表板页面,但第一次没有这样做,我收到了debugLocked错误消息。

应用程序中的启动页面是一个路由器,它检查共享首选项“sessionid”,如果设置,则将用户直接带到仪表板,否则将他们带到登录。

如果没有下面的代码,我就可以很好地访问我的仪表板,Navigator.pushReplacement()但是随后,appBar 上出现了一个后退箭头。此后退按钮将应用程序带回路由器。

我搜索了有关如何从导航器中删除所有屏幕的答案,以下是我发现的内容。

Navigator.of(context).popUntil(ModalRoute.withName(Dashboard.id));
Run Code Online (Sandbox Code Playgroud)

使用上面的代码给了我debugLocked错误。有没有办法缓解这个问题?或者有没有其他有效的方法可以从上下文中删除屏幕?设置是否automaticallyImplyLeadingfalse帮助?因为只有在有人登录或注册后才会出现此错误。

navigation dart flutter flutter-widget

5
推荐指数
1
解决办法
8584
查看次数

通过方法通道从 Flutter 发送 Map/JSON 到 Android

我已经在 Dart 和 Kotlin 中建立了一个基本的方法通道

飞镖代码


  Future<void> _updateProfile() async {
    try {
      var result = await platform.invokeMethod('updateProfile');
      print(result);
    } on PlatformException catch (e) {
      print('Failed to get battery level: ${e.message}');
    }

    setState(() {
//      print('Setting state');
    });
  }
Run Code Online (Sandbox Code Playgroud)

科特林代码

MethodChannel(flutterView, channel).setMethodCallHandler { call, result ->
      if(call.method == "updateProfile"){
        val actualResult = updateProfile()

        if (actualResult.equals("Method channel Success")) {
          result.success(actualResult)
        } else {
          result.error("UNAVAILABLE", "Result was not what I expected", null)
        }
      } else {
        result.notImplemented()
      }
    }
Run Code Online (Sandbox Code Playgroud)

我想将 JSON/Map 数据传递给 Kotlin …

android dart kotlin flutter flutter-platform-channel

3
推荐指数
1
解决办法
2987
查看次数

我可以用初始值启动 dart 秒表吗?

我正在查看秒表的文档,我确信他们没有方法以初始值启动秒表。

我正在开发一个需要测量经过时间的应用程序。因此,秒表成为这里显而易见的选择。但是,有一个用例,应用程序的用户在清除后台应用程序时可能会意外关闭应用程序。

由于现在在后台运行 headless dart 代码有点模糊,因此我认为最好跟踪时间和时间间隙(如果在意外关闭后恢复应用程序时有任何时间间隙)。像下面这样的单独的数据对象可以跟踪时间以及秒表是否正在运行......

class StopwatchTracker{

  final stopwatch;
  final lastUpdated;
  final isRunning;
  final systemTime;

  StopwatchTracker({this.stopwatch, this.lastUpdated, this.isRunning, this.systemTime});

}
Run Code Online (Sandbox Code Playgroud)

lastUpdated有了这个,我就有了一个包含秒表时间数据的对象。将此与 进行比较systemTime,后者将是设备的当前系统时间。lastUpdated现在,我们可以看看时间和时间之间是否存在差距systemTime。如果存在间隙,秒表应按“间隙”单位“跳跃”到时间。

StopwatchTracker对象只会在应用程序启动/恢复时初始化,每隔几秒,它就会更新时间lastUpdated。我认为逻辑是存在的,但是,正如我提到的,dart 中的 Stopwatch 类没有用起始值初始化它的方法。

我想知道是否可以扩展 Stopwatch 类来容纳一个方法来做到这一点。或者第二个选项是更新ellapsedMillis本身或添加到gap in mills然后ellapsedMillis在屏幕上显示结果。

很想听听你们的意见!

timer stopwatch dart flutter

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

如何在 Kotlin 中创建视图扩展函数

我正在尝试在 Kotlin 中创建一个扩展函数。我确实尝试了几个教程,但不太明白如何实现这个教程。

我正在尝试创建一个setWidth()这样的函数

//Find my_view in the fragment
val myView = v.findViewById<RelativeLayout>(R.id.my_view)

//Then use the extension function
myView.setNewWidth(500)

Run Code Online (Sandbox Code Playgroud)

这就是我定义扩展函数的方式


private fun View?.setNewWidth(i: Int) {
    val layoutParams: ViewGroup.LayoutParams = View.layoutParams
    layoutParams.width = i
    View.layoutParams = layoutParams
}

Run Code Online (Sandbox Code Playgroud)

我不明白我需要在这里做什么。

我想将扩展函数称为myView.ExtensionFunction(),但我不知道该怎么做。教程内容不详。

extension-methods android android-view kotlin kotlin-extension

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