Flutter 如何将数据列表保存到本地存储

2024-04-03

我正在 flutter 上开发电影发现应用程序,我需要将正在播放的电影列表保存在本地存储上以供离线使用,那么我该怎么做 Future> getNowPlayingMovies() 异步 { 最终字符串现在正在播放= 'https://api.themoviedb.org/3/tv/airing_today?api_key= https://api.themoviedb.org/3/tv/airing_today?api_key=' + '$myapikey' + '&页=' + '1';

var httpClient = new HttpClient();
try {
  // Make the call
  var request = await httpClient.getUrl(Uri.parse(nowPlaying));
  var response = await request.close();
  if (response.statusCode == HttpStatus.OK) {
    var jsonResponse = await response.transform(utf8.decoder).join();
    // Decode the json response
    var data = jsonDecode(jsonResponse);
    // Get the result list
    List results = data["results"];
    print(results);
    // Get the Movie list
    List<moviemodel> movieList = createNowPlayingMovieList(results);
    // Print the results.
    return movieList;
  } else {
    print("Failed http call.");
  }
} catch (exception) {
  print(exception.toString());
}
return null;}



  List<moviemodel> createNowPlayingMovieList(List data) {
List<Searchmodel> list = new List();
for (int i = 0; i < data.length; i++) {
  var id = data[i]["id"];
  String title = data[i]["name"];
  String posterPath = data[i]["poster_path"];
  String mediatype = data[i]["media_type"];

  moviemodel movie = new moviemodel(id, title, posterPath, mediatype);
  list.add(movie);
}
return list; }



List<Widget> createNowPlayingMovieCardItem(
  List<moviemodel> movies, BuildContext context) {
// Children list for the list.
List<Widget> listElementWidgetList = new List<Widget>();
if (movies != null) {
  var lengthOfList = movies.length;
  for (int i = 0; i < lengthOfList; i++) {
    Searchmodel movie = movies[i];
    // Image URL
    var imageURL = "https://image.tmdb.org/t/p/w500/" + movie.posterPath;
    // List item created with an image of the poster
    var listItem = new Padding(
      padding: const EdgeInsets.all(8.0),
      child: new Container(
        width: 105.0,
        height: 155.0,
        child: new Column(
          children: <Widget>[
            new GestureDetector(
              onTap: () {
                Navigator.push(
                  context,
                  new MaterialPageRoute(
                      builder: (_) => new Detail(movie.id)),
                );
              },
              child: new Container(
                width: 105.0,
                height: 155.0,
                child: new ClipRRect(
                  borderRadius: new BorderRadius.circular(7.0),
                  child: new Hero(
                    tag: movie.title,
                    child: new FadeInImage.memoryNetwork(
                      placeholder: kTransparentImage,
                      image: imageURL,
                      fit: BoxFit.cover,
                    ),
                  ),
                ),
                decoration: new BoxDecoration(boxShadow: [
                  new BoxShadow(
                      color: Colors.black12,
                      blurRadius: 10.0,
                      offset: new Offset(0.0, 10.0)),
                ]),
              ),
            ),
            new Padding(
              padding: const EdgeInsets.only(top: 18.0),
              child: new Text(
                movie.title,
                maxLines: 2,
              ),
            )
          ],
        ),
      ),
    );
    ;
    listElementWidgetList.add(listItem);
  }
} else {
  print("no movie search");
}
return listElementWidgetList;}

谢谢你!


Use path_provider :

  1. 找到正确的本地路径:



    Future get _localPath async {
      final directory = await getApplicationDocumentsDirectory();
      return directory.path;
    }

  
  1. 创建对文件位置的引用



    Future get _localFile async {
      final path = await _localPath;
      return File('$path/yourfile.txt');
    }

  
  1. 将数据写入文件:



    Future writeCounter(int counter) async {
      final file = await _localFile;

      // Write the file
      return file.writeAsString('blah bla blah');
    }

  
  1. 从文件中读取数据:



    Future readCounter() async {
      try {
        final file = await _localFile;

        // Read the file
        String contents = await file.readAsString();

        return int.parse(contents);
      } catch (e) {
        // If we encounter an error, return 0
        return 0;
      }
    }

  

如果您打印contents=“巴拉巴拉巴拉”

文档:https://flutter.io/cookbook/persistence/reading-writing-files/ https://flutter.io/cookbook/persistence/reading-writing-files/

File 有很多方法可以帮助你,查看:

https://docs.flutter.io/flutter/dart-io/File-class.html https://docs.flutter.io/flutter/dart-io/File-class.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter 如何将数据列表保存到本地存储 的相关文章

