RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-193113

Anton's questions

Martin Hope
Anton
Asked: 2022-04-10 18:47:48 +0000 UTC

序列化,将对象转换为 JSON 格式

  • 0

序列化是将对象转换为 JSON 格式。
班级

class Person {
 int id;
 String name;
 int age;
 Person(this.id, this.name, this. age);
}

一个东西

//объект
 _person = Person(1, "Ivan", 36);

JSON格式

{
 "id" : 1,
 "name" : "Ivan",
 "age" : 36
}

我想做一个序列化,将对象转换为 JSON 格式并将其显示在屏幕上。我做不到。为什么?以下是完整代码和错误截图。
主要.dart

import 'package:flutter/material.dart';
import 'dart:convert';

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

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: MyHomePage(),
   ),
  );
 }
}

class MyHomePage extends StatefulWidget {
 @override
 _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

 Person _person;
 String _str = '';

 @override
 void initState() {
  super.initState();
  //объект
  _person = Person(1, "Ivan", 36);
  //сериализация, преобразование объекта в формат JSON
  _str = jsonEncode(_person);

 }

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

 }

 void _f1() {
  setState(() {

  });
 }

 @override
 Widget build(BuildContext context) {
  return Stack(
   children: [
    Align(
     alignment: Alignment.topLeft,
     child: Padding(
      padding: const EdgeInsets.all(5.0),
      child: Text(
       _str
      ),
     ),
    ),
   ],
  );
 }

}

class Person {
 int id;
 String name;
 int age;
 Person(this.id, this.name, this. age);
}

在此处输入图像描述

在 GO 语言中,这可以通过
main.go 之类的方式解决

package main

import (
 "encoding/json"
 "net/http"
)

func main() {
 http.HandleFunc("/", myController1)
 http.ListenAndServe("localhost:8080", nil)
}

type Number struct {
 Id int64 `json:"id"` // свойство Id будет преобразовано в ключ "id"
 Num int64 `json:"num"` // свойство Num будет преобразовано в ключ "num"
 En string `json:"en"` // свойство En будет преобразовано в ключ "en"
 Ru string `json:"ru"` // свойство Ru будет преобразовано в ключ "ru"
}

func myController1(w http.ResponseWriter, r *http.Request) {

 n0 := Number {
  Id: 0,
  Num: 0,
  En: "zero",
  Ru: "ноль",
 }

 encoder := json.NewEncoder(w)
 err := encoder.Encode(&n0)
 if err != nil {
  panic(err)
 }

}

在此处输入图像描述

flutter
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2022-03-20 00:50:53 +0000 UTC

GetX 状态控件不输出颜色

  • 1

这是来自官方网站的示例

void main() => runApp(MaterialApp(home: Home()));

class Home extends StatelessWidget {
  var count = 0.obs;
  @override
  Widget build(context) => Scaffold(
      appBar: AppBar(title: Text("counter")),
      body: Center(
        child: Obx(() => Text("$count")),
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () => count ++,
      ));
}

我决定让它变得更加困难。当你点击按钮时,方块的颜色应该会改变,但不会改变。为什么?下面是完整的代码和截图。

主要.dart

import 'package:flutter/material.dart';

import 'package:get/get.dart';

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

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return GetMaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: MyHomePage(),
   ),
  );
 }
}

class MyHomePage extends StatelessWidget {

 var _color = Colors.amber.obs;

 @override
 Widget build(BuildContext context) {
  return Obx(() =>
   Stack(
    children: [
     Align(
      alignment: Alignment(0.0, -0.75),
      child: AnimatedContainer(
       width: 150.0,
       height: 150.0,
       color: _color.value,
       duration: Duration(milliseconds: 500),
      ),
     ),
     Align(
      alignment: Alignment(-1.0, 0.95),
      child: Row(
       mainAxisSize: MainAxisSize.max,
       mainAxisAlignment: MainAxisAlignment.start,
       children: [
        SizedBox(
         width: 15.0,
        ),
        Expanded(
         flex: 1,
         child: Container(
          height: 50.0,
          child: FlatButton(
           onPressed: () { _color = Colors.red.obs; },
           splashColor: Colors.blue.withOpacity(0.5),
           shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(10)
           ),
           child: Text(
            'OK',
            style: TextStyle(
             color: Colors.white,
             fontSize: 20.0,
            ),
           ),
           color: Colors.red,
          ),
         ),
        ),
        SizedBox(
         width: 15.0,
        ),
        Expanded(
         flex: 1,
         child: Container(
          height: 50.0,
          child: FlatButton(
           onPressed: () { _color = Colors.green.obs; },
           splashColor: Colors.blue.withOpacity(0.5),
           shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(10)
           ),
           child: Text(
            'OK',
            style: TextStyle(
             color: Colors.white,
             fontSize: 20.0,
            ),
           ),
           color: Colors.green,
          ),
         ),
        ),
        SizedBox(
         width: 15.0,
        ),
        Expanded(
         flex: 1,
         child: Container(
          height: 50.0,
          child: FlatButton(
           onPressed: () { _color = Colors.blue.obs; },
           splashColor: Colors.blue.withOpacity(0.5),
           shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(10)
           ),
           child: Text(
            'OK',
            style: TextStyle(
             color: Colors.white,
             fontSize: 20.0,
            ),
           ),
           color: Colors.blue,
          ),
         ),
        ),
        SizedBox(
         width: 15.0,
        ),
       ],
      ),
     ),
    ],
   )
  );
 }
}

在此处输入图像描述

flutter
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2022-03-10 05:05:47 +0000 UTC

BloC - 状态管理 - 红色错误框

  • 2

BloC - 状态管理 - 红色错误框。

// !!!ОШИБКА ЗДЕСЬ!!!
final ColorBloc _bloc = BlocProvider.of<ColorBloc>(context);

告诉我如何更改此行以使没有错误?接下来是完整代码和有错误的屏幕截图。

主要.dart

import 'dart:async';

import 'package:flutter/material.dart';

import 'package:flutter_bloc/flutter_bloc.dart';

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

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: MyHomePage(),
  );
 }
}

class MyHomePage extends StatelessWidget {

 @override
 Widget build(BuildContext context) {

   // !!!ОШИБКА ЗДЕСЬ!!!
   final ColorBloc _bloc = BlocProvider.of<ColorBloc>(context);

  return Scaffold(
   appBar: AppBar(
    title: Text('Name Page'),
   ),
   body: Stack(
    children: [
     Align(
      alignment: Alignment(0.0, -0.75),
      child: BlocBuilder<ColorBloc, Color>(
       //cubit: ColorBloc(Colors.red),
       builder: (context, state) {
        return AnimatedContainer(
         width: 150.0,
         height: 150.0,
         color: state,
         duration: Duration(milliseconds: 500),
        );
       },
      ),
     ),
     Align(
      alignment: Alignment(-1.0, 0.95),
      child: Row(
       mainAxisSize: MainAxisSize.max,
       mainAxisAlignment: MainAxisAlignment.start,
       children: [
        SizedBox(
         width: 15.0,
        ),
        Expanded(
         flex: 1,
         child: Container(
          height: 50.0,
          child: FlatButton(
           onPressed: () { _bloc.add(ColorEvent.event_red); },
           splashColor: Colors.blue.withOpacity(0.5),
           shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(10)
           ),
           child: Text(
            'OK',
            style: TextStyle(
             color: Colors.white,
             fontSize: 20.0,
            ),
           ),
           color: Colors.red,
          ),
         ),
        ),
        SizedBox(
         width: 15.0,
        ),
        Expanded(
         flex: 1,
         child: Container(
          height: 50.0,
          child: FlatButton(
           onPressed: () { _bloc.add(ColorEvent.event_green); },
           splashColor: Colors.blue.withOpacity(0.5),
           shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(10)
           ),
           child: Text(
            'OK',
            style: TextStyle(
             color: Colors.white,
             fontSize: 20.0,
            ),
           ),
           color: Colors.green,
          ),
         ),
        ),
        SizedBox(
         width: 15.0,
        ),
       ],
      ),
     ),
    ],
   ),
  );
 }

}

