【发布时间】:2021-02-07 05:00:17
【问题描述】:
我尝试使用flutter时间线包,但我没有成功保存和加载带有sharedpreference的事件列表
https://pub.dev/packages/flutter_timeline
这是我的代码和我期望做的事情
[Edit] 这里是我认为我需要但不需要添加的 futur builder 的代码
import 'package:flutter/material.dart';
import 'package:flutter_timeline/flutter_timeline.dart';
import 'package:flutter_timeline/indicator_position.dart';
import 'package:intl/date_symbol_data_local.dart';
import 'package:intl/intl.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
runApp(TimelineDemoApp());
}
class TimelineDemoApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Timeline',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: PlainTimelineDemoScreen(),
);
}
}
class PlainTimelineDemoScreen extends StatefulWidget {
@override
State<StatefulWidget> createState() => _PlainTimelineDemoScreenState();
}
class _PlainTimelineDemoScreenState extends State<PlainTimelineDemoScreen> {
List<TimelineEventDisplay> events;
@override
void initState() {
initializeDateFormatting("fr_FR", null);
super.initState();
load_timeline();
events = [
plainEventDisplay,
];
}
String Data1;
String Data2;
save_timeline() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
prefs.setString('timeline', events);
});
}
load_timeline() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
events = prefs.getString('timeline');
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Timeline test"),
),
body: FutureBuilder(
future: load_timeline(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return _buildTimeline();
}
return CircularProgressIndicator(); // or some other widget
},
),
floatingActionButton: FloatingActionButton(
onPressed: _addEvent,
child: Icon(Icons.add),
),
);
}
TimelineEventDisplay get plainEventDisplay {
var currentTime = DateFormat('dd-MM-yyyy').format(DateTime.now());
return TimelineEventDisplay(
anchor: IndicatorPosition.top,
indicatorOffset: Offset(0, 0),
child: TimelineEventCard(
title: Text("${currentTime}"),
content: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("description1 : $Data1"),
Text("description2 : $Data2"),
],
)
),
indicator: TimelineDots.of(context).circleIcon,
);
}
Widget _buildTimeline() {
return TimelineTheme(
data: TimelineThemeData(
lineColor: Colors.blueAccent, itemGap: 5, lineGap: 0),
child: Timeline(
anchor: IndicatorPosition.center,
indicatorSize: 56,
altOffset: Offset(10, 10),
events: events,
));
}
void _addEvent() {
setState(() {
//currently in this example data1 and data2 or static
//after, here user will modify Data1 and data2 with textfield and save is text in save_timeline()
save_timeline();
events.add(plainEventDisplay);
});
}
}
【问题讨论】:
-
我认为这个问题需要更多的关注。或许可以用更简短、更清晰的方式重新表述问题。
标签: flutter