| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // ignore_for_file: public_member_api_docs |
| |
| import 'dart:async'; |
| |
| import 'package:flutter/material.dart'; |
| import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart'; |
| |
| void main() { |
| runApp(const MyApp()); |
| } |
| |
| class MyApp extends StatelessWidget { |
| const MyApp({Key? key}) : super(key: key); |
| |
| @override |
| Widget build(BuildContext context) { |
| return const MaterialApp( |
| title: 'SharedPreferences Demo', |
| home: SharedPreferencesDemo(), |
| ); |
| } |
| } |
| |
| class SharedPreferencesDemo extends StatefulWidget { |
| const SharedPreferencesDemo({Key? key}) : super(key: key); |
| |
| @override |
| SharedPreferencesDemoState createState() => SharedPreferencesDemoState(); |
| } |
| |
| class SharedPreferencesDemoState extends State<SharedPreferencesDemo> { |
| final SharedPreferencesStorePlatform _prefs = |
| SharedPreferencesStorePlatform.instance; |
| late Future<int> _counter; |
| |
| // Includes the prefix because this is using the platform interface directly, |
| // but the prefix (which the native code assumes is present) is added by the |
| // app-facing package. |
| static const String _prefKey = 'flutter.counter'; |
| |
| Future<void> _incrementCounter() async { |
| final Map<String, Object> values = await _prefs.getAll(); |
| final int counter = ((values[_prefKey] as int?) ?? 0) + 1; |
| |
| setState(() { |
| _counter = _prefs.setValue('Int', _prefKey, counter).then((bool success) { |
| return counter; |
| }); |
| }); |
| } |
| |
| @override |
| void initState() { |
| super.initState(); |
| _counter = _prefs.getAll().then((Map<String, Object> values) { |
| return (values[_prefKey] as int?) ?? 0; |
| }); |
| } |
| |
| @override |
| Widget build(BuildContext context) { |
| return Scaffold( |
| appBar: AppBar( |
| title: const Text('SharedPreferences Demo'), |
| ), |
| body: Center( |
| child: FutureBuilder<int>( |
| future: _counter, |
| builder: (BuildContext context, AsyncSnapshot<int> snapshot) { |
| switch (snapshot.connectionState) { |
| case ConnectionState.none: |
| case ConnectionState.waiting: |
| return const CircularProgressIndicator(); |
| case ConnectionState.active: |
| case ConnectionState.done: |
| if (snapshot.hasError) { |
| return Text('Error: ${snapshot.error}'); |
| } else { |
| return Text( |
| 'Button tapped ${snapshot.data} time${snapshot.data == 1 ? '' : 's'}.\n\n' |
| 'This should persist across restarts.', |
| ); |
| } |
| } |
| })), |
| floatingActionButton: FloatingActionButton( |
| onPressed: _incrementCounter, |
| tooltip: 'Increment', |
| child: const Icon(Icons.add), |
| ), |
| ); |
| } |
| } |