enum ColorEvent {event_red, event_green}

class ColorBloc extends Bloc<ColorEvent, Color> {
 ColorBloc(Color initialState) : super(initialState);

 Color _color = Colors.red;

 Color get initialState => Colors.red;

 @override
 Stream<Color> mapEventToState(ColorEvent event) async* {
  /*switch(event) {
    case ColorEvent.event_red:
     _color = Colors.red;
     yield _color;
     break;
    case ColorEvent.event_green:
     _color = Colors.green;
     yield _color;
     break;
   }*/
  _color = (event == ColorEvent.event_red) ? Colors.red : Colors.green;
  yield _color;
 }

}

在此处输入图像描述

flutter
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2022-03-03 19:59:12 +0000 UTC

GoogleMap 在显示地图之前显示红色错误框

  • 1

在显示地图之前,会显示一个红色的错误窗口 FOR A LONG TIME,然后显示地图。为什么?下面是完整的代码和截图。

主要.dart

import 'dart:async';

import 'package:flutter/material.dart';

import 'package:google_maps_flutter/google_maps_flutter.dart';

import 'package:geolocator/geolocator.dart';

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

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: MyHomePage(),
   ),
  );
 }
}

class MyHomePage extends StatefulWidget {
 @override
 _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

 Completer<GoogleMapController> _controller = Completer();

 //GoogleMapController _controller;

 Position _position;

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

 }

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

 }

 void _f1() {
  setState(() {

  });
 }

 _getPosition() async {
  Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.best);
  setState(() {
   _position = position;
  });
 }

 @override
 Widget build(BuildContext context) {
  return Stack(
   children: [
    GoogleMap(
     initialCameraPosition: CameraPosition(
      target: LatLng(_position.latitude, _position.longitude),
      zoom: 19.151926040649414,
      bearing: 222.8334901395799,
     ),
     mapType: MapType.hybrid,
     onMapCreated: (GoogleMapController controller) {
      _controller.complete(controller);
      //_controller = controller;
     },
    ),
    Align(
     alignment: Alignment(0.0, -0.85),
     child: Text(
      '${_position.latitude}\n${_position.longitude}',
      style: TextStyle(
       fontSize: 20.0,
       color: Colors.deepOrange,
      ),
     ),
    ),
    Align(
     alignment: Alignment(0.0, 0.95),
     child: Container(
      //width: double.infinity,
      height: 35.0,
      decoration: BoxDecoration(
       border: Border.all(
        width: 1.0,
        color: Colors.deepOrange,
       ),
       borderRadius: BorderRadius.all(
        Radius.circular(15.0)
       ),
      ),
      child: FlatButton.icon(
       onPressed: () {},
       splashColor: Colors.blue.withOpacity(0.5),
       icon: Icon(
        Icons.directions_boat,
        size: 20.0,
        color: Colors.deepOrange,
       ),
       label: Text(
        'Go to back!',
        style: TextStyle(
         fontSize: 18.0,
         color: Colors.deepOrange,
        ),
       ),
      ),
     ),
    ),
   ],
  );
 }

}

在此处输入图像描述

在此处输入图像描述

flutter
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2022-03-03 00:46:10 +0000 UTC

谷歌地图不显示

  • 0

如果手动设置坐标

target: LatLng(48.5244722, 39.2643343),

,显示地图。如果坐标是动态确定的,则不会使用package:geolocator显示地图。为什么?下面是完整的代码示例和屏幕截图。

主要.dart

import 'package:flutter/material.dart';

import 'package:google_maps_flutter/google_maps_flutter.dart';

import 'package:geolocator/geolocator.dart';

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

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: MyHomePage(),
   ),
  );
 }
}

class MyHomePage extends StatefulWidget {
 @override
 _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

 String _str = ''; //для проверки
 double _latitude = 0.0;  //широта
 double _longitude = 0.0; //долгота

 @override
 void initState() {
  super.initState();
  _getPosition().then((value) {
   _latitude = value.latitude;
   _longitude = value.longitude;
   _str = '$_latitude\n$_longitude';
  });
 }

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

 }

 void _f1() {
  setState(() {

  });
 }

 Future<Position> _getPosition() async {
  Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.best);
  return position;
 }

 @override
 Widget build(BuildContext context) {
  return Stack(
   children: [
    GoogleMap(
     initialCameraPosition: CameraPosition(
      //target: LatLng(48.5244722, 39.2643343),
      target: LatLng(_latitude, _longitude),
      zoom: 19.151926040649414,
      bearing: 222.8334901395799,
     ),
     mapType: MapType.hybrid,
    ),
    Align(
     alignment: Alignment(0.0, 0.95),
     child: Text(
      _str,
      style: TextStyle(
       fontSize: 20.0,
      ),
     ),
    ),
   ],
  );
 }

}

在此处输入图像描述

flutter
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2022-01-19 03:21:52 +0000 UTC

在 GestureDetector 我看不到 onScaleStart 和 onTap 之间的区别

  • 1

在GestureDetector 中,我看不到onScaleStart和onTap之间有任何区别。如果我用两根手指将蓝色方块向两侧展开,那么理论上,方块应该跟随手指改变宽度,而蓝色方块会改变宽度,就像点击时一样。为什么?我注释掉了 onTap。取消注释它并注释掉 onScaleStart没有区别。下面是完整的代码。

主要.dart

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: MyHomePage(),
   ),
  );
 }
}

class MyHomePage extends StatefulWidget {
 @override
 _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

 String _str;
 double _width;
 double _height;
 bool _b;

 @override
 void initState() {
  super.initState();
  _str = '0';
  _width = 100.0;
  _height = 100.0;
  _b = false;
 }

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

 }

 void _f1() {
  setState(() {

  });
 }

 @override
 Widget build(BuildContext context) {
  return Stack(
   children: [
    Align(
     alignment: Alignment(0.0, -0.95),
     child: GestureDetector(

      /*onTap: () {
       setState(() {
        if(_b) {
         _b = false;
         _width = 100.0;
         _str = '2';
        } else {
         _b = true;
         _width = MediaQuery.of(context).size.width / 1.2;
         _str = '1';
        }
       });
      },*/

      onScaleStart: (ScaleStartDetails details) {
       setState(() {
        if(_b) {
         _b = false;
         _width = 100.0;
         _str = '2';
        } else {
         _b = true;
         _width = MediaQuery.of(context).size.width / 1.2;
         _str = '1';
        }
       });
      },

      child: Container(
       //width: 100.0,
       //height: 100.0,
       width: _width,
       height: _height,
       color: Colors.indigoAccent,
      ),
     ),
    ),
    Align(
     alignment: Alignment.center,
     child: Text(
      _str,
      style: TextStyle(
       fontSize: 36.0,
       color: Colors.pink
      ),
     ),
    ),
   ],
  );
 }

}
flutter
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2022-01-10 19:49:33 +0000 UTC

拖动时 DragTarget 不接收数据

  • 0

拖动时 DragTarget 不接收数据。例如拖动时,方块A进入黄色方块,但在黄色方块中,符号A等不出现。这是一个示例,完整的代码。

主要.dart

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: MyHomePage(),
   ),
  );
 }
}

