blob: 04a9d3e40c9bbee2fbc2b953e8f67fbfaf2871c3 [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 SharedAppData
import 'package:flutter/material.dart';
class ShowSharedValue extends StatelessWidget {
const ShowSharedValue({ Key? key, required this.appDataKey }) : super(key: key);
final String appDataKey;
@override
Widget build(BuildContext context) {
// The SharedAppData.getValue() call here causes this widget to depend
// on the value of the SharedAppData's 'foo' key. If it's changed, with
// SharedAppData.setValue(), then this widget will be rebuilt.
final String value = SharedAppData.getValue<String, String>(context, appDataKey, () => 'initial');
return Text('$appDataKey: $value');
}
}
// Demonstrates that changes to the SharedAppData _only_ cause the dependent widgets
// to be rebuilt. In this case that's the ShowSharedValue widget that's
// displaying the value of a key whose value has been updated.
class Home extends StatefulWidget {
const Home({ Key? key }) : super(key: key);
@override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
int _fooVersion = 0;
int _barVersion = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
const ShowSharedValue(appDataKey: 'foo'),
const SizedBox(height: 16),
const ShowSharedValue(appDataKey: 'bar'),
const SizedBox(height: 16),
ElevatedButton(
child: const Text('change foo'),
onPressed: () {
_fooVersion += 1;
// Changing the SharedAppData's value for 'foo' causes the widgets that
// depend on 'foo' to be rebuilt.
SharedAppData.setValue<String, String?>(context, 'foo', 'FOO $_fooVersion'); // note: no setState()
},
),
const SizedBox(height: 16),
ElevatedButton(
child: const Text('change bar'),
onPressed: () {
_barVersion += 1;
SharedAppData.setValue<String, String?>(context, 'bar', 'BAR $_barVersion'); // note: no setState()
},
),
],
),
),
);
}
}
void main() {
runApp(const MaterialApp(home: Home()));
}