При запуске приложения строка выглядит как ноль - PullRequest
0 голосов
/ 08 марта 2019

Как было сказано в заголовке, всякий раз, когда я запускаю на своем телефоне приложение флаттера (режим отладки 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 голосов
/ 08 марта 2019

Ответ json вызывается асинхронно, поэтому первый раз, когда он выдает null, а после горячей перезагрузки он появляется успешно. Вы должны поместить некоторое значение-заполнитель в переменную dndguide или вызвать json в функции initState() вашего _MyHomePageState вместо вызова его во время build процесса:

 @override
 void initState() {
   super.initState();
   loadjson();
 } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...