class MyHomePage extends StatefulWidget {
 @override
 _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

 String _str;

 @override
 void initState() {
  super.initState();
  _str = '';
 }

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

 }

 void _f1() {
  setState(() {

  });
 }

 Draggable _widDraggable(String text, Color color) =>
  Draggable(

   //данные
   data: text,

   //отображение виджета в начальной точке
   child: Container(
    width: 100.0,
    height: 100.0,
    color: color,
    alignment: Alignment.center,
    child: Text(
     text,
     style: TextStyle(
      fontSize: 18,
      color: Colors.white,
      fontWeight: FontWeight.bold,
     ),
    ),
   ),

   //отображение виджета во время перетаскивания
   feedback: Container(
    width: 100.0,
    height: 100.0,
    color: color,
    alignment: Alignment.center,
    child: Text(
     text,
     style: TextStyle(
      fontSize: 18,
      color: Colors.white,
      fontWeight: FontWeight.bold,
     ),
    ),
   ),

   //отображение виджета в начальной точке во время перетаскивания
   //чтобы не оставался виджет в начальной точке во время перетаскивания
   //Container нужно оставить пустым
   childWhenDragging: Container(),

   //вызывается, когда виджет перетаскивается на DropTarget
   //DropTarget ПРИНЯЛ виджет
   onDragCompleted: () {
    setState(() {

    });
   },

   //вызывается, когда виджет перетаскивается на DropTarget
   //DropTarget НЕ ПРИНЯЛ виджет и виджет отбрасывается
   //содержит скорость и смещение
   onDraggableCanceled: (Velocity velocity, Offset offset) {
    setState(() {
     //позиция виджета = смещению виджета

    });
   },

   //вызывается, когда виджет начинают перетаскивать
   onDragStarted: () {
    setState(() {

    });
   },

   //вызывается, когда виджет отбрасывается
   //содержит скорость и смещение
   onDragEnd: (DraggableDetails details) {
    setState(() {

    });
   },

  );

 @override
 Widget build(BuildContext context) {
  return Stack(
   children: <Widget>[
    Align(
     alignment: Alignment.topLeft,
     child: _widDraggable('A', Colors.red),
    ),
    Align(
     alignment: Alignment.topCenter,
     child: _widDraggable('B', Colors.green),
    ),
    Align(
     alignment: Alignment.topRight,
     child: _widDraggable('C', Colors.blue),
    ),
    Align(
     alignment: Alignment(0.0, 0.85),
     child: DragTarget(

      //создание содержимого этого виджета
      builder: (
       BuildContext context,
       //список перетаскиваемых данных, которые будут приняты
       List<String> candidateData,
       //список перетаскиваемых данных, которые не будут приняты
       List<dynamic> rejectedData) {
        return Container(
         width: 150.0,
         height: 150.0,
         color: Colors.amber,
         alignment: Alignment.center,
         child: Text(
          _str,
          style: TextStyle(
           fontSize: 32.0,
           fontWeight: FontWeight.bold,
           color: Colors.white
          ),
         ),
        );
      },

      //вызывается если данные Draggable совпадают с указанными данными
      //и возвращает true
      onWillAccept: (data) {
       return data == 'A' || data == 'B' || data == 'C';
      },

      //если Draggable перетаскивается на DragTarget и onWillAccept
      //возвращает true, тогда вызывается onAccept
      //здесь данные передаются виджет, возвращаемый builder
      onAccept: (data) {
       setState(() {
        _str = data;
       });
      },

     ),
    ),
   ],
  );
 }

}

在此处输入图像描述

flutter
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2022-01-08 23:04:01 +0000 UTC

Draggable中的平滑拖动

  • 0

如何平滑拖动小部件,使正方形的“尾巴”不可见?我简单解释一下。反馈属性负责在拖动时显示小部件。如果您使颜色在那里不可见,则在开始时会在屏幕上画一个手指,当手指停止时,会出现一个正方形。如果颜色没有被移除,那么当你的手指在屏幕上滑动时,方块也会移动,但是方块的“尾巴”,它是用不同的颜色制作的,将是可见的。这是该代码的一部分。

feedback: Container(
 width: _width,
 height: _height,
 //ДВИЖЕНИЯ ПЛАВНЫЙ, НО ВИДЕН ШЛЕЙФ КВАДРАТА
 color: Colors.green,
 //ЕСЛИ РАСКОМЕНТИРОВАТЬ, ДВИЖЕНИЯ БУДУТ РЕЗКИМИ
 //color: Colors.green.withOpacity(0.0),
),

如何解决这样的问题?接下来,完整的代码。

主要.dart

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: MyHomePage(),
   ),
  );
 }
}

class MyHomePage extends StatefulWidget {
 @override
 _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

 double _width;
 double _height;
 Offset _position;
 String _str;
 Color _color;

 @override
 void initState() {
  super.initState();
  _width = 100.0;
  _height = 100.0;
  _position = Offset(0.0, _height - 20);
  _str = 'A';
  _color = Colors.orangeAccent;
 }

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

 }

 void _f1() {
  setState(() {

  });
 }

 @override
 Widget build(BuildContext context) {
  return Stack(
   children: <Widget>[
    Positioned(
     left: _position.dx,
     top: _position.dy - _height + 20,
     child: Draggable(
      //отображение виджета изначально
      child: Container(
       width: _width,
       height: _height,
       color: _color,
       alignment: Alignment.center,
       child: Text(
        _str,
        style: TextStyle(
         fontSize: 18,
         color: Colors.white,
         fontWeight: FontWeight.w600,
        ),
       ),
      ),
      //отображение виджета во время перетаскивания
      feedback: Container(
       width: _width,
       height: _height,
       //ДВИЖЕНИЯ ПЛАВНЫЙ, НО ВИДЕН ШЛЕЙФ КВАДРАТА
       color: Colors.green,
       //ЕСЛИ РАСКОМЕНТИРОВАТЬ, ДВИЖЕНИЯ БУДУТ РЕЗКИМИ
       //color: Colors.green.withOpacity(0.0),
      ),
      //вызывается, когда виджет перетаскивается на DropTarget
      //DropTarget ПРИНЯЛ виджет
      onDragCompleted: () {
       setState(() {

       });
      },
      //вызывается, когда виджет перетаскивается на DropTarget
      //DropTarget НЕ ПРИНЯЛ виджет
      //виджет отбрасывается
      onDraggableCanceled: (Velocity velocity, Offset offset) {
       setState(() {
        _position = offset;
       });
      },
      //вызывается, когда виджет начинают перетаскивать
      onDragStarted: () {
       setState(() {

       });
      },
      //вызывается, когда виджет перетаскивается на DropTarget
      //содержит скорость и смещение
      onDragEnd: (DraggableDetails details) {
       setState(() {

       });
      },
     ),
    ),
   ],
  );
 }

}
flutter
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2021-12-09 19:35:38 +0000 UTC

如何以json格式返回对http请求的响应

  • 0

当任何客户端在 http://localhost:8080 发出 http 请求时,服务器必须返回 json 格式的响应。我只是在学习golang。告诉。谢谢你。这是我的代码。
main.go

package main

import (
 "encoding/json"
 "net/http"
)

func main() {
 http.HandleFunc("/", myController1)
 http.ListenAndServe("localhost:8080", nil)
}

type Number struct {
 Id int64 `json:"id"` // свойство Id будет преобразовано в ключ "id"
 Num int64 `json:"num"` // свойство Num будет преобразовано в ключ "num"
 En string `json:"en"` // свойство En будет преобразовано в ключ "en"
 Ru string `json:"ru"` // свойство Ru будет преобразовано в ключ "ru"
}

