我有以下问题。我想从 class1 中读取一个变量。读取变量的命令来自另一个类。但是它返回null。这不是我的实际代码,但是我编写了一个演示应用程序来说明问题:当我按下一个按钮时,它应该将 5 添加到存储在 class1 中的名为“number”的变量中,并将使用提供程序包显示在文本小部件中. 然后我想从另一个类中读取变量“数字”。为了显示这是否有效,我在 onPressed 函数中放置了一个打印语句,以显示我的 class2 是否从 class1 获取了值。但是我总是返回 null,我不知道为什么。
简而言之,这是我的 onPressed 函数和两个类:
onPressed: () {
class1.addNumber(5);
print(class1.number);
print(class2.numberFromClass1);
},
class Class1 extends ChangeNotifier {
int number;
void addNumber(value) {
number = number + value;
notifyListeners();
}
get getNumber {
return number;
}
}
class Class2 extends ChangeNotifier {
int numberFromClass1;
void getNumberFromClass1() {
numberFromClass1 = Class1().getNumber;
print(numberFromClass1);
notifyListeners();
}
}
要么 class1 中的变量“number”没有改变,要么 class2 无法从 class1 中读取变量“number”并将其存储在自己的变量中。
感谢您的帮助!
这是整个演示程序:
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: (context) => Class1(),
),
ChangeNotifierProxyProvider<Class1, Class2>(
update: (BuildContext context, class1, class2) => Class2(),
create: (context) => Class2()),
],
child: MaterialApp(initialRoute: HomePage.id, routes: {
HomePage.id: (context) => HomePage(),
}),
);
}
}
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
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);
print(class1.number);
print(class2.numberFromClass1);
},
),
],
),
),
);
},
);
}
}
class Class1 extends ChangeNotifier {
int number;
void addNumber(value) {
number = number + value;
notifyListeners();
}
get getNumber {
return number;
}
}
class Class2 extends ChangeNotifier {
int numberFromClass1;
void getNumberFromClass1() {
numberFromClass1 = Class1().getNumber;
print(numberFromClass1);
notifyListeners();
}
}