# {frontmatter.title}
```dart
In this chapter, we will learn how to use Provider for state management.
## Provider Introduction
Provider is a popular state management solution in Flutter.
## Implement State Management
```dart
class HotKeySettings extends ChangeNotifier {
HotKey? _globalHotKey;
HotKey? get globalHotKey => _globalHotKey;
void setGlobalHotKey(HotKey hotKey) {
_globalHotKey = hotKey;
notifyListeners();
}
}
class HotKeyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (_) => HotKeySettings(),
child: MaterialApp(
home: HotKeySettingsPage(),
),
);
}
}
class HotKeySettingsPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Hotkey Settings'),
),
body: Consumer<HotKeySettings>(
builder: (context, settings, child) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Current Hotkey: ${settings.globalHotKey?.toString() ?? "Not Set"}',
style: Theme.of(context).textTheme.titleMedium,
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
// Show hotkey recording dialog
final newHotKey = await showDialog<HotKey>(
context: context,
builder: (context) => HotKeyRecordDialog(),
);
if (newHotKey != null) {
context.read<HotKeySettings>().setGlobalHotKey(newHotKey);
}
},
child: Text('Set New Hotkey'),
),
],
);
},
),
);
}
}
## Common Issues
1. **Using Provider**
- Use `Consumer` to access state
- Use `context.read()` to read state
2. **State Updates**
- Call `notifyListeners()` to notify listeners
## Next Steps
In the next chapter, we will learn how to package and publish the app.