func myController1(w http.ResponseWriter, r *http.Request) {

 n0 := Number {
  Id: 0,
  Num: 0,
  En: "zero",
  Ru: "ноль",
 }

 decoder := json.NewDecoder(r.Body)
 err := decoder.Decode(&n0)
 if err != nil {
  panic(err)
 }

 //проверка
 //w.Write([]byte("<h1>Hello World!</h1>"))
}
golang
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2021-12-01 03:35:14 +0000 UTC

在屏幕之间传输数据

  • 0

在主屏幕上,我在输入字段中输入文本,单击按钮,发生到第二屏幕的转换,数据被传输并显示在第二屏幕上。
当我在第二个屏幕上执行相同操作时,当我转到第一个屏幕时,数据不会传输。
第一种方式

Navigator.pop(context, _MyHomePageState(data: _controller.text));

第二种方式

Navigator.push(
 context,
 //MaterialPageRoute(builder: (context) => Two())
 MaterialPageRoute(builder: (_) => _MyHomePageState(data: _controller.text,))
).then((value) {
 _controller.text = ''; //очистка поля ввода
});

误入

_MyHomePageState(data: _controller.text,)

接下来是main.dart的完整代码和截图

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: MyHomePage(),
  );
 }
}
class MyHomePage extends StatefulWidget {
 @override
 _MyHomePageState createState() => _MyHomePageState(data: null);
}

class _MyHomePageState extends State<MyHomePage> {

 //это будет передаваться в другой экран
 TextEditingController _controller;

 //это будет передано с другого экрана
 String data;

 _MyHomePageState ({@required this.data});

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

  _controller = TextEditingController();
  data = '';

 }

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

 void _f1() {
  setState(() {
  });
 }

 @override
 Widget build(BuildContext context) {
  return Scaffold(
   appBar: AppBar(
    title: Text('Main screen'),
   ),
   body: Stack(
    children: [
     Align(
      alignment: Alignment.topCenter,
      child: Padding(
       padding: const EdgeInsets.all(16.0),
       child: TextField(
        controller: _controller,
        cursorColor: Colors.pink,
        decoration: InputDecoration(
         border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(15.0),
          borderSide: BorderSide()
         ),
        ),
       ),
      ),
     ),
     Align(
      alignment: Alignment.center,
      child: Text(
       (data == null) ? '' : data,
       style: TextStyle(
        fontSize: 46.0,
        color: Colors.pink
       ),
      ),
     ),
     Align(
      alignment: Alignment.bottomCenter,
      child: Container(
       width: double.infinity,
       margin: const EdgeInsets.all(16.0),
       child: RaisedButton(
        onPressed: () {
         Navigator.push(
          context,
          //MaterialPageRoute(builder: (context) => Two())
          MaterialPageRoute(builder: (_) => Two(data: _controller.text,))
         ).then((value) {
          _controller.text = ''; //очистка поля ввода
         });
        },
        splashColor: Colors.blue.withOpacity(0.5),
        shape: RoundedRectangleBorder(
         borderRadius: BorderRadius.circular(10)
        ),
        child: Text(
         'Go to Two',
         style: TextStyle(
          color: Colors.deepPurple,
          fontSize: 20.0,
         ),
        ),
       ),
      ),
     ),
    ],
   ),
  );
 }

}

class Two extends StatelessWidget {

 //это будет передаваться в другой экран
 TextEditingController _controller = TextEditingController();

 //это будет передаваться в другой экран
 String data;

 Two({Key key, @required this.data}) : super(key: key);

 @override
 Widget build(BuildContext context) {
  return Scaffold(
   appBar: AppBar(
    title: Text('Two screen'),
   ),
   body: Stack(
    children: [
     Align(
      alignment: Alignment.topCenter,
      child: Padding(
       padding: const EdgeInsets.all(16.0),
       child: TextField(
        controller: _controller,
        cursorColor: Colors.pink,
        decoration: InputDecoration(
         border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(15.0),
          borderSide: BorderSide()
         ),
        ),
       ),
      ),
     ),
     Align(
      alignment: Alignment.center,
      child: Text(
       (data == null) ? '' : data,
       style: TextStyle(
        fontSize: 46.0,
        color: Colors.blue
       ),
      ),
     ),
     Align(
      alignment: Alignment.bottomCenter,
      child: Container(
       width: double.infinity,
       margin: const EdgeInsets.all(16.0),
       child: RaisedButton(
        onPressed: () {
         //1 способ ошибки нет, но данные не выводятся
         Navigator.pop(context, _MyHomePageState(data: _controller.text));

         //2 способ ошибка в _MyHomePageState(data: _controller.text,)
         /*Navigator.push(
          context,
          //MaterialPageRoute(builder: (context) => Two())
          MaterialPageRoute(builder: (_) => _MyHomePageState(data: _controller.text,))
         ).then((value) {
          _controller.text = ''; //очистка поля ввода
         });*/

        },
        splashColor: Colors.blue.withOpacity(0.5),
        shape: RoundedRectangleBorder(
         borderRadius: BorderRadius.circular(10)
        ),
        child: Text(
         'Go to Main',
         style: TextStyle(
          color: Colors.deepPurple,
          fontSize: 20.0,
         ),
        ),
       ),
      ),
     ),
    ],
   ),
  );
 }
}

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

flutter
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2021-11-23 01:01:02 +0000 UTC

动画 RotationTransition 如何进行指定的转数

  • 0

如何进行指定的转数,例如2?正方形必须转两圈,即 360 度 * 2。在注释代码中
找到度数 = (度 * pi) / 180 ,只完成一圈,然后是完整的main.dart
代码

import 'dart:math';

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: MyHomePage(),
   ),
  );
 }
}

class MyHomePage extends StatefulWidget {
 @override
 _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState
 extends State<MyHomePage>
 with SingleTickerProviderStateMixin {

 AnimationController _controller;
 Animation<double> _animation;

 double _width;
 double _height;
 Color _color;

 //количество оборотов
 int _turnover;

 //количество градусов
 double _degree;

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

  _width = 200.0;
  _height = 200.0;
  _color = Colors.pink;

  _turnover = 2;

  //нахождение градуса = (градус * пи) / 180
  _degree = (360 * pi) / 180;

  _controller = AnimationController(
   vsync: this,
   value: 0.0,      //default
   lowerBound: 0.0, //default
   upperBound: 1.0, //default
   duration: Duration(seconds: 1),
  );

  _animation = Tween<double>(
   begin: 0.0,
   end: _turnover * _degree //теоретически должно сделать два оборота
   )
   .animate(CurvedAnimation(parent: _controller, curve: Curves.easeInSine))
   ..addListener(() {
    setState(() {

    });
   });

  //в закоментированном коде делается только один оборот

  /*_animation = CurvedAnimation(parent: _controller, curve: Curves.easeInSine)
   ..addListener(() {
    setState(() {

    });
   });*/

 }

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

 void _f1() {
  setState(() {

  });
 }

 void _funForward() {
  setState(() {
   _controller
    ..forward();
  });
 }

 void _funReverse() {
  setState(() {
   _controller
    ..reverse();
  });
 }