随机推荐

  • SVG、文本、固定宽度/高度的字体

    我试图让 SVG 文本 元素适合 svg 矩形 元素 例如在下面的示例中 我使用了 5 个字符的等宽文本 字体大小为 100px 并且我希望有一个靠近文本的边框 但文本右侧有一个空白
  • Spring AMQP - 使用带 TTL 的死信机制进行消息重新排队

    就像是 休斯顿 我们这里有问题 在第一次尝试处理事件失败后 我需要安排 延迟消息 5 分钟 我在这种情况下实现了死信交换 失败时的消息将路由至 DLX gt 重试队列 并在 TTL 为 5 分钟后返回工作队列以进行另一次尝试 这是我正在使用
  • 安装程序启动时间长 - 在 wpWelcome 之前添加对话框?

    我使用 Inno Setup 创建的安装程序大小约为 850 MB 包含约 7000 个文件和 890 个文件夹 未压缩大小为 1 98 GB 当开始安装过程时 之后Windows UAC 对话框出现后 安装程序的图标为空Taskbar约
  • 如何在Python OpenCV中删除轮廓内部的轮廓?

    Python中的OpenCV提供了以下代码 regions hierarchy cv2 findContours binary image cv2 RETR LIST cv2 CHAIN APPROX SIMPLE for region i
  • Android:无法找到或加载主类org.gradle.wrapper.GradleWrapperMain

    我正在尝试在 GitLab CI 上构建我的项目 但不幸的是 我在运行器中不断收到此错误 Error Could not find or load main class org gradle wrapper GradleWrapperMai
  • 如何删除/卸载嵌套的反应组件

    我想卸载单个反应组件 该组件属于总共包含三个组件的父组件 父组件有这个渲染函数 render function return div div
  • 使用 scrapy 抓取多个页面

    我正在尝试使用 scrapy 抓取多个网页 页面的链接如下 http www example com id some number 在下一页中 末尾的数字减少了1 所以我正在尝试构建一个蜘蛛 它可以导航到其他页面并抓取它们 我的代码如下 i
  • Rails 字体 CORS 政策

    我无法为 CORS 策略加载此字体 Folder app assets fonts Inter UI var woff2 Error 访问字体位于 http localhost 3000 assets Inter UI var e2e323
  • android中处理html webview的onclick功能

    我正在尝试处理 android referred 中 html 的 onclick在此输入链接描述 https stackoverflow com questions 4065312 detect click on html button
  • iOS 中如何将代码块分派到同一个线程?

    问题的主要方面 这是关于 iOS 的 我能否以某种方式分派代码块 使它们全部 a 在后台运行并且 b 在同一个线程上运行 我想在后台运行一些耗时的操作 但这些操作必须在同一线程上运行 因为它们涉及资源 而不能在线程之间共享 如果需要 更多技
  • 在 ASP.NET Core 中,如何在Configure() 中使用在ConfigureServices() 中设置的服务?

    我编写了一项有助于配置的服务 该服务在 Startup 类的 ConfigureServices 方法中设置为 public void ConfigureServices IServiceCollection services servic
  • Java JComboBox 自动完成[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • JSF 服务层

    我不确定我在 JSF 中使用 MVC 环境的方法是否是最好的方法 因为我试图充分利用 JSF 所以我想知道我的服务层 或模型 用 MVC 术语来说 应该如何 设计 我知道视图与控制器的比例应该是 1 比 1 排除例外 现在我应该以什么方式设
  • 从文件中 read() - 阻塞行为与非阻塞行为

    假设我们使用以下命令打开了一个文件fopen 并从收到的文件指针中 使用以下命令获取文件描述符fileno 然后我们做很多 gt 10 8 随机read 该文件中相对较小的块 大小在 4 字节到 10 KB 之间 这是预期的行为吗read
  • 测试有效输入 Python

    因此 我有一个完成的程序 它接受带有银行帐户信息的输入文件并对其进行解析并允许使用一些不同的实用程序 其中一个实用程序是将事务添加到 数据库 只是一个日志文件 程序提示用户输入 w 或 d 然后输入一个金额 浮点数 这代表存款或取款 X 金
  • Vstest.console.exe 找不到 nunit 测试

    我有 VS 2017 和 net 4 6 尝试使用 vstest console 通过 cmd 提示符运行时 vstest console exe bin Release Tests dll UseVsixExtensions true 我
  • 如何用css制作透明的羽毛首选项

    我想为一些图像添加羽毛 这是我想要最终得到的结果 我意识到这个问题之前已经发布过 并且我已经使用例如box shadow attr 但我对这个方法有一个问题 我要把这张照片放在webm 所以背景并不总是保持不变 这就是为什么我必须使羽毛透明
  • 如何将列表拆分为大小相等的块?

    如何将任意长度的列表拆分为大小相等的块 See also How to iterate over a list in chunks https stackoverflow com q 434287 To chunk strings see
  • 带 json 参数的 Curl GET 请求

    我正在尝试通过 cURL 从命令提示符向远程 REST API 发送 GET 请求 如下所示 curl X GET H Content type application json H Accept application json http
  • Flutter 如何将数据列表保存到本地存储

    我正在 flutter 上开发电影发现应用程序 我需要将正在播放的电影列表保存在本地存储上以供离线使用 那么我该怎么做 Future gt getNowPlayingMovies 异步 最终字符串现在正在播放 https api themo