从文件选取器颤振"Unable to load file"文件



我正在为windows应用程序使用flutter,我需要获取一个带有文件选择器包的XML文件,然后使用它来获取它的字符串

import 'dart:async';
import 'dart:io';
import 'package:bitsdojo_window/bitsdojo_window.dart';
import 'package:flutter_test2/attribute.dart';
import 'package:path_provider/path_provider.dart';
import 'package:xml/xml.dart' as xml;
import 'package:flutter/material.dart';
import './second.dart';
import './items.dart';
import 'first.dart';
import "package:hovering/hovering.dart";
import 'package:file_picker/file_picker.dart';
void main() {
runApp(MaterialApp(
home: Home(),
theme: ThemeData(
scaffoldBackgroundColor: const Color.fromARGB(255, 17, 21, 24)),
));
doWhenWindowReady(() {
var initialsize = Size(1200, 720);
appWindow.minSize = initialsize;
//appWindow.size = initialsize;
appWindow.title = "Atlantas XML";
appWindow.maximize();
appWindow.show();
});
}
//-----------------------------------------------
//IGNORE EVERYTHING UP UNTIL YOU SEE NEXT COMMENT
//-----------------------------------------------
class Home extends StatefulWidget {
Home({Key? key}) : super(key: key);
@override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
return Scaffold(
//backgroundColor: Colors.black,
body: WindowBorder(
width: 2,
color: Colors.white,
child: Column(
children: [
Container(
color: const Color.fromARGB(255, 16, 82, 249),
child: WindowTitleBarBox(
child: Row(
children: [
Expanded(child: MoveWindow()),
MinimizeWindowButton(),
MaximizeWindowButton(),
CloseWindowButton(),
],
)),
),
Row(
mainAxisAlignment:
MainAxisAlignment.center, //Center Row contents horizontally,
crossAxisAlignment:
CrossAxisAlignment.center, //Center Row contents vertically,
children: [
Expanded(flex: 2, child: Container()),
Expanded(flex: 3, child: Image.asset("assets/img/atlas1.png")),
Expanded(
flex: 4,
child: Column(
mainAxisAlignment: MainAxisAlignment
.center, //Center Column contents vertically,
crossAxisAlignment: CrossAxisAlignment
.center, //Center Column contents horizontally,
children: [
const Text(
"Chose:",
style: TextStyle(fontSize: 85, color: Colors.white),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: HoverButton(
minWidth: 400,
onpressed: () {
_pickfile();
},
color: const Color.fromARGB(255, 16, 82, 249),
hoverColor: Colors.white,
textColor: Colors.white,
shape: const OutlineInputBorder(
borderSide:
BorderSide(color: Colors.white, width: 5.0),
),
hoverShape: const OutlineInputBorder(
borderSide: BorderSide(
color: Color.fromARGB(255, 16, 82, 249),
width: 5.0),
),
hoverTextColor:
const Color.fromARGB(255, 16, 82, 249),
child: const Padding(
padding: EdgeInsets.all(8.0),
child: Text(
"New XML file",
style: TextStyle(fontSize: 60),
),
)),
),

],
),
),
Expanded(flex: 2, child: Container()),
],
),
],
),
),
);
}
//-----------------------------------------------
//Problem comes here
//-----------------------------------------------
void _pickfile() async {
FilePickerResult? result = await FilePicker.platform
.pickFiles(type: FileType.custom, allowedExtensions: ['xml']);
if (result != null) {
File file = File(result.files.single.path.toString());
print(file.toString());
print(result.names);
final newfile = await savefileTemp(file);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => Testing(
xmlfile: newfile,
),
),
);
//File file = File(result.files.first.path);
}
}
Future<File> savefileTemp(File file) async {
final appStorage = await getApplicationDocumentsDirectory();
final newfile = File('${appStorage.path}\temp.xml');
return File(file.path).copy(newfile.path);
}
}

执行此代码后,文件被发送到另一个页面,我在这里使用该文件:

String xmlstring = await DefaultAssetBundle.of(context).loadString(widget.xmlfile.path);

并且我得到错误:";无法加载文件"。我知道DefaultAssetBundle正在查看我的资产文件夹,但我找不到传递文件并使用它的方法。要么是从外部存储获取现金

我想从文件选择器中获取一个文件,并将其与loadString函数一起使用

所以我偶然找到了答案你必须更改这个:

var raw = xml.XmlDocument.parse(xmlstring);

进入这个:

var raw = xml.XmlDocument.parse(widget.xmlfile.readAsStringSync());

相关内容

最新更新