 @override
 Widget build(BuildContext context) {
  return Column(
   children: <Widget>[
    Expanded(
     flex: 1,
     child: LayoutBuilder(
      builder: (context, constraints) =>
       Stack(
        children: <Widget>[
         Align(
          alignment: Alignment.center,
          child: RotationTransition(
           turns: _animation,
           child: Container(
            width: _width,
            height: _height,
            color: _color,
            alignment: Alignment.center,
            child: Text(
             '1',
             style: TextStyle(
              fontSize: 36.0,
              color: Colors.white,
             ),
            ),
           ),
          ),
         ),
        ],
       ),
     ),
    ),
    Container(
     padding: const EdgeInsets.all(8.0),
     color: Colors.orangeAccent,
     child: Row(
      children: <Widget>[
       Expanded(
        flex: 1,
        child: RaisedButton(
         onPressed: () { _funForward(); },
         splashColor: Colors.blue.withOpacity(0.5),
         shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(10)
         ),
         child: Text(
          'start'.toUpperCase(),
          style: TextStyle(
           color: Colors.deepPurple,
           fontSize: 16.0,
          ),
         ),
        ),
       ),
       SizedBox(width: 8.0,),
       Expanded(
        flex: 1,
        child: RaisedButton(
         onPressed: () { _funReverse(); },
         splashColor: Colors.blue.withOpacity(0.5),
         shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(10)
         ),
         child: Text(
          'back'.toUpperCase(),
          style: TextStyle(
           color: Colors.deepPurple,
           fontSize: 16.0,
          ),
         ),
        ),
       ),
      ],
     ),
    ),
   ],
  );
 }

}
flutter
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2021-10-14 19:04:19 +0000 UTC

颤动动画中的 _animation.value 是什么?

  • 0

Flutter 动画中的_animation.value是什么,为什么值是260.0而不是1.0?

lowerBound -动画起始值,在我的示例中为 0.0

upperBound -动画结束值,在我的示例中为 1.0

value -当前动画值,默认为lowerBound起始值,即在我的示例中为0.0 。一切都在这里匹配。

理论上,正如我所想,动画的当前值 应该在 0.0 和 0.1 之间。关于这个错误输出,我决定在正方形移动的过程中改变不透明度(opacity)。动画开始时透明度为 0.0,动画结束时透明度为 1.0。但是在所有动画中,透明度为零

_color = Color.fromRGBO(255, 255, 255, _animation.value);

我决定测量当前动画的值,当方块移动时,值就会显示出来。动画开始的时候是0.0,到最后是260.0,理论上应该是1.0

这段代码放在监听器 addListener()中,当动画值的当前值发生变化或者每隔TickerProvider对象的勾号,这里我不确定。<br /

..addListener(() {
   setState(() {
    //
    _color = Color.fromRGBO(255, 255, 255, _animation.value);
    _str = '${_animation.value}';
    //идентично
    //_str = '${_controller.value}';
   });
  })

以下是值为 260.0 的屏幕截图 在此处输入图像描述

接下来是完整的

main.dart代码

import 'dart:ui';

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: MyHomePage(),
   ),
  );
 }
}

class MyHomePage extends StatefulWidget {
 @override
 _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState
 extends State<MyHomePage>
 with SingleTickerProviderStateMixin {

 AnimationController _controller;
 Tween _tween;
 Animation<double> _animation;

 double _width;
 double _height;
 Color _color;

 String _str;

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

  _width = 100.0;
  _height = 100.0;
  _color = Colors.black38;

  _str = '';

  _controller = AnimationController(
   vsync: this,
   value: 0.0,      //default
   lowerBound: 0.0, //default
   upperBound: 1.0, //default
   duration: Duration(seconds: 1),
  )..addListener(() {
   setState(() {
    //
    _color = Color.fromRGBO(255, 255, 255, _animation.value);
    _str = '${_animation.value}';
    //идентично
    //_str = '${_controller.value}';
   });
  });

  _tween = Tween<double>(begin: 0.0, end: window.physicalSize.width / 2 - _width);

  _animation = _tween.animate(_controller);

 }

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

 void _f1() {
  setState(() {

  });
 }

 void _funForward() {
  setState(() {
   _controller
    ..forward();
  });
 }

 void _funReverse() {
  setState(() {
   _controller
    ..reverse();
  });
 }

 @override
 Widget build(BuildContext context) {
  return Column(
   children: <Widget>[
    Expanded(
     flex: 1,
     child: LayoutBuilder(
      builder: (context, constraints) =>
       Stack(
        children: <Widget>[
         Positioned(
          // 1/2 высоты родительского - 1/2 высоты дочернего виджета
          top: (constraints.maxHeight / 2) - (_height / 2),
          left: _animation.value,
          child: Container(
           width: _width,
           height: _height,
           color: _color,
           alignment: Alignment.center,
           child: Text(
            _str,
            style: TextStyle(
             fontSize: 20.0,
             color: Colors.pink,
            ),
           ),
          ),
         ),
        ],
       ),
     ),
    ),
    Container(
     padding: const EdgeInsets.all(8.0),
     color: Colors.orangeAccent,
     child: Row(
      children: <Widget>[
       Expanded(
        flex: 1,
        child: RaisedButton(
         onPressed: () { _funForward(); },
         splashColor: Colors.blue.withOpacity(0.5),
         shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(10)
         ),
         child: Text(
          'start'.toUpperCase(),
          style: TextStyle(
           color: Colors.deepPurple,
           fontSize: 16.0,
          ),
         ),
        ),
       ),
       SizedBox(width: 8.0,),
       Expanded(
        flex: 1,
        child: RaisedButton(
         onPressed: () { _funReverse(); },
         splashColor: Colors.blue.withOpacity(0.5),
         shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(10)
         ),
         child: Text(
          'back'.toUpperCase(),
          style: TextStyle(
           color: Colors.deepPurple,
           fontSize: 16.0,
          ),
         ),
        ),
       ),
      ],
     ),
    ),
   ],
  );
 }

}
flutter
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2020-09-27 00:16:17 +0000 UTC

如何使用 Positioned 小部件使子小部件居中

  • 1

如何通过减去按钮的高度和按钮上方和下方的填充来使用Positioned小部件使子小部件居中?
蓝色方块通常居中对齐。

MediaQuery.of(context).size.height / 2 - 正方形高度

Positioned(
 // (MediaQuery.of(context).size.height / 2 - 100.0) -> по центру вообще
 top: (MediaQuery.of(context).size.height / 2 - 100.0),
 left: _animation.value,
 //left: 0.0,
 child: Container(
  width: 100.0,
  height: 100.0,
  color: Colors.indigoAccent,
 ),
),

红色方块通常使用Align小部件居中。注意,它就在蓝色方块的下方。我做它纯粹是为了比较。

对齐:对齐中心,

Align(
 alignment: Alignment.center,
 child: Container(
  width: 100.0,
  height: 100.0,
  color: Colors.pink,
 ),
),

我试图将绿色正方形对齐,而不是在中心,而是在白色背景的中心,减去带有黄色背景的容器。将正方形与中心对齐,我添加了缩进 (8.0 + 8.0) 和按钮的高度 (36.0),但它仍然不能确定。绿色方块顶部的白色背景距离比绿色方块底部的白色背景距离略大,我什至用尺子测量了它。

顶部:(MediaQuery.of(context).size.height / 2 - 100.0) + 8.0 + 36.0 + 8.0,

Positioned(
 // (MediaQuery.of(context).size.height / 2 - 100.0) -> по центру вообще
 // 8.0 -> padding сверху кнопки
 // 36.0 -> высота кнопки
 // 8.0 -> padding снизу кнопки
 top: (MediaQuery.of(context).size.height / 2 - 100.0) + 8.0 + 36.0 + 8.0,
 right: 0.0,
 child: Container(
  width: 100.0,
  height: 100.0,
  color: Colors.green,
 ),
),

也许我在计算中犯了一个错误,对齐绿色方块?下面是一张照片和完整的代码。谢谢你。

在此处输入图像描述

main.dart

import 'dart:ui';

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: MyHomePage(),
   ),
  );
 }
}

