| // 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/shared_preferences.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 Future<SharedPreferences> _prefs = SharedPreferences.getInstance(); |
| late Future<int> _counter; |
| |
| Future<void> _incrementCounter() async { |
| final SharedPreferences prefs = await _prefs; |
| final int counter = (prefs.getInt('counter') ?? 0) + 1; |
| |
| setState(() { |
| _counter = prefs.setInt('counter', counter).then((bool success) { |
| return counter; |
| }); |
| }); |
| } |
| |
| @override |
| void initState() { |
| super.initState(); |
| _counter = _prefs.then((SharedPreferences prefs) { |
| return prefs.getInt('counter') ?? 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), |
| ), |
| ); |
| } |
| } |