簡體   English   中英

如何在flutter中創建/實例化從一個文件到主dart文件的構造函數?

[英]How to create a/ instantiate a constructor from one file to the main dart file in flutter?

我正在為我的顫振程序創建一個 hashMap,並希望對其進行一些輸入。 當我在另一個不是主要 dart 文件的 dart 文件中創建我的 hashMap 時,即使我為 hashMap 創建了限制器,我也不知道如何連接它。 這非常重要,因為 hashMap 將用於程序中的多個文件,因此它不在主 dart 中。 因此,我希望你們提供有關如何連接這兩個文件的意見。

這是我的代碼的一部分:

主要飛鏢文件:

    void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  //Always use Stateless first then use stateful or stateless widgets afterward
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      //only used at the beginning of the program
      title: 'The Cafe',
      //just a title to the app it does not show for there is nothing telling it to show on the screen
      debugShowCheckedModeBanner: false,
      //takes out the ribbon at the top right corner of the screen and app
      theme: ThemeData(
          primarySwatch: Colors.green,
          brightness: Brightness.dark,
          fontFamily: 'georgia',
          textTheme: TextTheme(headline1: TextStyle(fontSize: 100))
        //controls the color of the very top part of the application
      ),
      home: StartPage(),
      //used to connect the Stateless widget to the Stateful widget below
    );
  }
}


class StartPage extends StatefulWidget {
  @override
  _StartPageState createState() => _StartPageState();
}
// do not forget the } prior to this comment  if you do it will result in error and the program does not known why either

class _StartPageState extends State<StartPage> {
  String value = "";

  //stating the string is not seen until you have started to compute the drop-downs
//have the drop down's take you to the item page
  //void main(){
  //HashMap map = new HashMap<String, double>();
   // LinkedHashMap linkedHashMap = new LinkedHashMap<int, String>();
   // SplayTreeMap treeMap = new SplayTreeMap<int, String>();