class MyHomePage extends StatefulWidget {
 @override
 _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage>
 with SingleTickerProviderStateMixin {

 AnimationController _controller;
 Tween _tween;
 Animation<double> _animation;

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

  _controller = AnimationController(
   vsync: this,
   duration: Duration(seconds: 3),
  )..addListener(() {
   setState(() {
    
   });
  });

  _tween = Tween<double>(begin: 0.0, end: window.physicalSize.width / 2 - 100.0);

  _animation = _tween.animate(_controller);

 }

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

  _controller.dispose();

 }

 void _funStart() {
  setState(() {
   _controller.forward();
  });
 }

 void _funStop() {
  setState(() {
   _controller.stop();
  });
 }

 void _funBack() {
  setState(() {
   _controller.reverse();
  });
 }

 @override
 Widget build(BuildContext context) {
  return Stack(
   children: <Widget>[
    Align(
     alignment: Alignment.topLeft,
     child: Container(
      padding: const EdgeInsets.all(8.0),
      color: Colors.orangeAccent,
      child: Row(
       mainAxisSize: MainAxisSize.max,
       mainAxisAlignment: MainAxisAlignment.start,
       children: <Widget>[
        Expanded(
         flex: 1,
         child: RaisedButton(
          onPressed: () { _funStart(); },
          splashColor: Colors.blue.withOpacity(0.5),
          shape: RoundedRectangleBorder(
           borderRadius: BorderRadius.circular(10)
          ),
          child: Text(
           'start'.toUpperCase(),
           style: TextStyle(
            color: Colors.deepPurple,
            fontSize: 16.0,
           ),
          ),
         ),
        ),
        SizedBox(width: 8.0,),
        Expanded(
         flex: 1,
         child: RaisedButton(
          onPressed: () { _funStop(); },
          splashColor: Colors.blue.withOpacity(0.5),
          shape: RoundedRectangleBorder(
           borderRadius: BorderRadius.circular(10)
          ),
          child: Text(
           'stop'.toUpperCase(),
           style: TextStyle(
            color: Colors.deepPurple,
            fontSize: 16.0,
           ),
          ),
         ),
        ),
        SizedBox(width: 8.0,),
        Expanded(
         flex: 1,
         child: RaisedButton(
          onPressed: () { _funBack(); },
          splashColor: Colors.blue.withOpacity(0.5),
          shape: RoundedRectangleBorder(
           borderRadius: BorderRadius.circular(10)
          ),
          child: Text(
           'back'.toUpperCase(),
           style: TextStyle(
            color: Colors.deepPurple,
            fontSize: 16.0,
           ),
          ),
         ),
        ),
       ],
      ),
     ),
    ),
    Positioned(
     // (MediaQuery.of(context).size.height / 2 - 100.0) -> по центру вообще
     top: (MediaQuery.of(context).size.height / 2 - 100.0),
     left: _animation.value,
     //left: 0.0,
     child: Container(
      width: 100.0,
      height: 100.0,
      color: Colors.indigoAccent,
     ),
    ),
    Align(
     alignment: Alignment.center,
     child: Container(
      width: 100.0,
      height: 100.0,
      color: Colors.pink,
     ),
    ),
    Positioned(
     // (MediaQuery.of(context).size.height / 2 - 100.0) -> по центру вообще
     // 8.0 -> padding сверху кнопки
     // 36.0 -> высота кнопки
     // 8.0 -> padding снизу кнопки
     top: (MediaQuery.of(context).size.height / 2 - 100.0) + 8.0 + 36.0 + 8.0,
     right: 0.0,
     child: Container(
      width: 100.0,
      height: 100.0,
      color: Colors.green,
     ),
    ),
   ],
  );
 }

}
flutter
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2020-09-26 02:43:13 +0000 UTC

通过一点的方法调用和通过两点的方法调用的区别

  • 0

通过一个点调用方法和通过两个点调用有什么区别?细微差别是什么?谢谢你。
通过一点没有错误

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

两点后没有错误

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

通过一点有错误

@override
 void initState() {
  super.initState();
  _controller = AnimationController(
   vsync: this,
   duration: Duration(seconds: 2),
  ).forward();
 }

两点后没有错误

@override
 void initState() {
  super.initState();
  _controller = AnimationController(
   vsync: this,
   duration: Duration(seconds: 2),
  )..forward();
 }
flutter
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2020-09-07 17:14:05 +0000 UTC

如何使 ListWheelScrollView 小部件变圆?

  • 0

如何使ListWheelScrollView小部件变圆,有可能吗?我制作了Container小部件

Container(
 decoration: BoxDecoration(
  color: Colors.amber,
  shape: BoxShape.circle,
 )
),

并在其中放置了一个ListWheelScrollView,理论上列表不应该爬出它的父级并且应该变成圆形吗?接下来,部分标记和照片。

Container(
 decoration: BoxDecoration(
  color: Colors.amber,
  shape: BoxShape.circle,
 ),
 child: Padding(
  padding: const EdgeInsets.symmetric(horizontal: 8.0),
  child: ListWheelScrollView(

   itemExtent: 50, //height / высота
   squeeze: 1.0, //divider / разделитель
   diameterRatio: 2.0, //diameter / сотношение
   offAxisFraction: 0.0, //bias / смещение +to left -to right

   onSelectedItemChanged: (index) {
    setState(() {
     _ara.forEach( (value) => value.isSelected = false );
     _ara[index].isSelected = true;
     _str = '${_ara[index].data}';
    });
   },

   children: <Widget>[
    for(int i=0; i<_ara.length; i++)
     _getItemList(context, i)
   ],

  ),
 ),
),

在此处输入图像描述

main.dart

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: MyHomePage(),
   ),
  );
 }
}

class MyHomePage extends StatefulWidget {
 @override
 _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

 List< ItemListData<String> > _ara;

 double _height;
 double _width;
 TextStyle _textStyle;

 String _str;

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

  _ara = _populateData(20);

  _width = double.infinity;
  _height = double.infinity;
  _textStyle = TextStyle(
   color: Colors.white,
   fontSize: 20.0,
   fontWeight: FontWeight.bold,
  );

  _str = '';

 }

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

 }

 void _f1() {
  setState(() {

  });
 }

 //метод возвращает коллекцию, которая была заполнена объектами класса ItemListData<String>
 //method returns a collection which was filled the objects of the cllass ItemListData<String>
 List _populateData(int amount) {
  List< ItemListData<String> > ara = [];
  for(int i = 0; i<amount; ) {
   i++;
   ara.add( ItemListData<String>('$i') );
  }
  return ara;
 }

 //метод возвращает элемент прокручиваемого списка
 //method returns an element of the scrolling list
 //Widget _getItemList(BuildContext context, int index) {}
 Widget _getItemList(_, index) =>
  Container(
   width: _width,
   height: _height,
   color: _ara[index].isSelected ? Colors.pink : Colors.cyan,
   alignment: Alignment.center,
   child: Text(
    '${_ara[index].data}',
    style: _textStyle,
   ),
  );

 @override
 Widget build(BuildContext context) {
  return Column(
   mainAxisSize: MainAxisSize.max,
   mainAxisAlignment: MainAxisAlignment.start,
   children: <Widget>[
    Expanded(
     flex: 1,
     child: Container(
      alignment: Alignment.center,
      child: Text(
       _str,
       style: TextStyle(
        color: Colors.pink,
        fontSize: 36.0
       ),
      ),
     ),
    ),
    Expanded(
     flex: 1,
     child: Container(
      decoration: BoxDecoration(
       color: Colors.amber,
       shape: BoxShape.circle,
      ),
      child: Padding(
       padding: const EdgeInsets.symmetric(horizontal: 8.0),
       child: ListWheelScrollView(

        itemExtent: 50, //height / высота
        squeeze: 1.0, //divider / разделитель
        diameterRatio: 2.0, //diameter / сотношение
        offAxisFraction: 0.0, //bias / смещение +to left -to right

        onSelectedItemChanged: (index) {
         setState(() {
          _ara.forEach( (value) => value.isSelected = false );
          _ara[index].isSelected = true;
          _str = '${_ara[index].data}';
         });
        },

        children: <Widget>[
         for(int i=0; i<_ara.length; i++)
          _getItemList(context, i)
        ],

       ),
      ),
     ),
    ),
   ],
  );
 }
}

