QML离线缓存,文件下载和Native集成

使用QML控制应用程序

由于QML和C ++无缝集成,因此可以公开任何Native功能以供QML使用。可用的Qt组件已经允许与传感器,SQLite数据库等一起使用。Felgo SDK提供了许多附加功能。例如,在运行时使用DownloadableResource项目获取资产。它使您可以保持初始应用程序的大小很小,并在需要时动态加载内容-所有这些都通过QML进行。  

您可以创建自己的C ++组件,也可以向QML注册它们。对于iOS和Android应用,您甚至可以添加用于

  • 使用Obj-C编织本机iOS代码

  • 或通过JNI运行Java Android代码。

请注意,这样的本机代码需要为每个平台自定义实现。Felgo已经为您提供了NativeUtils组件。它提供了很多功能,例如本机对话框,相机和图像选择器或共享。该SDK还附带了许多Felgo插件这些插件集成了第三方框架以用于:    

  • 服务器触发或本地通知

  • 应用内购买和货币化

  • 分析和崩溃报告

  • Firebase身份验证和数据库

  • 以及更多。

您可以做什么没有任何限制-可以完全使用QML管理完整的应用程序逻辑。您甚至可以使用WorkerScript在不同的线程中执行计算。 

使用JsonListModel和脱机缓存的应用示例

即使没有互联网访问,移动应用也必须能够正常运行。该存储组件允许将数据缓存在一个简单的key-value存储。它也可以保存完整的JSON结构。数据被序列化并自动转换为字符串格式。  

因此,您可以使用Storage来使用先前缓存的JSON数据初始化JsonListModel。这样,即使获取请求失败,您的应用也可以显示数据的最新状态:    

import Felgo 3.0
import QtQuick 2.0

App {
  
  // on app start: fetch data
  Component.onCompleted: {
    fetchData()
  }
  
  // list page
  NavigationStack {
    Page {
      title: "Todo List"
      
      AppListView {
        id: listView
        anchors.fill: parent
        
        // property for json data, used as source for JsonListModel
        property var jsonData: []
        
        // use JsonListModel as model
        model: JsonListModel {
          source: listView.jsonData
          keyField: "id"
          fields: ["id", "title"]
        }
        
        // delegate
        delegate: SimpleRow {
          text: title
        }
      }
    }
  }
  
  // storage for caching
  Storage {
    id: cache
  }
  
  // fetch data from cache or from api
  function fetchData() {
    // check cached value first
    var cachedData = cache.getValue("todos")
    if(cachedData)
      listView.jsonData = cachedData
    
    // load new data from api
    HttpRequest.get("https://jsonplaceholder.typicode.com/todos")
    .timeout(5000)
    .then(function(res) { dataFetched(res.body) })
    .catch(function(err) { console.err("Fetch failed:"+err) });
  }
  
  // dataFetched gets called on success of http request
  function dataFetched(jsonData) {
    // cache new data before updating the model 
    cache.setValue("todos", jsonData)
    listView.jsonData = jsonData // set retrieved json data as model for list
  }
}

除了获取数据之外,还可以在本地缓存新条目。该应用程序再次与Internet连接后,将它们保存到您的服务器并删除本地条目。

以下是完整的演示应用程序,可以浏览和创建待办事项列表条目。您可以在GitHub上找到有关缓存,本地草稿条目,列表过滤等的完整示例: 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值