blob: ae1db295ba6235eaf6fbb56be252a1e565b916ca [file] [log] [blame]
// 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}'),
);
}
}