//данные, которые будут отображаться в элементе списка
//data which will be shown in the item of the list
class ItemListData<T> {
 bool isSelected = false;
 T data;
 ItemListData(this.data);
}
flutter
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2020-08-23 15:45:58 +0000 UTC

如何创建 TextStyle 变量?

  • 1

如何创建 TextStyle 变量,是否可能?

典型代码示例

Text(
 'Hello World!',
 style: TextStyle(
  color: Colors.deepPurple,
  fontSize: 18.0
 ),
),

带有生成错误的 TextStyle 变量的代码示例

//объявляем переменную или поле класса
TextStyle _textStyle1;

@override
 void initState() {
  super.initState();
   //инициализируем переменную
   _textStyle1 = TextStyle(
    color: Colors.deepPurple,
    fontSize: 18.0
 );
}

Text(
 'Hello World!',
 //генерируется ошибка
 style: _textStyle1,
),

是否可以创建这样的变量?

flutter
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2020-08-08 18:29:57 +0000 UTC

谷歌浏览器有飞镖插件吗?

  • 1

有一个index.html文件

<!DOCTYPE html>

<html>
  <head>
    <meta charset="UTF-8">
    <title>ABC</title>
  </head>
  <body>
    <h1 id="text"></h1>
    <script src="main.dart" type="application/javascript"></script>
  </body>
</html>

有一个main.dart文件

import 'dart:html';

void main() {
 querySelector('#text').text = 'Hello World!';
}

是否有适用于google chrome浏览器的dart插件,只需在浏览器中打开index.html文件就会呈现像JavaScript这样的Dart代码?还是不存在?

google-chrome
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2020-07-24 20:09:05 +0000 UTC

AlertDialog 如何正确使用 Navigator.of(context).pop()?

  • 1

对应用程序功能的说明。显示按钮被按下。出现一个对话框。如果在其中按Ok,文本出现,按钮名称将更改为Hide,如果按Cancel,则文本不出现,按钮名称保持不变。如果单击Hide,文本将消失。一切都很简单。

完整的代码将随之而来。一切正常。

我不清楚什么。如果您在代码中调用函数,一切正常

Navigator.of(context).pop( _f2() );

如果你把这个函数的实现,就会发生错误,第一个分号有下划线

Navigator.of(context).pop(
 _b = true;
 _visible = true;
 _text = 'Hide';
);

如果将此函数的实现放在 setState 中,则不会发生错误,它可以正常工作

Navigator.of(context).pop(
 setState(() {
   _b = true;
   _visible = true;
   _text = 'Hide';
  })
);

如果我放一个匿名函数,没有错误,但没有文字出现

Navigator.of(context).pop(
 () {
   _b = true;
   _visible = true;
   _text = 'Hide';
 }
);

都是关于setState的吗?告诉我怎么做对吗?谢谢你。

这是完整的代码。

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: MyHomePage(),
   ),
  );
 }
}

class MyHomePage extends StatefulWidget {
 @override
 _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

 String _text;
 bool _visible;
 bool _b;

 @override
 void initState() {
  super.initState();
  _text = 'Show';
  _visible = false;
  _b = false;
 }

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

 }

 void _f1() {
  setState(() {
   switch(_b) {
    case false:
     _showAlertDialog1();
     break;
    case true:
     _b = false;
     _visible = false;
     _text = 'Show';
     break;
   }
  });
 }

 void _f2() {
  setState(() {
   _b = true;
   _visible = true;
   _text = 'Hide';
  });
 }

 Future<void> _showAlertDialog1() async {
  return showDialog<void>(
   context: context,
   barrierDismissible: false,
   builder: (BuildContext context) {
    return AlertDialog(
     title: Text(
      'SHOW TEXT!'
     ),
     content: Text(
      'Show text now'
     ),
     actions: <Widget>[
      FlatButton(
       onPressed: () {

        //все нормально работает
        Navigator.of(context).pop( _f2() );

        //происходит ошибка, подчеркнута первая точка с запятой
        /*Navigator.of(context).pop(
         _b = true;
         _visible = true;
         _text = 'Hide';
        );*/

        //ошибки не происходит, работает нормально
        /*Navigator.of(context).pop(
         setState(() {
          _b = true;
          _visible = true;
          _text = 'Hide';
         })
        );*/

        //ошибки нет, но текст не появляется
        /*Navigator.of(context).pop(
         () {
          _b = true;
          _visible = true;
          _text = 'Hide';
         }
        );*/

       },
       child: Text(
        'Ok',
       ),
      ),
      FlatButton(
       onPressed: () {
        Navigator.of(context).pop();
       },
       child: Text(
        'Cancel',
       ),
      ),
     ],
    );
   }
  );
 }

 @override
 Widget build(BuildContext context) {
  return Stack(
   children: <Widget>[
    Align(
     alignment: Alignment.topLeft,
     child: Container(
      width: double.infinity,
      margin: const EdgeInsets.all(16.0),
      child: RaisedButton(
       onPressed: () { _f1(); },
       splashColor: Colors.blue.withOpacity(0.5),
       shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(10)
       ),
       child: Text(
        _text,
        style: TextStyle(
         color: Colors.deepPurple,
         fontSize: 20.0,
        ),
       ),
      ),
     ),
    ),
    Align(
     alignment: Alignment.center,
     child: Visibility(
      visible: _visible,
      child: Text(
       'Hello World!',
       style: TextStyle(
        color: Colors.pink,
        fontSize: 36.0,
       ),
      ),
     ),
    ),
   ],
  );
 }

}
flutter
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2020-05-21 03:18:25 +0000 UTC

TextFormField 小部件中的 onSaved 事件处理程序不起作用

  • 0

TextFormField小部件上的onSaved事件处理程序不起作用。

onSaved: (String value) {
 setState(() {
  _strNameUser = value;
 });
},

如果我理解正确,字符串值是出现在输入字段中的文本值。然后,我可以将它分配给任何变量。但什么也没有发生。一切都发生在控制器中。第一个代码没有控制器,它不起作用。第二个代码是一个替换onSaved的控制器。那里的代码有效。我不明白的原因是什么?

第一个代码没有控制器,它不起作用。

主要.dart

import 'package:flutter/material.dart';

import 'package:string_validator/string_validator.dart';

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

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: MyHomePage(),
   ),
  );
 }
}
class MyHomePage extends StatefulWidget {
 @override
 _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
 //объявление переменных
 String _strNameUser;
 String _strEmail;
 String _str;
 bool _a, _b, _c;

