字段 'urlVar' 尚未初始化。颤动中的错误

Field 'urlVar' has not been initialized. error in Flutter

我有一个设置页面。在此页面上,我配置“Url”。我把它写下来并保存。一切都很简单。但我想确保下次访问此页面时我已经看到保存的 Url。我通过 shared_preferences 包(我保存它的地方)下载它。但是有一个初始化错误。有人可以帮我解决这个问题。所以在打开页面后我看到了保存的 Url 并且可以编辑它。 我的代码

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:test/setting/сonfiguration_styles.dart';



class Setting extends StatefulWidget {
  @override
  _EditSettingPageState createState() => _EditSettingPageState();
}

class _EditSettingPageState extends State<Setting> {

  late String urlVar;
  late TextEditingController _apiController =  TextEditingController();
  
  _loadvariable() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      urlVar = (prefs.getString('apiUrl'))?? "";
    });
  }


  @override
  void initState()   {
    _loadvariable()?? "";
    _apiController = TextEditingController( text: urlVar )
      ..addListener(() {
        setState(() {});
      });
    super.initState();
  }

  @override
  void dispose() {
    _apiController.dispose();
    super.dispose();
  }

    @override
    Widget build(BuildContext context) {
      return Scaffold(
        body: Container(
          child: GestureDetector(
            onTap: () {
              FocusScope.of(context).unfocus();
            },
            child: ListView(
              children: [
                TextFormField(
                  controller: _apiController,
                  cursorColor: StyleSettingPage.cursorColor,
                  style: StyleSettingPage.textBody,
                ),
                SizedBox(height: StyleSettingPage.heightBtwButtItem),
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    RaisedButton(
                      onPressed: seveSettingUrl,
                      child: Text(
                        "Save",
                        style:  StyleSettingPage.textButton
                      ),
                    )
                  ],
                )
              ],
            ),
          ),
        ),
      );
    }


  Future<void> seveSettingUrl() async {
    SharedPreferences prefs = await SharedPreferences
        .getInstance();
    prefs.setString('apiUrl', _apiController.text);
  }

  }

看看这个: 第一页

import 'package:debounce/my_new_page.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

class WritePage extends StatefulWidget {
  const WritePage({Key? key}) : super(key: key);

  @override
  State<WritePage> createState() => _WritePageState();
}

class _WritePageState extends State<WritePage> {
  final TextEditingController controller = TextEditingController();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: GestureDetector(
          onTap: () {
            FocusScope.of(context).unfocus();
          },
          child: ListView(
            children: [
              TextFormField(
                controller: controller,
              ),
              SizedBox(height: 100),
              Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  RaisedButton(
                    onPressed: ()async{
                      SharedPreferences prefs = await SharedPreferences
                          .getInstance();
                      prefs.setString('apiUrl', controller.text);
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: (context) =>  Edit()),
                      );
                    },
                    child: Text(
                      "Save",
                    ),
                  )
                ],
              )
            ],
          ),
        ),
      ),
    );
  }


}

第二页


import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
class Edit extends StatefulWidget {
  @override
  _EditSettingPageState createState() => _EditSettingPageState();
}

class _EditSettingPageState extends State<Edit> {

  var  urlVar;
  late TextEditingController _apiController =  TextEditingController();

  _loadvariable() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      urlVar = (prefs.getString('apiUrl'))?? "";
      print("Get URL VALUE: $urlVar");
    });
  }


  @override
  void initState()   {

    _loadvariable();

    super.initState();
  }

  @override
  void dispose() {
    _apiController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: Container(
          child: GestureDetector(
            onTap: () {
              FocusScope.of(context).unfocus();
            },
            child: Column(
              children: [TextFormField(
                controller: TextEditingController( text: urlVar ),
                decoration: InputDecoration(
                  // hintStyle: TextStyle(
                  //   color: Colors.purple,
                  //   fontStyle: FontStyle.italic,
                  // ),
                ),
              ),
                SizedBox(height: 100),
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    RaisedButton(
                      onPressed: ()async{
                        SharedPreferences prefs = await SharedPreferences
                            .getInstance();
                        prefs.setString('apiUrl', _apiController.text);
                        print("SET URL VALUE: $urlVar");
                      },
                      child: Text(
                        "Edit",
                      ),
                    )
                  ],
                )],
            )
          ),
        ),
      ),
    );
  }




}