我已经在我的应用程序中实现了用于状态管理的 Provider。现在,我需要在加载屏幕后在类中添加一些数据。
我怎么能做到这一点?
stepInfo.addToList = new VaccStep(); // Need to call it one time once screen is loaded.
Run Code Online (Sandbox Code Playgroud)
我试图从 initState 调用这个方法,但它给出了错误!!
class AdminAddVaccination extends StatefulWidget {
@override
State createState() => new AdminAddVaccinationState();
}
class AdminAddVaccinationState extends State<AdminAddVaccination> {
@override
void initState() {
super.initState();
var stepInfo = Provider.of<StepInfo>(context); // ERROR!!
stepInfo.addToList = new VaccStep(); // ERROR!!
}
Widget build(BuildContext context) {
return new ChangeNotifierProvider(
builder: (context) => StepInfo(),
child: ScreenBody(),
);
}
}
class ScreenBody extends StatelessWidget {
@override
Widget build(BuildContext …Run Code Online (Sandbox Code Playgroud) 我需要从原生IOS端发送一些数据到dart端。我正在使用 Channel Method 从 IOS 端调用该方法,但我注意到:
颤振侧:
static const platform = const MethodChannel('samples.flutter.dev/battery');
platform.setMethodCallHandler(myUtilsHandler); // I am calling it in initState
Future<dynamic> myUtilsHandler(MethodCall methodCall) async {
print("myUtilsHandler");
switch (methodCall.method) {
case "someMethod":
print(json.decode(methodCall.arguments));
break;
case 'someMethod2':
print("someMethod2");
break;
default:
print("default");
}
}
Run Code Online (Sandbox Code Playgroud)
本机IOS端:
let controller: FlutterViewController = window?.rootViewController as! FlutterViewController
let batteryChannel = FlutterMethodChannel(name: "samples.flutter.dev/battery",binaryMessenger: controller.binaryMessenger)
batteryChannel.invokeMethod("someMethod", arguments: "someValue")
Run Code Online (Sandbox Code Playgroud)
注意:反过来也可以正常工作!
我需要知道我在这里做错了什么?
我正在从 Flutter 调用这个函数。回调已正确完成,第一次和第二次打印将出现在 Firbase 的“日志”中。但是从“Firestore”中获取未定义!!
这是云函数中的代码:
var functions = require("firebase-functions");
let admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
admin.firestore().settings({ timestampsInSnapshots: true });
exports.storeContact5 = functions.https.onCall((data, context) => {
// First print is working fine
console.log('test');
var recieverId = 'WqHxLoYvRxR9UK8sFJZ9WxTOIE32';
const check = admin.firestore().collection('users').doc(recieverId).get();
check.then(testValue => {
console.log(testValue.data.nickname);
return true;
}).catch(err => {
console.log('Error getting document', err);
});
console.log('test2');
// Return to flutter App (Working fine)
return {
repeat_message: 'ok!'
}
});
Run Code Online (Sandbox Code Playgroud)
Firebase 日志的屏幕截图