小编Won*_*mmy的帖子

颤振:从UI调用异步代码的最佳实践

我正在开发一个Flutter应用程序,但想知道从UI调用异步代码时我该怎么办 - 让我们说一下UI小部件的构建方法.

例如,我的应用通过服务类连接Firebase,该服务类使用Async-Await样式从Firebase获取记录.使用await确保我的服务类的方法将在返回UI端之前完成记录检索.

但是,由于服务类的方法被标记为异步,因此在服务类的方法完成之前,它会立即向调用UI小部件返回Future,并且UI代码将继续运行.

是的我可以为"then()"回调编写代码来处理检索到的记录,但是后面的小部件中的其他代码又取决于异步调用的结果呢?这是否意味着我需要在"then()"子句中嵌入所有内容,并避免在返回Future的方法调用之后添加任何执行步骤?这种使用模式的任何建议模式?

@override
Widget build(BuildContext context) {

   RealtimeDatabase.getData()  // my service class
      .then((onValue) {
        ..... // do something after the async call is completed
   }

   ..... // do something immediately before the async call is done


class RealtimeDatabase {

    Future<String> getData() async {

    DataSnapshot dataSnapshot = await FirebaseDatabase.instance.reference().orderByKey().once(); // will wait until completed
    .....
    .....
Run Code Online (Sandbox Code Playgroud)

很抱歉,如果我的描述不清楚,欢迎任何建议.

吉米

async-await dart flutter

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

离子控制器和服务:“类型错误:...不是函数”

我正在开发 Ionic 的移动应用程序并被错误卡住

TypeError: t.getCases(...).then 不是函数

以下是我的控制器和服务:

服务

starter.services.factory('appData', function() {

  return {
      getCases: function() {

        var cases =[ 
          {case_id: 1, description: 'headache'},
          {case_id: 2, description: 'fever'},
          {case_id: 3, description: 'stomachache'}
        ];

        return cases;
    }
  } 

})
Run Code Online (Sandbox Code Playgroud)

控制器

starter.controllers.controller('mainViewCtrl', function($scope, appData) {

  appData.getCases().then(function(data){
      $scope.cases = data.cases;
   });  

  console.log("mainViewCtrl completed");
})
Run Code Online (Sandbox Code Playgroud)

请注意,在构建包文件之前,我运行 gulp 脚本来合并和“丑化”所有 JS 文件。

任何帮助将非常感激。

javascript cordova ionic

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

Flutter:横幅广告与主屏幕重叠

我正在制作Flutter应用,并设法展示了AdMob横幅广告,但是该广告与应用主屏幕的底部重叠:

在此处输入图片说明

通过遵循本文,我设法使应用程序屏幕的底部正确显示,但是牺牲了persistentFooterButtons,我认为这不是理想的解决方案。 在此处输入图片说明

我正在考虑将脚手架对象和固定高度区域放入Center对象所包含的列中,类似于以下内容:

  @override
  Widget build(BuildContext context) {

    return new Center(
      child: new Column (
        crossAxisAlignment: CrossAxisAlignment.center,
        children: <Widget>[
          new Expanded (
              child:  _getScaffold(),
          ),
          new Expanded (
              child: new Container(height: 50.0,)
          )
        ],
      ),
    );
  }
Run Code Online (Sandbox Code Playgroud)

但是通过这种方式,我得到了异常“ RenderFlex底部溢出228个像素 ”:

在此处输入图片说明

谁能告诉我如何建立这样的布局?我希望脚手架的每个组件都能正确显示,并且固定高度的虚拟页脚可以与Admob的横幅广告重叠。

任何帮助都非常欢迎。

吉米

admob dart flutter

5
推荐指数
2
解决办法
1787
查看次数

从 Firebase 数据快照获取 JSON 键值

同时,我正在使用 Firebase 开发 Flutter 应用程序,这确实很有趣,当然还有一些麻烦需要克服......

我设置了一个 Firebase 数据存储,并通过 firebase_database 插件我得到了一个 DataSnapshot,返回如下:

在此处输入图片说明

FirebaseDatabase.instance.reference().child('users')
  .orderByChild('emailAddress')
  .equalTo('wonderjimmy@gmail.com').once()
  .then((onValue) {
   Map data = onValue.value;
  });
Run Code Online (Sandbox Code Playgroud)

我使用 Map 对象来保存这个 JSON。一个愚蠢的问题:如果我只想获取值“ -L474-TYYYGPvCChlZCS ”,我该怎么办?

json dart firebase firebase-realtime-database flutter

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