私は1時間ぐらい遊んで、その理由が分かります。私はどうやらとき:
import 'package:flutter_test_app/main.dart';
両方のソースファイルは、同じパッケージに属している場合であっても
import 'main.dart';
は異なっています。
main.dart:
import 'package:flutter/material.dart';
import 'pageA.dart';
import 'pageB.dart';
import 'pageH.dart';
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
static bool testFlag = false;
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
testFlag = true;
ThemeData mainTheme = new ThemeData(
primarySwatch: Colors.cyan,
);
print("testFlag @ MyApp: " + testFlag.toString());
MaterialApp mainApp = new MaterialApp(
title: 'Instabazaar',
theme: mainTheme,
home: new HomePage(title: 'Instabazaar'),
);
return mainApp;
}
}
class HomePage extends StatefulWidget {
final String title;
HomePage({Key key, this.title}) : super(key: key);
@override
_HomePageState createState() {
return new _HomePageState();
}
}
class _HomePageState extends State<HomePage> {
int _currentPageID = 0; // 0=home, 1=pageA, 2=pageB
@override
Widget build(BuildContext context) {
print("testFlag @ HomePage: " + MyApp.testFlag.toString());
AppBar appBar = new AppBar(
title: new Text("TestApp"),
centerTitle: true,
);
BottomNavigationBar bottomNavigationBar = new BottomNavigationBar(
type: BottomNavigationBarType.shifting,
items: <BottomNavigationBarItem>[
new BottomNavigationBarItem(icon: new Icon(Icons.home), title: new Text('Home'), backgroundColor: Theme.of(context).accentColor),
new BottomNavigationBarItem(icon: new Icon(Icons.explore), title: new Text('PageA'), backgroundColor: Colors.purple),
new BottomNavigationBarItem(icon: new Icon(Icons.star), title: new Text('PageB'), backgroundColor: Colors.redAccent),
],
onTap: (i) => setState(() => _currentPageID = i),
currentIndex: _currentPageID
);
Scaffold mainScaffold = new Scaffold(
appBar: appBar,
body: _getNewSubPage(),
bottomNavigationBar: bottomNavigationBar,
);
return mainScaffold;
}
//MARK: navigation
Widget _getNewSubPage(){
switch (_currentPageID)
{
case 1:
return new pageA();
case 2:
return new pageB();
default:
return new pageH();
}
}
}
pageA.dart/pageB.dart:
import 'package:flutter/material.dart';
import 'package:flutter_test_app/main.dart';
class pageA extends StatefulWidget{
pageAState createState() => new pageAState();
}
class pageAState extends State<pageA> {
@override
Widget build(BuildContext context) {
print("testFlag @ pageA: " + MyApp.testFlag.toString());
return new Container();
}
}
pageH.dart:
だから最後に私のテストコードは次のようになります
import 'package:flutter/material.dart';
import 'main.dart';
class pageH extends StatefulWidget{
pageHState createState() => new pageHState();
}
class pageHState extends State<pageH> {
@override
Widget build(BuildContext context) {
print("testFlag @ pageH: " + MyApp.testFlag.toString());
return new Container();
}
}
唯一の違いは、インポートステートメント。しかし、pageA/pageBの場合、printステートメントは "false"を返します。 pageHについては、printステートメントは "true"を返します。私は輸入声明を交換し、それをチェックアウトします。私はダーツが実際にコードをどのように解釈するかに精通していないので、ダーツのものかセットアップのものか不安なものかはわかりません。私は調査を続けますが、今のところ私の問題は解決されています。
皆様のご協力ありがとうございます。
これはほとんどありません。値の初期化と読み込み方法と場所を示すコードを追加してください。唯一の考えは、ホットリロード(コードの変更後)によって引き起こされる可能性があるということです。 –
私は、ここにアップロードするために私のコードを整理していましたが、それは理由があるように見えました。それは、インポートステートメントです。私は以下の答えを私が意味するものを詳しく述べるために追加します。ご協力ありがとうございました! – Live0