正如标题所述,每当我在手机上运行flutter应用程序时(调试模式atm,我都不知道它是否可以在发布模式下正常工作)。 dndguide.toString()显示为空。但是,在热重载时,字符串正常显示。有没有办法避免这种情况,并使其在启动时正常工作?我怀疑我将loadjson()调用放置在错误的位置,但是我尝试过对代码进行整形,以便在不同的区域调用该函数,但不会成功。
以下是该应用程序的代码:
import 'package:flutter/material.dart';
import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;
import 'dart:convert';
void main() => runApp(MyApp());
var dndguide;
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Future<String> _loadAsset() async {
return await rootBundle.loadString('assets/data/HDARG.json');
}
Future loadjson() async {
String jsonString = await _loadAsset();
final jsonResponse = json.decode(jsonString);
dndguide = jsonResponse;
}
@override
Widget build(BuildContext context) {
loadjson();
var scrollcontroller;
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
height: MediaQuery.of(context).size.height - 24,
margin: EdgeInsets.only(top: 24.0),
width: MediaQuery.of(context).size.width * .90,
child: SingleChildScrollView(
physics: BouncingScrollPhysics(),
controller: scrollcontroller,
scrollDirection: Axis.vertical,
child: Text(dndguide.toString()),
),
),
],
),
),
);
}
}
答案 0 :(得分:0)
json
响应被异步调用,这就是为什么它第一次给出null
并在热重载后成功显示的原因。您应该在dndguide
变量中放入一些占位符值,或者在json
的{{1}}函数中调用initState()
,而不要在_MyHomePageState
过程中调用它:< / p>
build