启动应用程序时,字符串显示为空

时间:2019-03-08 16:14:48

标签: json parsing dart flutter

正如标题所述,每当我在手机上运行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()),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:0)

json响应被异步调用,这就是为什么它第一次给出null并在热重载后成功显示的原因。您应该在dndguide变量中放入一些占位符值,或者在json的{​​{1}}函数中调用initState(),而不要在_MyHomePageState过程中调用它:< / p>

build