 //вызывается один раз при инициализации виджета
 @override
 void initState() {
  super.initState();
  _strNameUser = '';
  _strEmail = '';
  _str = '';
 }

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

 }

 void _f1() {
  setState(() {
   _a = _strNameUser.isNotEmpty;
   _b = _strEmail.isNotEmpty;
   _c = isEmail(_strEmail);

   if(_a && _b && _c) {
    _str = 'user name : $_strNameUser\n email: $_strEmail';
   } else {
    _str = '';
   }
  });
 }

 @override
 Widget build(BuildContext context) {
  return Stack(
   children: <Widget>[
    Align(
     alignment: Alignment(0.0, -0.65),
     child: Column(
      mainAxisSize: MainAxisSize.min,
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: <Widget>[
       Container(
        height: 50.0,
        margin: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
        alignment: Alignment.center,
        child: TextFormField(
         onSaved: (String value) {
          setState(() {
           _strNameUser = value;
          });
         },
         cursorColor: Color(0xffF56323),
         style: TextStyle(
          color: Colors.deepPurple,
          fontSize: 22.0,
         ),
         decoration: InputDecoration(
          labelText: 'User Name',
          prefixIcon: (_a == null || _a) ? Icon(Icons.person, color: Color(0xffF56323)) : Icon(Icons.error, color: Colors.pink),
          border: OutlineInputBorder(
           borderRadius: BorderRadius.circular(10.0),
           borderSide: BorderSide(),
          ),
         ),
        ),
       ),
       Container(
        height: 50.0,
        margin: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
        alignment: Alignment.center,
        child: TextFormField(
         onSaved: (String value) {
          setState(() {
           _strEmail = value;
          });
         },
         keyboardType: TextInputType.emailAddress,
         cursorColor: Color(0xffF56323),
         style: TextStyle(
          color: Colors.deepPurple,
          fontSize: 22.0,
         ),
         decoration: InputDecoration(
          labelText: 'Email',
          prefixIcon: (_b == null || (_b && _c)) ? Icon(Icons.email, color: Color(0xffF56323)) : Icon(Icons.error, color: Colors.pink),
          border: OutlineInputBorder(
           borderRadius: BorderRadius.circular(10.0),
           borderSide: BorderSide()
          ),
         ),
        ),
       ),
       Container(
        height: 50.0,
        margin: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
        alignment: Alignment.center,
        child: Container(
         width: double.infinity,
         height: 50.0,
         child: FlatButton(
          onPressed: () {
           _f1();
          },
          color: Color(0xffF56323).withOpacity(0.9),
          splashColor: Colors.amberAccent,
          child: Text(
           'Ok',
           style: TextStyle(
            color: Colors.white,
            fontSize: 22.0,
           ),
          ),
          shape: RoundedRectangleBorder(
           borderRadius: BorderRadius.circular(10)
          ),
         ),
        ),
       ),
      ],
     ),
    ),
    Align(
     alignment: Alignment(0.0, 0.85),
     child: Text(
      _str,
      style: TextStyle(
       color: Colors.pink,
       fontSize: 26.0,
      ),
     ),
    ),
   ],
  );
 }
}

控制器的第二个代码有效。

主要.dart

import 'package:flutter/material.dart';

import 'package:string_validator/string_validator.dart';

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

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: MyHomePage(),
   ),
  );
 }
}
class MyHomePage extends StatefulWidget {
 @override
 _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
 //объявление переменных
 TextEditingController _controllerUserName;
 TextEditingController _controllerEmail;
 String _strNameUser;
 String _strEmail;
 String _str;
 bool _a, _b, _c;

 //вызывается один раз при инициализации виджета
 @override
 void initState() {
  super.initState();
  _controllerUserName = TextEditingController();
  _controllerEmail = TextEditingController();
  _strNameUser = '';
  _strEmail = '';
  _str = '';
 }

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

 }

 void _f1() {
  setState(() {
   _strNameUser = _controllerUserName.text;
   _strEmail = _controllerEmail.text;

   _a = _strNameUser.isNotEmpty;
   _b = _strEmail.isNotEmpty;
   _c = isEmail(_strEmail);

   if(_a && _b && _c) {
    _str = 'user name : $_strNameUser\n email: $_strEmail';
   } else {
    _str = '';
   }
  });
 }

 @override
 Widget build(BuildContext context) {
  return Stack(
   children: <Widget>[
    Align(
     alignment: Alignment(0.0, -0.65),
      child: Column(
       mainAxisSize: MainAxisSize.min,
       crossAxisAlignment: CrossAxisAlignment.stretch,
       children: <Widget>[
        Container(
         height: 50.0,
         margin: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
         alignment: Alignment.center,
         child: TextFormField(
          controller: _controllerUserName,
          cursorColor: Color(0xffF56323),
          style: TextStyle(
           color: Colors.deepPurple,
           fontSize: 22.0,
          ),
          decoration: InputDecoration(
           labelText: 'User Name',
           prefixIcon: (_a == null || _a) ? Icon(Icons.person, color: Color(0xffF56323)) : Icon(Icons.error, color: Colors.pink),
           border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(10.0),
            borderSide: BorderSide(),
           ),
          ),
         ),
        ),
        Container(
         height: 50.0,
         margin: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
         alignment: Alignment.center,
         child: TextFormField(
          controller: _controllerEmail,
          keyboardType: TextInputType.emailAddress,
          cursorColor: Color(0xffF56323),
          style: TextStyle(
           color: Colors.deepPurple,
           fontSize: 22.0,
          ),
          decoration: InputDecoration(
           labelText: 'Email',
           prefixIcon: (_b == null || (_b && _c)) ? Icon(Icons.email, color: Color(0xffF56323)) : Icon(Icons.error, color: Colors.pink),
           border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(10.0),
            borderSide: BorderSide()
           ),
          ),
         ),
        ),
        Container(
         height: 50.0,
         margin: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
         alignment: Alignment.center,
         child: Container(
          width: double.infinity,
          height: 50.0,
          child: FlatButton(
           onPressed: () {
            _f1();
           },
           color: Color(0xffF56323).withOpacity(0.9),
           splashColor: Colors.amberAccent,
           child: Text(
            'Ok',
            style: TextStyle(
             color: Colors.white,
             fontSize: 22.0,
            ),
           ),
           shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(10)
           ),
          ),
         ),
        ),
       ],
      ),
    ),
    Align(
     alignment: Alignment(0.0, 0.85),
     child: Text(
      _str,
      style: TextStyle(
       color: Colors.pink,
       fontSize: 26.0,
      ),
     ),
    ),
   ],
  );
 }
}
flutter
  • 1 个回答
  • 10 Views
Martin Hope
Anton
Asked: 2020-05-12 21:14:18 +0000 UTC

MediaQuery.of(context) 不工作

  • 0

不工作,错误

宽度:MediaQuery.of(context).size.width / 2,高度:MediaQuery.of(context).size.height / 2,

不起作用,只能显示值

宽度:window.physicalSize.width / 2,高度:window.physicalSize.height / 2,

主要.dart

import 'package:flutter/material.dart';
import 'dart:ui';

void main() async {
 runApp(MyApp());
}

class MyApp extends StatefulWidget {
 @override
 _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
 //объявление переменных

 //вызывается один раз при инициализации виджета
 @override
 void initState() {
  super.initState();

 }

 void _f1(double value) {
  setState(() {

  });
 }

 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: Stack(
     children: <Widget>[
      Align(
       alignment: Alignment.center,
       child: Container(

        //НЕ РАБОТАЕТ, ОШИБКА
        //width: MediaQuery.of(context).size.width / 2,
        //height: MediaQuery.of(context).size.height / 2,

        //НЕ РАБОТАЕТ, МОЖНО ТОЛЬКО ВЫВЕСТИ НА ЭКРАН ЗНАЧЕНИЯ
        width: window.physicalSize.width / 2,
        height: window.physicalSize.height / 2,

        color: Colors.pink,
       ),
      ),
     ],
    ),
   ),
  );
 }
}

如果有人遇到此错误,请告诉我。谢谢你。在此处输入图像描述

flutter
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5