为什么当我在代码中调用 addNumber(){...} 方法时,class1 中的变量“数字”没有改变?打印语句“print(class2.numberFromClass1)”仅返回我直接存储在 class1 中的值,而不返回由 addNumber(){} 方法计算的新值。我正在使用提供程序包。我认为一个原因可能是我如何构建 ChangeNotifierProxyProvider,但我尝试了许多不同的方法,但它仍然无法正常工作。这是带有打印语句和两个类的部分:
onPressed: () {
class1.addNumber(5);
class2.addNumberFromClass1();
print(class1.number);
print(class2.numberFromClass1); //this returns either null, or the int which I directly write to number in Class1. e.g int number = 3; it prints 3.
},
class Class1 extends ChangeNotifier {
int number; //This stays always the same.
void addNumber(value) {
number = number +
value; //after adding value to number, the new calculated number should be stored in number.
notifyListeners();
}
get getNumber {
return number;
}
}
class Class2 extends ChangeNotifier {
int numberFromClass1;
void addNumberFromClass1() {
numberFromClass1 = Class1().getNumber; //Here I want to get 'number' from class1
print(numberFromClass1);
notifyListeners();
}
get getNumberFromClass1 {
return numberFromClass1;
}
}
这就是整个代码:
import 'package:demo_app/home_page.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider<Class1>(
create: (_) => Class1(),
),
ChangeNotifierProxyProvider<Class1, Class2>(
create: (BuildContext context) => Class2(),
update: (BuildContext context, class1, class2) => (Class2()),
),
],
child: MaterialApp(initialRoute: HomePage.id, routes: {
HomePage.id: (context) => HomePage(),
}),
);
}
}
class HomePage extends StatelessWidget {
static const String id = 'home_page';
@override
Widget build(BuildContext context) {
return Consumer2<Class1, Class2>(
builder: (context, class1, class2, child) {
return Scaffold(
backgroundColor: Colors.blueAccent,
body: Container(
alignment: Alignment.center,
color: Colors.blueAccent,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(class1.number.toString()),
SizedBox(height: 50),
MaterialButton(
color: Colors.deepOrangeAccent,
height: 100,
minWidth: 100,
child: Text(
'5',
style: TextStyle(fontSize: 40),
),
onPressed: () {
class1.addNumber(5);
class2.addNumberFromClass1();
print(class1.number);
print(class2
.numberFromClass1); //this returns either null, or the int which I directly write to number in Class1. e.g int number = 3; it prints 3.
},
),
],
),
),
);
},
);
}
}
class Class1 extends ChangeNotifier {
int number; //This stays always the same.
void addNumber(value) {
number = number +
value; //after adding value to number, the new calculated number should be stored in number.
notifyListeners();
}
get getNumber {
return number;
}
}
class Class2 extends ChangeNotifier {
int numberFromClass1;
void addNumberFromClass1() {
numberFromClass1 = Class1().getNumber;
print(numberFromClass1);
notifyListeners();
}
get getNumberFromClass1 {
return numberFromClass1;
}
}