// Copyright 2014 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. // Flutter code sample for RestorableValue import 'package:flutter/material.dart'; void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return WidgetsApp( title: 'Flutter Code Sample', color: const Color(0xffffffff), builder: (BuildContext context, Widget? child) { return const Center( child: MyStatefulWidget(restorationId: 'main'), ); }, ); } } class MyStatefulWidget extends StatefulWidget { const MyStatefulWidget({Key? key, this.restorationId}) : super(key: key); final String? restorationId; @override State<MyStatefulWidget> createState() => _MyStatefulWidgetState(); } /// RestorationProperty objects can be used because of RestorationMixin. class _MyStatefulWidgetState extends State<MyStatefulWidget> with RestorationMixin { // In this example, the restoration ID for the mixin is passed in through // the [StatefulWidget]'s constructor. @override String? get restorationId => widget.restorationId; // The current value of the answer is stored in a [RestorableProperty]. // During state restoration it is automatically restored to its old value. // If no restoration data is available to restore the answer from, it is // initialized to the specified default value, in this case 42. final RestorableInt _answer = RestorableInt(42); @override void restoreState(RestorationBucket? oldBucket, bool initialRestore) { // All restorable properties must be registered with the mixin. After // registration, the answer either has its old value restored or is // initialized to its default value. registerForRestoration(_answer, 'answer'); } void _incrementAnswer() { setState(() { // The current value of the property can be accessed and modified via // the value getter and setter. _answer.value += 1; }); } @override void dispose() { // Properties must be disposed when no longer used. _answer.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return OutlinedButton( onPressed: _incrementAnswer, child: Text('${_answer.value}'), ); } }