1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Flutter入门系列-Flutter读取assets文件并写入应用程序路径

Flutter入门系列-Flutter读取assets文件并写入应用程序路径

时间:2023-10-06 10:14:02

相关推荐

Flutter入门系列-Flutter读取assets文件并写入应用程序路径

一、思考

在Android开发中经常会遇到需要将asset中的文件拷贝到本地目录中,所以Flutter 是否有能够读取 asset 中文件的API呢?rootBundle 就可以解决该问题。

二、代码

flutter:uses-material-design: trueassets:- images/lovely_girl.jpg- images/travel_model.json- images/hello.json

import 'dart:convert';import 'dart:developer';import 'dart:io';import 'dart:typed_data';import 'package:flutter/material.dart';import 'package:flutter/services.dart';import 'package:path_provider/path_provider.dart';class RootBundlePage extends StatefulWidget {const RootBundlePage({Key? key}) : super(key: key);@override_RootBundlePageState createState() => _RootBundlePageState();}class _RootBundlePageState extends State<RootBundlePage> {@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('RootBundle'),),body: Container(child: Column(children: [MaterialButton(onPressed:readDataFromBundle, child: Text('读入数据'),),MaterialButton(onPressed:readAndWriteImage, child: Text('读入图片并写入到指定文件'),),],),),);}void readDataFromBundle() async {String data = await rootBundle.loadString("images/hello.json");log("readDataFromBundle $data");var mapData = json.decode(data);Person person = Person.from(mapData);log("${person.name}");}void readAndWriteImage() async {String fileName = "lovely_girl.jpg";var bytes = await rootBundle.load("images/lovely_girl.jpg");String dir = (await getApplicationSupportDirectory()).path;String filePath = "$dir/$fileName";ByteBuffer buffer = bytes.buffer;File file = await new File(filePath).writeAsBytes(buffer.asUint8List(bytes.offsetInBytes,bytes.lengthInBytes));log("readAndWriteImage ${file.path}");//[log] readAndWriteImage /data/user/0/com.example.flutter_widgets/files/lovely_girl.jpg// /data/data/com.example.flutter_widgets/files/lovely_girl.jpg}}//{"name": "lisi", "age": 20, "address": "beijing", "gender":"male"}class Person{String? name;int? age;String? address;String? gender;Person(this.name, this.age, this.address, this.gender);Person.from(Map<String, dynamic> json){this.name = json['name'];this.age = json['age'];this.address = json['address'];this.gender = json['gender'];}Map<String, dynamic> toJson(){Map<String, dynamic> data = new Map<String, dynamic>();data['name'] = this.name;data['age'] = this.age;data['address'] = this.address;data['gender'] = this.gender;return data;}}

参考:

Flutter读取assets文件并写入应用程序路径 - 简书

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。