phinx_provider_package 0.1.3
phinx_provider_package: ^0.1.3 copied to clipboard
A Flutter package for managing state using Provider with singleton access and service state management.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:phinx_provider_package/provider/linked_provider.dart';
import 'package:phinx_provider_package/widget/linked_providers.dart';
import 'package:phinx_provider_package/widget/linked_widget.dart';
import 'package:provider/provider.dart';
void main() {
runApp(
const MyApp(),
);
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: HomeScreen(),
);
}
}
class CounterProvider extends ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
}
class OtherProvider extends ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
}
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Modal & Counter Example'),
),
body: LinkedProviders(
providers: [
LinkedProvider(
create: (_) => OtherProvider(),
name: "counter",
),
LinkedProvider(
create: (_) => CounterProvider(),
)
],
child: const Body(),
),
);
}
}
class Body extends StatelessWidget {
const Body({super.key});
@override
Widget build(BuildContext context) {
void showModal(BuildContext context) {
showDialog(
context: context,
builder: (BuildContext context) {
return const Alerta();
},
);
}
final provider = Provider.of<CounterProvider>(context);
// final provider = ProviderManager().get<CounterProvider>(name: "counterProvider");
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
child: const Text('Show Modal'),
onPressed: () => showModal(context),
),
const SizedBox(height: 20),
Text(
'Counter: ${provider.count}',
style: const TextStyle(fontSize: 24),
),
const SizedBox(height: 20),
ElevatedButton(
child: const Text('Increment Counter'),
onPressed: () => provider.increment(),
),
const InSameTree()
],
),
);
}
}
class Alerta extends LinkedWidget {
const Alerta({
super.key,
});
@override
Widget build(BuildContext context, Linked linked) {
final provider = linked.get<CounterProvider>();
return AlertDialog(
title: const Text('Modal Title'),
content: Text('This is the content of the modal. ${provider.count}'),
actions: <Widget>[
TextButton(
child: const Text('Increment'),
onPressed: () {
provider.increment();
},
),
TextButton(
child: const Text('Close'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
}
}
class InSameTree extends LinkedWidget {
const InSameTree({super.key});
@override
Widget build(BuildContext context, Linked linked) {
final provider = linked.get<CounterProvider>();
return Column(
children: [
const Text("In the same tree using LinkedWidget"),
Text(provider.count.toString()),
],
);
}
}