Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在Dart中解析ICalendar格式?_Flutter_Dart_Icalendar_Dart Pub - Fatal编程技术网

Flutter 如何在Dart中解析ICalendar格式?

Flutter 如何在Dart中解析ICalendar格式?,flutter,dart,icalendar,dart-pub,Flutter,Dart,Icalendar,Dart Pub,我需要在Flutter中解析iCal格式,但我没有找到任何包来完成它。有人能告诉我是否存在解决我问题的方法吗 解析/获取每个平台的日历 快速搜索将显示一些可能的候选项: 还有其他相关的堆栈帖子: ,这是指设备\日历插件 ,这是指add_2_calendarplugin 如果您对现有的插件不满意,那么是的,不要屏住呼吸,而是自己动手解决。我不知道您是否仍然存在问题,但我刚刚发布了一个包,用纯dart解析iCalendar格式 它仍处于早期开发阶段,但可能会帮助您解决问题 以下是有

我需要在Flutter中解析iCal格式,但我没有找到任何包来完成它。有人能告诉我是否存在解决我问题的方法吗

解析/获取每个平台的日历

快速搜索将显示一些可能的候选项:

还有其他相关的堆栈帖子:

  • ,这是指
    设备\日历
    插件
  • ,这是指
    add_2_calendar
    plugin

如果您对现有的插件不满意,那么是的,不要屏住呼吸,而是自己动手解决。

我不知道您是否仍然存在问题,但我刚刚发布了一个包,用纯dart解析iCalendar格式

它仍处于早期开发阶段,但可能会帮助您解决问题

以下是有关如何使用该软件包的示例:

import'package:icalendar_parser/icalendar_parser.dart';
//从ICS字符串解析(例如:如果您从API获取数据)
final iCalParsed=ICalendar.fromString(yourIcsString);
//从ICS列表解析(例如:如果您正在从文件读取数据)
最终iCalParsed2=ICalendar.fromLines(icsFileLines);
以下是我在《颤振》中制作的完整示例:

导入“dart:core”;
导入“dart:io”;
进口“包装:颤振/材料.省道”;
导入“包:flatter/services.dart”显示根包;
导入“package:icalendar_parser/icalendar_parser.dart”;
导入“package:path_provider/path_provider.dart”;
将“package:path/path.dart”作为p导入;
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
伊卡伦达-伊卡伦达;
bool_isLoading=false;
Future\u GetAssetFile(字符串assetName)异步{
设置状态(()=>_isLoading=true);
试一试{
final directory=await getTemporaryDirectory();
最终路径=p.join(directory.path,assetName);
最终数据=等待rootBundle.load('assets/$assetName');
最终字节=
data.buffer.asUint8List(data.offsetingbytes,data.lengthInBytes);
最终文件=等待文件(路径)。writeAsBytes(字节);
final line=wait file.readAsLines();
设置状态(){
_iCalendar=iCalendar.fromLines(行);
_isLoading=false;
});
}捕获(e){
设置状态(()=>_isLoading=false);
抛出'Error:$e';
}
}
小部件_generateTextContent(){
最终样式=常量文本样式(颜色:Colors.black);
返回RichText(
text:TextSpan(
儿童:[
TextSpan(
text:'版本:${u iCalendar.VERSION}\n',
样式:style.copyWith(fontWeight:fontWeight.bold)),
TextSpan(
text:'PRODID:${u-iCalendar.PRODID}\n',
样式:style.copyWith(fontWeight:fontWeight.bold)),
TextSpan(
子项:_iCalendar.data
.map((e)=>TextSpan(
儿童:e.keys
.map((f)=>TextSpan(子项:[
TextSpan(
文本:“${f.toUpperCase()}:”,
style:style.copyWith(
fontWeight:fontWeight.bold),
TextSpan(text:'${e[f]}\n')
]))
.toList(),
))
.toList()),
],
风格:风格,
),
);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:SingleChildScrollView(
填充:常量边集。全部(16),
子:列(
儿童:[
如果(_isLoading | | | iCalendar==null)
常量中心(子项:CircularProgressIndicator())
其他的
_generateTextContent(),
升起的按钮(
子项:常量文本(“加载文件1”),
onPressed:()=>\u getAssetFile('calendar.ics'),
),
升起的按钮(
子项:常量文本(“加载文件2”),
按下:()=>\u getAssetFile('calendar2.ics'),
),
],
),
),
);
}
}

您找到解决方案了吗?我可能会在接下来的几周内完成这项工作,但显然我更愿意节省一些时间。这将是理想的,如果它可以是一个颤振插件!对不起,没有解决方案:/if you find a solution?还没有,但我正在业余时间做一个实现。不过我不会屏住呼吸:)@brindy您是否发布了开源实现?