如何在flutter中使用sharedpreference保存事件

时间:2020-08-29 17:13:51

标签: flutter

您好,我尝试使用此时间轴包。

https://github.com/softmarshmallow/flutter-timeline

按下按钮后创建时间轴是可以的,但是我无法成功保存具有sharedpreference的事件。我想在initState恢复时间轴的历史记录。

TimelineEventDisplay get plainEventDisplay {
    return TimelineEventDisplay(
        child: TimelineEventCard(
          title: Text("just now"),
          content: Text("someone commented on your timeline ${DateTime.now()}"),
        ),
        indicator: TimelineDots.of(context).circleIcon);
}

List<TimelineEventDisplay> events;

Widget _buildTimeline() {
  return TimelineTheme(
      data: TimelineThemeData(lineColor: Colors.blueAccent),
      child: Timeline(
        indicatorSize: 56,
        events: events,
      ));
}

void _addEvent() {
  setState(() {
    events.add(plainEventDisplay);
  });
}

@override
void initState()  {

events = [

  plainEventDisplay,

  ]; 
}

1 个答案:

答案 0 :(得分:0)

创建一个SharedPref类,以便您轻松管理事物。

import 'package:shared_preferences/shared_preferences.dart';
import 'dart:convert';

class SharedPref {
  read(String key) async {
    final prefs = await SharedPreferences.getInstance();
    if(prefs.getString(key) == null){
      return null;
    }
    final map = jsonDecode(prefs.getString(key));
    return map;
  }

  save(String key, value) async {
    final prefs = await SharedPreferences.getInstance();
    prefs.setString(key, jsonEncode(value));
  }

  remove(String key) async {
    final prefs = await SharedPreferences.getInstance();
    prefs.remove(key);
  }
}

在Flutter小部件中,如下创建initState:

SharedPref _prefs = SharedPref();
final events;

@override
void initState() async {
  super.initState();
  events = await _prefs.read('events');
}

void _addEvent() async {
  setState(() {
    events.add(plainEventDisplay);
  });
  await _prefs.save('events', events);
}