  //}
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('The Campus Cafe'),
        //where the main title is computed to be shown on the screen
        centerTitle: true,
        //centers the title
      ),
      body: Center(
        //This is Header that is after the main Title
        child: Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: <Widget>[
              //Header Container
              Expanded(
                  child: Image.asset('assets/images/campus-cafe-logo-350sidebar.png',)
              ),
              Container(
                padding: const EdgeInsets.all(8.0),
                alignment: Alignment.center,
                child: Text("Our Menu",style: TextStyle(fontSize: 30),
                ),
              ),

              Expanded(
                //Expands is used to create a body if you want a header and body...can also be used for other things but at the moment this is all I know
                child: Column(

                  //there can be different types of Columns
                  crossAxisAlignment: CrossAxisAlignment.center,
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    Flexible(
                      //Padding is how far away one container or item is away from another as shown below
                      flex:3,
                      child: DropdownButton<String>(
                        //items are basically like an array or list
                          items: [
                            DropdownMenuItem<String>(
                              value: "1",
                              child: Center(
                                child: Text('Grilled Cheese'),
                              ),
                            ),
                            DropdownMenuItem<String>(
                              value: "2",
                              child: Center(
                                child: Text('Grilled Ham & Cheese'),
                              ),
                            ),
                            DropdownMenuItem<String>(
                              value: "3",
                              child: Center(
                                child: Text('BLT'),
                              ),
                            ),
                            DropdownMenuItem<String>(
                              value: "4",
                              child: Center(
                                child: Text('Western Chicken Sandwich'),
                              ),
                            ),
                            DropdownMenuItem<String>(
                              value: "5",
                              child: Center(
                                child: Text('Crispy Chicken Wrap'),
                              ),
                            ),
                            DropdownMenuItem<String>(
                              value: "6",
                              child: Center(
                                child: Text('Cheese Steak'),
                              ),
                            ),
                          ],
                          onChanged: (_value) => {
                            print(_value.toString()),
                            setState(() {
                              value = _value;
                            }),
                          },
                          hint: Text('Sandwiches')
                        //This hint displays on your drop-box before you open it to see the items list
                      ),
                    ),
                    Flexible(
                      flex:3,
                      child: DropdownButton<String>(
                          items: [
                            DropdownMenuItem<String>(
                              value: "1",
                              child: Center(
                                child: Text('Quantum Burger'),
                              ),
                            ),
                            DropdownMenuItem<String>(
                              value: "2",
                              child: Center(
                                child: Text('Cheeseburger'),
                              ),
                            ),
                            DropdownMenuItem<String>(
                              value: "3",
                              child: Center(
                                child: Text('Double Cheeseburger 1/4'),
                              ),
                            ),
                            DropdownMenuItem<String>(
                              value: "4",
                              child: Center(
                                child: Text('Hamburger 1/4'),
                              ),
                            ),
                            DropdownMenuItem<String>(
                              value: "5",
                              child: Center(
                                child: Text('Cheeseburger'),
                              ),
                            ),
                            DropdownMenuItem<String>(
                              value: "6",
                              child: Center(
                                child: Text('Veggie Burger'),
                              ),
                            ),
                          ],
                          onChanged: (_value) => {
                            print(_value.toString()),
                            setState(() {
                              value = _value;
                            }),
                          },
                          hint: Text('Burgers')),
       
 ),

這是我的 hashMap 文件:

List<String> sandwich = ["Veggie Melt", "Crispy Chicken Wrap", "Italian Meatball Sub",
  "Chicken Parm Grinder", "Grill Cheese", "Grilled Ham & Cheese", "Bacon Bagel Melt"];
List<double> sandwichPrice = [4.50, 6.95, 6.99, 6.59, 3.59, 4.59, 5.29];
Map<String, double> map1 = Map.fromIterables(sandwich, sandwichPrice);

List<String> burgers = ["Veggie Burger", "The Quantum Burger", "Cafe Melt",
  "The Bull Rider", "Double Cheese Burger", "Hamburger"];
List<double> burgerPrice = [4.99, 7.25, 6.59, 5.79, 5.89, 3.99, 3.79];
Map<String, double> map2 = Map.fromIterables(burgers, burgerPrice);

List<String> otherItems = ["Chicken Quesadilla", "Cheese Quesadilla",
  "Chicken Strips", "Popcorn Chicken", "Jalapeno Poppers"];
List<double> otherItemsPrice = [6.79, 6.29, 4.99, 4.59, 3.49];
Map<String, double> map3 = Map.fromIterables(otherItems, otherItemsPrice);

List<String> sides = ["French Fries", "Onion Rings", "Jalapeno Cheese Curds",
  "Tater Tots", "Pretzel Bites", "Nachos & Cheese"];
List<double> sidesPrice = [3.29, 4.79, 4.99, 3.19, 4.59, 3.50];
Map<String, double> map4 = Map.fromIterables(sides, sidesPrice);

List<String> pizza = ["7-inch Cheese", "7-inc with topping"];
List<double> pizzaPrice = [4.59, 4.99];
Map<String, double> map5 = Map.fromIterables(pizza, pizzaPrice);

class Menu {
  String sandwich;
  String burger;
  String otherItems;
  String sides;
  String pizza;
  double sandwichPrice;
  double burgerPrice;
  double otherItemsPrice;
  double sidesPrice;
  double pizzaPrice;

  Menu.s(this.sandwich, this.sandwichPrice){}
  Menu.b(this.burger, this.burgerPrice){}
  Menu.o(this.otherItems, this.otherItemsPrice){}
  Menu.q(this.sides, this.sidesPrice){}
  Menu.p(this.pizza, this.pizzaPrice){}



}

首先,您需要導入您的hashMap文件。 然后按如下方式更新您的MyWidget

我在這里展示了一個示例,說明如何將Dropdownmap1 (即三明治)一起使用。

您只需遍歷哈希圖“map1”的鍵並從中創建DropdownMenuItem列表並將此列表傳遞給items屬性。

對於每個下拉列表,您都需要保存所選選項,因此不要使用String value = ''; ,我已將其更改為String selectedSandwich = 'Sandwiches'; . 這部分至關重要,因為Dropdown小部件只能作為可用選項之一具有其價值。 因此,如果您的下拉列表中沒有Sandwiches選項,則會出現錯誤。 因此,我在initStateMyAppWidget添加了Sandwiches選項。

您必須對其余的哈希圖執行相同的操作。 如果您需要更多幫助,請告訴我。

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  // Instead of value use selectedSandwich
  String selectedSandwich = 'Sandwiches';

  // List of sandwiches, you have to do the same for rest of the maps
  // like: burgers, otherItems etc.
  List<String> sandwiches = map1.keys.toList();

  @override
  void initState() {
    super.initState();

    // Adding sandwiches as an option is necessay as the dropdown's value
    // must be equal to one of its options.
    // I have done this only for sandwiches, but you need to do the same
    // for rest.
    sandwiches.insert(0, 'Sandwiches');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          DropdownButton<String>(
            items: sandwiches // using map1.keys.toList
                .map(
                  (e) => DropdownMenuItem<String>(
                    value: e,
                    child: Center(
                      child: Text(e),
                    ),
                  ),
                )
                .toList(),
            onChanged: (_value) => {
              print(_value.toString()),
              setState(() {
                selectedSandwich = _value; // Set selected sandwich
              }),
            },
            value: selectedSandwich, // Use value
          ),
        ],
      ),
    );
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM